Vulnerabilidad Cross-Site Scripting (XSS): Explicación y PoC

    Los ataques XSS pueden acarrear consecuencias graves tanto para las empresas como para los usuarios individuales. Por este motivo, resulta fundamental que los desarrolladores web implementen medidas de seguridad adecuadas para prevenir este tipo de vulnerabilidades. Estas medidas pueden incluir la validación de los datos de entrada, la eliminación del código HTML peligroso y la restricción de los permisos de JavaScript en el navegador del usuario.

    Los ataques de Cross-Site Scripting (XSS) implican la inserción de código malicioso en sitios web, a menudo considerados seguros. Este tipo de ataque ocurre cuando los ciberdelincuentes insertan scripts dañinos en el contenido de un sitio web comprometido, que luego se incorpora al contenido dinámico enviado al navegador del usuario. El navegador del usuario, al no discernir la naturaleza maliciosa de los scripts, los ejecuta. Esta ejecución posibilita que los scripts accedan a cookies, tokens de sesión y otra información sensible almacenada por el navegador y utilizada en el sitio afectado. Además, los atacantes pueden propagar malware, modificar el contenido de sitios web y llevar a cabo ataques de phishing para obtener credenciales de usuario.

    Dado que JavaScript se ejecuta en el navegador del usuario, los detalles de la sesión del usuario autenticado pueden ser robados, permitiendo a los atacantes dirigirse a los administradores del sitio y causar daños. Dependiendo de cómo se inyecte el código, el contenido malicioso puede no estar presente en la página web en sí, sino que solo aparece temporalmente durante el ataque, lo que puede dar la impresión de que el sitio está en peligro cuando no es así.

    Los ataques de XSS pueden desencadenarse de varias formas, como la ejecución automática al cargar la página o al pasar el cursor sobre elementos específicos, como hipervínculos. En algunos casos, el XSS puede ocurrir de manera más directa, por ejemplo, a través de un correo electrónico malicioso. Algunos ataques de XSS no tienen un objetivo específico, aprovechando cualquier vulnerabilidad en la aplicación o el sitio.

    Existen diversas modalidades de vulnerabilidades XSS, entre las que se incluyen:

        - Reflejado: Esta forma de XSS ocurre cuando los datos ingresados por el usuario se reflejan en la respuesta HTTP sin ser debidamente validados. Esto permite que un atacante inyecte código malicioso en la respuesta, el cual luego se ejecuta en el navegador del usuario.
        - Almacenado: Esta variante de XSS ocurre cuando un atacante logra guardar código dañino en una base de datos o en el servidor web que aloja una página web vulnerable. Este código se ejecuta cada vez que la página es cargada.
        - DOM-Based: Esta forma de XSS ocurre cuando el código malicioso se ejecuta en el navegador del usuario a través del DOM (Modelo de Objetos del Documento). Esto sucede cuando el código JavaScript en una página web modifica el DOM de una manera que es susceptible a la inyección de código dañino.

    Dependiendo de la gravedad del ataque, las cuentas de usuario pueden comprometerse, pueden activarse troyanos y el contenido de la página puede ser modificado para engañar a los usuarios y obtener sus datos privados. Las cookies de sesión también pueden ser expuestas, lo que permitiría a los atacantes hacerse pasar por usuarios reales y explotar sus cuentas privadas.

    Si un ataque de Cross-Site Scripting tiene éxito, puede tener consecuencias devastadoras para la reputación de una empresa en línea y su relación con los clientes. Lamentablemente, los errores que permiten estos ataques son bastante comunes y pueden explotarse en varios entornos de programación, incluyendo VBScript, Flash, ActiveX y, especialmente, JavaScript debido a su estrecha integración con la mayoría de los navegadores. Esta capacidad para afectar plataformas ampliamente utilizadas hace que los ataques de XSS sean peligrosos y prevalentes.




PoC 1

    Para la prueba de concepto utilizaremos el laboratorio Gossip World!

   Al abrir la web tenemos un panel de registro. Así que nos vamos a registrar y vamos a ver que nos encontramos.


    Vemos un buscador y vamos a lanzar el script básico de reconocimiento para ver si es vulnerable a XSS



Como vemos si es vulnerable, llegados a este punto podríamos realizar diversos ataques.
Como al registrarnos nos da la opcion de escribir articulos, vamos a crear uno, en este articulo vamos a hacer que cuando algun visitante vaya a leerlo le sale un popup solicitandole en correo para poder continuar.


    Este script solicitará al usuario que ingrese su dirección de correo electrónico. Si el usuario proporciona una dirección de correo electrónico, el script realizará una solicitud a un servidor remoto utilizando la función fetch(), enviando la dirección de correo electrónico como parte de la URL de la solicitud.
 

    Como vemos nos a pedido un correo, y teniendo levantado un servidor en Python(por ejemplo) nos lo va a mandar


Y vemos el correo proporcionado.



PoC 2

Otro caso de uso seria solicitando al usuario que se valide mediante usuario y contraseña para poder ver el articulo 


    Este script creara un formulario solicitando al usuario que ingrese su dirección de correo electrónico y su contraseña.

    Una vez que el usuario ingresa su dirección de correo electrónico y contraseña y hace clic en el botón "Submit", se llama a la función submitForm(). Esta función recupera los valores ingresados por el usuario para la dirección de correo electrónico y la contraseña y realiza una solicitud a un servidor remoto utilizando la función fetch(). La dirección de correo electrónico y la contraseña se incluyen como parámetros en la URL de la solicitud.


 
Y vemos como efectivamente nos a llegado el email junto al usuario 


PoC 3

En este otro caso lo haremos utilizando un keylogger


    Este script está configurado para registrar cada tecla presionada por el usuario y enviar esa información a un servidor en python.

    Cuando el usuario presiona una tecla, el evento onkeypress se activa, lo que desencadena la ejecución de la función asociada. Esta función captura la tecla presionada utilizando el objeto de evento e, y luego concatena esa tecla a la variable k. Posteriormente, se crea un nuevo objeto de imagen (<img>), y se establece su atributo src para que apunte a una URL específica en un servidor remoto, incluyendo la información de las teclas presionadas hasta el momento como parte de la URL.


Y vemos que nos devuelve todas las teclas pulsadas por el usuario.



Como vemos lar oportunidades de aprovechar un XSS son inmensas y puede desencadenar grandes desastres, os dejo mas información sobre otro articulo que escribí profundizando de forma teorica sobre los XSS y como podemos mitigar esta vulnerabilidad 

No hay comentarios:

Publicar un comentario