Cross-Site Scripting (XSS)
Última actualización
Última actualización
Es una vulnerabilidad web crítica que permite a un atacante inyectar scripts maliciosos en páginas web vistas por otros usuarios. Estos scripts se ejecutan en el navegador del usuario, lo que puede conducir a una variedad de acciones maliciosas, como robo de cookies de sesión, redirección a sitios web maliciosos, robo de información confidencial, entre otros.
Dentro de los riesgos de seguridad que presentan las aplicaciones web, esta vulnerabilidad se encuentra en tercera posición, listada como dentro del informe de 2021, que facilitó el proyecto abierto de seguridad de aplicaciones web y categorizada como dentro del sistema de debilidades y vulnerabilidades de software .
Estos ataques tienen éxito si la aplicación web no emplea suficiente validación o codificación. El navegador del usuario no puede detectar que el script malicioso no es de confianza, por lo que le da acceso a cualquier cookie, tokens de sesión u otra información sensible específica del sitio, o deja que el script malicioso reescriba el contenido HTML.
Los ataques XSS suelen producirse cuando los datos entran en una aplicación web a través de una fuente no fiable (casi siempre una petición web) o se envía contenido dinámico a un usuario web sin validarlo en busca de contenido malicioso.
El contenido malicioso suele incluir JavaScript, pero a veces también HTML, Flash o cualquier otro código que el navegador pueda ejecutar. La variedad de ataques basados en XSS es casi ilimitada, pero suelen incluir la transmisión al atacante de datos privados como cookies u otra información de sesión, la redirección de la víctima a una página web controlada por el atacante o la realización de otras operaciones maliciosas en la máquina del usuario bajo la apariencia del sitio vulnerable.
Existen tres tipos principales de ataques XSS.
En este tipo de ataque, el script malicioso es enviado al servidor a través de una solicitud HTTP, generalmente a través de una URL o campo de un formulario.
El servidor web procesa la solicitud y refleja el script malicioso en el navegador del usuario como parte de la respuesta.
Por último el navegador del usuario ejecuta el script malicioso ejecutando una acción no deseada.
En este apartado veremos una breve demostración de como se realiza un ataque simple XSS Reflected.
Supongamos que un sitio web tiene una función de búsqueda que recibe el término de búsqueda proporcionado por el usuario en un parámetro de URL:
Un payload XSS Reflected básico sería el siguiente:
Suponiendo que la aplicación no realiza ningún otro procesamiento de los datos, un atacante podría inyectar el payload malicioso dando lugar a un XSS Reflected.
Dado esto, el payload proporcionado por el atacante se ejecutará en el navegador del usuario víctima, en el contexto de su sesión con la aplicación.
Para realizar el robo de una cookie de sesión de un usuario mediante un XSS tenemos el payload básico que sería la siguiente:
Para evitar ser vulnerables a XSS es posible implementar una serie de medidas de seguridad.
Validación y sanitización de entradas: Implementar validación estricta en todos los campos de entrada para evitar que los usuarios introduzcan scripts maliciosos.
Escapado de caracteres: Utilizar funciones de escapado de caracteres apropiadas al renderizar datos en la salida HTML. Esto asegura que cualquier contenido dinámico se trate como datos, no como código ejecutable.
Headers HTTP: Configurar correctamente los encabezados HTTP de seguridad, como Content Security Policy (CSP), para limitar qué recursos pueden ser cargados por la página y desde dónde pueden ser cargados.
Limitar cookies y scripts de terceros: Limitar el uso de cookies y scripts de terceros en las páginas web, ya que pueden introducir vectores de ataque XSS.