XSS sobre SSL y los filtros de navegador

El otro día salió una conversación a raíz del XSS clásico que ha afectado a la web de la presidencia española de la UE. Alguien preguntaba si una web con SSL a la que se le inyecta código javascript mediante XSS daría algún tipo de alerta de “contenido no seguro” o no. Yo respondí que no, pero como no se me terminó de creer (eso está bien, hay que dudar de todo) hice una pequeña prueba. He montado un servidor web con SSL y certificado autofirmado, con una página web que tiene el siguiente código:

<body>

<form action="sslxss.php" method="get">
<input type="text" id="texto" name="texto">
<input type="submit" value="Ale">
</form>

<br>
<br>
<?
echo $_GET["texto"];
?>
</body>

Este código es obviamente vulnerable a XSS, y la pinta que tiene es la que se muestra en la imagen.

Vista de la web

Vista de la web

Pues bien, iba yo todo contento a calzarle mi XSS de libro cuando…

XSS clásico que falla en chrome

XSS clásico que falla en chrome

¿Pero qué pasa aquí? ¡Yo he programado el código y vamos que si es vulnerable! Podríamos intentarlo con nuestro viejo Firefox 3.5 con el mismo resultado.

XSS clásico que falla en firefox

XSS clásico que falla en firefox

Vaya, parece que hay algo que anda filtrando las comillas, ¿magic quotes? ¿el navegador?. Vamos a darle una pequeña vuelta a la cosa a ver si tengo razón. Firefox ha caído fácil, en cuanto hemos quitado las comillas, y en vez de meter alert(“XSS”); hemos utilizado alert(123); ha saltado la esperada ventanita.

Evitando el filtro de comillas, firefox traga

Evitando el filtro de comillas, firefox traga

Como era de esperar, no hay avisos SSL de contenido no seguro. Sin embargo, Chrome se nos sigue escapando. Podemos probar también con:

<SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
<IMG SRC="javascript:alert('XSS');">

o con una variedad importante de métodos de evasión de filtros y la mayoría fracasarán. Chrome en Linux y Mac ha incluido recientemente un filtro antiXSS que, como estamos viendo, funciona bastante bien. Aunque le han encontrado las cosquillas, todos esos fallos están ya solucionados. Esto no pretende ser un estudio del filtrado XSS de Chrome (quizá para otra ocasión), así que nos quedamos con la idea de que el SSL no ofrece ninguna garantía adicional frente al XSS y de que en Chrome es más díficil que en Firefox 😉

Nos rendimos ante el filtro XSS de Chrome, de momento

Nos rendimos ante el filtro XSS de Chrome, de momento

Anuncios
Tagged with: , ,
Publicado en hacking

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Archive
A %d blogueros les gusta esto: