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.
Pues bien, iba yo todo contento a calzarle mi XSS de libro cuando…
¿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.
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.
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 😉
Responder