Vulnerabilidades XSS en páginas web
Escrito por J.F. el Tuesday, 18 de September del 2007 a las 18:06
XSS proviene del inglés "Cross Site Scripting" y se denomina a la inyección de código HTML incrustado. Éste tipo de vulnerabilidades puede encontrarse en todo tipo de aplicaciones web, no ocurre como con la Inyección SQL que era necesario interactuar con la base de datos. Éste tipo de vulnerabilidades proviene de una validación incorrecta de los datos, y puede tener 2 tipos de orÃgenes como veremos más adelante. Procedamos pues a definir de la forma más clara posible XSS, ya que puede resultar algo lioso, e iremos explicando un ejemplo.
Las vulnerabilidades XSS no afectan al servidor que las contiene, si no a los usuarios de ese servidor, que pueden ver como información privada(sesión) puede llegar a manos poco deseadas. Expliquemos con un ejemplo un tipo de vulnerabilidad XSS.
Imagina que eres usuario y asiduo visitante a un foro, y a la hora de escribir posts el desarrollador de ese foro no controló de la forma correcta el uso de etiquetas HTML que un usuario podÃa utilizar a la hora de enviar un mensaje. Ahà es donde se puede explotar una vulnerabilidad XSS. Un usuario puede enviar un mensaje a dicho foro, en el cual puede incluir una URL en la que inyectar código Javascript, de tal forma que podrÃa obtener toda la información de una cookie de cada usuario logueado que pinchara en dicha URL. Ahora es cuando se aprecia por qué el servidor no es atacado, si no los usuarios. Normalmente éste tipo de ataques se culmina enviando la cookie de la vÃctima a otro servidor de la persona que envÃo el enlace con el ataque XSS, donde podrá ir almacenando en un archivo de texto por ejemplo toda la información obtenida, y proceder a suplantar la identidad de las personas de las cookies robadas. Pero, ¿Como podrÃan obtener usuario y contraseña? Realmente no es posible, lo que si puede llegar a resultar sumamente fácil es utilizar los datos de esa cookie y almacenarla en caché para poder acceder posteriormente a foros, webs, etc. Por ejemplo, hace unos meses fué detectada una vulnerabilidad XSS, en la que pinchando en una URL que te enviaban a tu correo de Hotmail, se podÃa obtener la cookie(procedimiento similar al explicado más adelante). Una vez obtenida la cookie de hotmail, simplemente disponiendo del navegador Mozilla Firefox y la extensión WebDeveloper, podÃan acceder a la bandeja de entrada del correo. Simplemente abrÃan su propio correo de Hotmail, le daban a editar cookie(opción que ofrece WebDeveloper), cambiaban los datos por los obtenidos de la vÃctima y ¡Bingo! Refrescando la página habÃan robado la sesión y se encontraban en la bandeja de entrada de la vÃctima. Gracias a Dios el bug apenas duró 2 dÃas, y rapidamente fué parcheado, pero millones de usuarios tuvieron en peligro su cuenta de Hotmail, y muchos quizás no se hayan enterado.
¿Como obtener una cookie gracias a Javascript? Es muy simple, tan sólo copia y pega el siguiente código en la barra de direcciones de tu navegador, estando por ejemplo logueado a Gmail, o cualquier foro, y podrás ver en forma de alerts toda la información de la Cookie:
-
javascript:for(var g in document.cookie.split(';'))void(prompt("Valor de cookie "+document.cookie.split(';')[g].split('=')[0],document.cookie.split(';')[g].split('=')[1]));alert("Cookies:\n"+document.cookie.replace(/;/,"\r\n"));
Tipos de vulnerabilidades XSS:
Directa: Es muy dificil encontrarla, ya que permite el uso de etiquetas tan peligrosas como iframe o script
Indirecta: Lo ya mencionado, mediante el uso de URL´s, robando datos mediante Javascript.
Mediante éste tipo de vulerabilidades puedes ser redirigido a una nueva página sin tu saberlo, y al introducir en ellas tu usuario y contraseña puedes ser vÃctima de un ataque de phising. Veamos un par de ejemplos propuestos por la Wikipedia sobre ataques XSS:
<BR SIZE="&{alert('XSS')}">
<FK STYLE="behavior: url(http://yoursite/xss.htc);">
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
Podemos ver facilmente el código inyectado mediante el uso de estilos, filtros que muchas veces no son controlados y suelen ser aprovechados. Se puede crear un DIV con background-image: url(javascript:eval(this.fu)) como estilo y añadir al DIV un campo llamado fu que contenga el código a ejecutar, como por ejemplo alert('Hola'):
<div fu="alert('Hola mundo');" STYLE="background-image: url(javascript:eval(this.fu))">
La forma de recoger las cookies es muy sencilla, y se puede realizar mediante un sencillo archivo en PHP, como éste, que fué el utilizado para recoger las cookies en el bug de hotmail:
-
<?php
-
$cookie = $_GET['c'];
-
$usuario = $_GET['id'];
-
$re = $HTTPREFERRER;
-
?>
Lo más común es encontrar vulnerabilidades XSS en los buscadores de los sitios web, y para saber si uno es vulnerable basta con introducir en la caja de búsqueda: alert("XSS"); Si obtenemos un mensaje quiere decir que dicha página es vulnerable a XSS, y con un poco de imaginación no es difÃcil empezar a explotarla. Caer en éste tipo de URL´s es difÃcil ya que resulta bastante obvio pinchar en una URL en la que apreciamos código Javascript, pero podemos camuflarlo cambiando caracter por su valor en hexadecimal, siendo menos obvia la trampa. Obtener una tabla de conversión de caracteres a hexadecimal es algo que no cuesta mucho usando Google. Por tanto espero haber concienciado de lo peligrosas que son las vulnerabilidades XSS, que mucha gente dice que se encuentran presentes en todas las páginas web. Debido a que no es peligroso para el servidor muchos desarrolladores no se preocupan en exceso de ellas, pero por favor, piensesn en el usuario, y traten de crear los filtros adecuados.
Enlaces: | XSS en la Wikipedia | Chuleta completa sobre todo tipo de ataques XSS
Comentarios (10)
Categoria: General
- Añadir este post a
- Del.icio.us -
- Meneame -
- Digg -
- Webeame
Entradas relacionadas
Pingback de La página web del FBI sensible a ataques XSS « Debubuntu’s Weblog
Realizado el Saturday, 8 de December del 2007 a las 0:20
[...] que lleva meses vigente, y que permite generar url´s con contenido ajeno al de la página del FBI mediante XSS. De esa manera, podemos insertar practicamente cualquier cosa que deseemos incluso esconder parte de [...]
Comentario de jose g
Realizado el Saturday, 5 de January del 2008 a las 17:11
document.documentElement.innerHTML=”ActiveSheet”;
Comentario de J.F.
Realizado el Monday, 7 de January del 2008 a las 12:43
¿Qué quieres decir con eso?
Pingback de » Purificador de HTML para quienes programan en PHP | Solo Código |
Realizado el Tuesday, 15 de January del 2008 a las 19:30
[...] de HTML purifier, con esa herramienta podemos estar seguros de tener un código limpio a salvo de vulnerabilidades XSS, válido, etc. Puedes descargarte HTML Purifier y usarlo en tu ordenador o utilizar la demo online. [...]
Comentario de hernan
Realizado el Thursday, 19 de June del 2008 a las 20:17
como lo hago en la practica amigo….
Comentario de Tandy
Realizado el Wednesday, 1 de October del 2008 a las 15:46
åªéœ€10å…ƒï¼Œå°±èƒ½è®©ä½ çš„å¹¿å‘Šé布å„个网站ï¼
支æŒå›¾ç‰‡/超链å‘é€ï¼æ”¯æŒåˆ†ç±»/地域网站å‘é€ï¼
10元,就å¯èƒ½æ¢æ¥æ„想ä¸åˆ°çš„æ•ˆæžœï¼Œä¸ºä»€ä¹ˆä¸å°è¯•下呢ï¼
QQ:224549200(注明“广告â€ï¼‰
Comentario de carlos
Realizado el Friday, 14 de November del 2008 a las 21:37
Comentario de carlos
Realizado el Friday, 14 de November del 2008 a las 21:38
Comentario de HaCker Mr_NANO
Realizado el Thursday, 20 de May del 2010 a las 16:07
Comentario de leon
Realizado el Friday, 11 de March del 2011 a las 10:25
Esto no funcionara porque este sitio es seguro.
