Skip to main content
Ataques XSS - Qué son y cómo funcionan

Ataques XSS – Qué son y cómo funcionan

El ataque de Cross Site Scripting, también conocido como XSS, que es una de las vulnerabilidades más comunes desde el año 2014

Bienvenidos a un nuevo post en Byte Mind, en este caso vamos a hablar cobre el ataque de Cross Site Scripting, también conocido como XSS, que es una de las vulnerabilidades más comunes desde el año 2014.

De hecho, forma parte del top 10 de vulnerabilidades más frecuentes en aplicaciones web del año 2021, además, de que este año estará incluida dentro de la categoría de inyecciones.

 

¿Qué es Cross Site Scripting

XSS es un tipo de ataque en el cual un atacante es capaz de inyectar un script malicioso en un sitio web, para luego ser procesado y ejecutado.

Por norma general, este tipo de ataques, son originados por la apliación web por el que el navegador asume que es una fuente fiable, consiguiendo de esta manera que el usuario víctima ejecute el código malicioso con el fin de robar datos personales del mismo, sesiones, cookies, etc.

Existen 3 tipos de ataques XSS, reflejado, almacenado y basado en DOM, que pasaremos a explicar por separado y con ejemplos.

 

Ataque XSS Reflejado

Un ataque XSS Reflejado o, también conocido como No Persistente, es aquel en el cual el payload suele ser inyectado a través de un parámetro de la solicitud HTTP, que luego será procesado por la apliación web y, finalmente, desplegado y ejecutado en un punto concreto sin pasar por ningún tipo de validación de datos.

Es la forma más sencilla de ejecutar un script malicioso que busca afectar el navegador de la vícitma, y en la mayoría de casos, sin que el usuario se de cuenta del ataque.

Ataque XSS Reflejado

 

Por ejemplo, supongamos que un usuario accede a la siguiente url:

El usuario, al acceder se le abriría un cuado de diálogo con el mensaje “Este es un ejemplo de ataque XSS”, lo que, en caso de ser realmente un código malicioso, estaría infectando el navegador del usuario.

 

Ataque XSS Almacenado

El ataque XSS Almacenado o persistente tiene como característica que la aplicación guarda el payload malicioso en un medio de almacenamiento hasta que el valor es recuperado y utilizado para formar parte del documento HTML.

Este tipo de ataques se deben a una insuficiente, o nula, validación de los campos introducidos en formularios dando como lugar que al enviar los datos estos sean almacenados en un fichero, base de datos, etc, provocando que sean ejecutados en cada navegador que carga la aplicación.

Ataque XSS Almacenado

Por ejemplo, supongamos que en el formulario de comentarios introdujésemos el siguiente código javascript:

Cada vez que un usuario cargase la página en la cual se ha creado ese comentario, este se cargaría desde la base de datos, provocando que el atacante robase las cookies del usuario, consiguiendo con ello, por ejemplo, el acceso como usuario registrado en la aplicación.

 

Ataque XSS basado en DOM

Antes de comprender este ataque, vamos a explicar qué es el DOM. El Document Object Model, o DOM, es una interfaz utilizada para representar la estructura de un documento web y conectarlo con un lenguaje de scripting. En este sentido, el DOM facilitará la estructura de documentos como XML o HTML y permitirá a los programas modificar la estructura, contenido y estilo del documento.

En el caso de los ataques XSS basados en DOM, el payload malicioso es ejecutado como resultado de la modificación del entorno en el navegador de la víctima, lo que lleva a que el usuario ejecute código desde el lado del cliente sin saber que lo está haciendo.

 

Un ejemplo de este tipo de ataque sería similar al XSS Reflejado, introduciríamos el siguiente código en la url, y en este caso, el portal tendría una función que añadiría el valor introducido como parte del html:

Codificaríamos el mismo para poder enviar el mismo a través de la uri quedando así:

Esto provocaría que se cargase en el DOM una etiqueta H1 con el título “Hola Mundo” y, que al pasar el ratón por encima del elemento, apareciese un cuado de diálogo con el texto “Vulnerable a XSS basado en DOM”

 

Como evitar ataques XSS

Para evitar este tipo de ataques, OWASP nos ofrece un modelo preventivo bajo algunas reglas a tener en cuenta para evitarlos.

  • Realizar las validaciones oportunas, tanto desde el lado del cliente como del servidor, para evitar que se introduzcan caracteres innecesarios. Por ejemplo, en el campo nombre permitir sólo caracteres alfanuméricos.
  • Codificar la salida de los datos, al menos para caracteres especiales (&, /, ‘, “) en su respectivo código HTML.
  • Utilizar librerias o funciones para sanitizar los datos introducidos por el usuario.
  • Implementar cabeceras de seguridad para ayudar a prevenir ataques como las siguientes:
    • Uso de la cabecera Content Secure Policy (CSP) 
    • Uso del atributo Secure y HttpOnly en las cookies   
    • Uso de la cabecera X-XSS-Protection

 

Esto ha sido todo por ahora, espero les sirva de utilidad y les ayude a comprender un poco mejor como funcionan este tipo de ataques.

Y como siempre, cualquier duda o aporte es bienvenida en la sección de comentarios.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.