2 minuto(s) de lectura

En esta serie de artículos vamos a realizar una introducción a los ataques Cross-Site Scripting (XSS) con el objetivo de entender como funcionan, que peligros comportan y como aplicar las medidas necesarias para evitarlos.

Los ataques de tipo Cross-Site Scripting son un tipo de inyección. En esta el atacante utiliza las entradas de datos de un sitio web para inyectar scripts maliciosos (normalmente JavaScript) que después se ejecutarán en el navegador de otros usuarios, es decir, en las víctimas de este ataque.

Tipos de XSS

Podemos diferenciar los ataques XSS según si son o no persistentes y según donde se utilizan los datos no confiables. A continuación vemos un cuadro resumen ofrecido por OWASP de los tipos de XSS:

Cuadro resumen tipos de ataques XSS

Tras esto pasamos a detallar como funcionan los ataques en los cuales los datos no confiables se utilizan en el servidor:

Stored Server XSS: La vulnerabilidad se encuentra en el código del servidor y consiste en lo siguiente: En esta el atacante enviará una petición al servidor, este la almacenará y la mostrará a otros usuarios. La petición del atacante contendrá un script que se enviará también a los usuarios que visiten la página que contiene la vulnerabilidad haciendo que este script sea procesado y ejecutado en el navegador de estos.

Veamos un ejemplo utilizando la web vulnerable WebGoat:

En este ejemplo tendremos que el atacante será un trabajador llamado Tom que tiene acceso a modificar sus datos de usuario. La víctima será Jerry, de recursos humanos, que tiene acceso a ver el perfil de todos los empleados.

Tom accede a su perfil y modifica sus datos introduciendo código JavaScript:

XSS

Cuando Jerry acceda a ver el perfil de Tom, el servidor enviará en el contenido el script inyectado por Tom y este se ejecutará en el navegador de Jerry:

Stored XSS Fase 2    Stored XSS Fase 3

Si analizamos el código HTML podremos ver el script introducido por Tom:

Stored XSS Código HTML

Reflected Server XSS: En este tipo de XSS la vulnerabilidad también se encuentra en el código del servidor pero a diferencia del Stored Server XSS el código solo se ejecutará al enviar la petición y no para todas las personas que visiten una página. Es decir, el servidor creará la página añadiendo una entrada enviada en esa petición, esa entrada será la que contendrá el script que se ejecutará en el navegador. Por lo tanto, para ejecutar este código deberemos enviar el script en la petición.

Veamos de nuevo un ejemplo utilizando la web vulnerable WebGoat:

En este ejemplo tendremos de nuevo al atacante Tom que desea ejecutar código JavaScript en el navegador de Jerry.

Tom descubre que hay una vulnerabilidad XSS en el buscador de empleados, al introducir un script este se ejecuta en el navegador:

Se inyecta el script

Verifica que el script introducido se ejecuta

Por lo tanto Tom envía a Jerry un correo con un enlace a la web, este enlace contiene como parámetro el código JavaScript a ejecutar. Jerry verá el enlace y confiará en el ya que es a una web conocida, al hacer clic el código JavaScript introducido como parámetro se ejecutará en el navegador de Jerry: