sábado, 16 de mayo de 2009

[Seguridad] Cross-site Scripting (XSS)

Cuando el creador de una página web no tiene el debido cuidado, puede hacer su web susceptible a ciertos ataques de usuarios malintencionados.

Un ejemplo de este tipo de vulnerabilidades, derivada normalmente por la mala validación de los campos de texto disponibles en nuestra web, es el Cross-site Scripting o XSS. Este ataque consiste en introducir código malicioso en nuestra web cuando un usuario la visita y robar así, por ejemplo, la cookie del usuario (su nombre de usuario y contraseña, generalmente).

Existen muchas formas de hacer este tipo de ataque, pero pondré un ejemplo sencillo que servirá de ilustración.

Si accedemos a esta web: Web Débil, vemos su contenido sin problemas, una web absolutamente normal. Pues es una web susceptible a este tipo de ataques (aunque para esta web no tenga mucho sentido).

Para demostrarlo, vamos a construir un link personalizado que ponga un texto nuevo cuando se accede a la web.



Utilizamos uno de sus campos rellenables para introducir código HTML.

<H1> -> Sirve para poner el texto mas grande.
<MARQUEE> -> Sirve para que el texto se mueva.

[El link es inofensivo, tanto para el que entre, como para la web]

http://www.venezuelaesfutbol.com/categoria.php?categoria_id=<h1><marquee>Esto podria ser codigo malicioso. TecnoFreak</marquee></h1> -> Pincha aqui para probarlo o cópialo tu mismo en tu navegador.

Pero si un atacante quisiera sacar partido de esta vulnerabilidad, colocaría código JavaScript en este link para que recogiera información del usuario y la mandara a otro sitio remoto. Un ejemplo de código JavaScript sería el siguiente:

<SCRIPT> -> Sirve para escribir código JavaScript, lo que contenga este campo será interpretado como tal

alert('Mensaje') -> Sirve para mostrar un mensaje por pantalla.

[El link es inofensivo, tanto para el visitante como para la web. Sólo es un saludo]

http://www.venezuelaesfutbol.com/categoria.php?categoria_id=<h1><script>alert('Esto podria ser codigo AUN MAS malicioso.')</script></h1> -> Pincha aqui para probarlo o cópialo tu mismo en tu navegador.

Con códigos JavaScript más avanzados se puede incluso suplantar la web original para introducir otra completamente nueva.

Si todo ha ido bien (cuando creé este post todo funcionaba de perlas), se ha demostrado que una web con este tipo de vulnerabilidad no garantiza en absoluto la privacidad de los usuarios.

Este tipo de vulnerabilidades son fáciles de evitar, basta con hacer una buena validación de los campos y tener siempre controlados los valores de las sesiones de nuestros usuarios.

Así que todos los desarrolladores web que vean esto quedan avisados. Tened cuidado con esta vulnerabilidad, no cuesta nada evitarla.

EDIT: Si para algo me ha servido el comentario del Troll anónimo que comentó el primero a este post, ha sido para encontrar la fuente de donde saqué este ejemplo hace más de un año, además de para darme cuenta de que el que menos sabe es el que mas habla. Gracias troll anónimo.

Vía: Foros CanTV.

Ver la entrada completa