Descripción general

Cross-Site Scripting (XSS) es un tipo de ataque mediante el cual se inyectan scripts maliciosos en sitios web. Es una vulnerabilidad de seguridad mediante la cual un atacante inyecta código malicioso en el lado del cliente. Posteriormente este código es ejecutado y permite a un atacante realizar diferentes acciones como por ejemplo acceder a las cookies o tokens de sesión. Este ataque puede ocurrir en cualquier parte de la aplicación web que permita a un usuario la entrada de datos, y generando una salida que no está codificada o es validada.

¿Cuándo ocurren estos ataques?

  • Se introducen datos en una aplicación web a través de una fuente que no es de confianza, como por ejemplo una solicitud web.
  • Los datos se incluyen en contenido dinámico que es enviado a un usuario sin ser validados como contenido malicioso.
El contenido malicioso puede estar escrito en cualquier lenguaje que el navegador pueda ejecutar como JavaScript, HTML o Flash. Normalmente estos ataques tienen como intención la transmisión de datos privados, como tokens de sesión, cookies, etc, al atacante permitiendo a este realizar diferentes operaciones maliciosas en la máquina del usuario.

Ejemplo típico de XSS

Flujo XSS

Tipos de ataques XSS

  • Stored XSS Attacks:
El script inyectado es almacenado permanentemente en los servidores del destino, por ejemplo, en una base de datos, foro, comentarios, etc. Este se script se recupera cuando la victima solicita el archivo almacenado.
  • Blind Cross-site Scripting:
Consiste en un XSS persistente que ocurre cuando el payload del atacante se guarda en la victima y se refleja en la victima desde el backend de la aplicación. Por ejemplo: si un atacante envía un payload malicioso a través de un formulario, cuando el usuario habrá el formulario enviado por atacante a través del backend, el payload se ejecutará.
  • Reflected XSS Attacks:
El script se refleja en el servidor web en forma de resultado de búsqueda, error o cualquier respuesta que incluya parte o toda la entrada enviada al servidor como parte de la solicitud. Por ejemplo: Un atacante engaña a un usuario para que haga clic en un enlace malicioso, mandando así un formulario malicioso diseñado específicamente, el código inyectado viaja al sitio web vulnerable, que refleja el ataque en el navegador web del usuario. El navegador ejecuta el código porque proviene de un servidor "confiable".
  • DOM Based XSS:
Es un ataque XSS en el que el payload se ejecuta como resultado de modificar el entorno del DOM en el navegador de la víctima utilizado por el script en lado del cliente original, de modo que el código del lado del cliente se ejecute de una manera "inesperada". Es decir, la página en sí (es decir, la respuesta HTTP) no cambia, pero el código contenido en el lado del cliente en la página se ejecuta de manera diferente debido a las modificaciones maliciosas que se han producido en el entorno DOM.