Anteriormente hemos informado sobre los ataques web XSS y qué tipos existen. Asimismo, también hemos informado sobre vulnerabilidades XSS en sitios web populares. En esta ocasión, analizaremos cuál es el impacto de un ataque stored cross site scripting (XSS) sobre un usuario y qué precauciones deberían tomarse para que el usuario tome medidas de protección.
Los ataques de tipo stored XSS o persistentes consisten en inyectar código sobre un determinado sitio web, el cual pasa a formar parte del propio código. Este tipo de ataque es más peligroso que el XSS no persistente debido a que afecta a todos los usuarios que ingresen el en sitio web luego de efectuado el ataque. Suponiendo que se cuenta con un sistema similar a un foro, donde los usuarios pueden publicar mensajes para que otros usuarios. Para ello, tomaremos una de las secciones disponibles en DVWA (Damn Vulnerable Web Application):
Tal como puede observarse, los mensajes que se publican se alojan de forma permanente en el portal web. En esta instancia, es necesario comprobar los controles implementados en el foro. A continuación puede visualizarse el código correspondiente:
El control implementado en la línea 15 previene que se agregue la cadena “<script>” utilizada para inyectar código JavaScript. Sin embargo, este es un control poco robusto. Por eso, con solo utilizar la secuencia “<script language javascript> código javascript </script>”, ya es posible saltear este tipo de control. En ese caso, un atacante podría dejar un comentario con un código que realice una conexión remota a un servidor que, por ejemplo, tenga alojado un exploit. Por consiguiente, todos los usuarios que visiten el foro podrían ser víctimas del exploit, siempre y cuando sus sistemas sean vulnerables.
En la siguiente imagen puede visualizarse como un usuario es víctima de un exploit del tipo Java Applet Attack, donde luego de ingresar al foro y al contar con una versión desactualizada de Java, el atacante obtiene una shell en el sistema del usuario:
El problema en este escenario recae directamente en cómo se implementaron los controles sobre la aplicación web. De todas formas, el usuario no está en condiciones de evaluar la seguridad de todos los sitios que visita ya que no depende de él. Es por ello que siempre recomendamos a los usuarios mantener las aplicaciones y plugins de tercero actualizados. De esa manera, la probabilidad de que exista una vulnerabilidad y, en su defecto, sea explotada, es mucho menor.
Asimismo, los desarrolladores deben contemplar la seguridad a nivel de código. OWASP provee un documento interesante con algunas reglas a tener en cuenta para prevenir ataques XSS. Incorporando buenas prácticas durante la etapa de desarrollo y codificación, es posible prevenir vulnerabilidades de diseño y elevar el nivel de seguridad de la aplicación.
Fernando Catoira
Analista de Seguridad