jueves, 3 de enero de 2013

El peligroso XSS

El XSS (Cross Site Scripting) o secuencia de comandos en sitios cruzados, es una técnica de hacking que vulnera la forma en que esta programado un sitio web, básicamente se basa en el descuido del programador que al hacer un sitio piensa que solo se le dará la utilidad para la cual lo creo y dado que las computadoras obedecen ciegamente es posible ejecutar código malicioso si el programador no tiene cuidado en la confianza que le da a los datos de entrada y salida. El XSS se vale de tecnologías de lado cliente como javascript, vbscript y html.

Si bien es un ataque que se da de lado cliente(navegador) no significa que estamos exentos de responsabilidad como programadores de un sitio, ya que este ataque se lleva a cabo a través de nuestros sitios, por lo que podría quedar en algunos casos, comprometida la seguridad de nuestro propio sitio.

Es usado principalmente para robar información delicada, phishing, secuestrar sesiones y lograr entrar en un sitio restringido. Existen dos tipos de XSS, el indirecto y el directo:

El indirecto o reflejado. Consiste en modificar las variables que una aplicación web usa para funcionar, ejemplo los valores que se pasa google en la URL a la hora de hacer las búsquedas, y puede valerse de GET,  cabeceras HTTP (POST) y Cookies

El directo o persistente. Este se basa en embeber código html y javascript en aplicaciones que presentaran dicho código, ejemplo un sitio de foros, donde los usuarios publican temas y respuestas que serán almacenados en una base de datos y posteriormente para su visualización serán leídos.

Para darse una idea, nada como unos ejemplos muy simples. Tenemos el siguiente sitio que usa a otra pagina, pero lo hace por medio de una variable pasada por URL.

www.miweb.com/paginax.php?pagina=paginados.php

Luego podemos ejecutar código arbitrario.

www.miweb.com/paginax.php?pagina=<script>alert(document.cookie);</script>

o ejecutar código usando caracteres en Hexadecimal


www.miweb.com/paginax.php?pagina=%3Cscript%3alert(document.cookie);%3C%2Fscript%3

Lo anterior es un ataque de tipo reflejado.

El directo se basa en el echo de que un sitio web es capas de guardar el código inyectado y posteriormente interpretado en el navegador de la victima. Por ejemplo, el siguiente código inyectado desde un <input>

<script>for (;;) alert("bucle"); </script>

Podría provocar una especie de denegación de servicio en el navegador de la victima.

Desde luego estos ejemplos son muy ingenuos y no son útiles para nada, pero solo sirven para dar una idea. La forma de mitigar este problema, es simplemente validando todos los datos que vendrán del lado cliente.

Usar validaciones tanto de lado cliente como de lado servidor es lo recomendable, la expresiones regulares ayudan mucho, por regla general nunca confíes en el dato que vendrá de lado cliente, por lo tanto valida siempre según el dato que esperas, por ejemplo, en un formulario que pide datos como correo o numero de teléfono  se debe validar que dichos campos tengan solamente caracteres de ese tipo.


Aquí hay un PDF que me sirvió para darme una introducción al tema http://xsser.sourceforge.net/xsser/XSS_for_fun_and_profit_SCG09_(spanish).pdf

Y que mejor que la guía OWASP sobre el tema, los PDF están en esta pagina.

https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

Saludos.

1 comentario:

  1. Excelente artículo! Esta muy bueno que los programadores puedan entender estos temas y evitarlos utilizando buenas practicas en programación. Saludos y excelente blog

    ResponderEliminar