
Cross-site Scripting (XSS) es una técnica de ataque que implica reflejar código proporcionado por el atacante en la instancia del navegador del usuario. Una instancia de navegador puede ser un cliente de navegador web estándar o un objeto de navegador incrustado en un producto de software, como el navegador dentro de WinAmp, un lector de RSS o un cliente de correo electrónico. El código en sí suele estar escrito en HTML/JavaScript, pero también puede extenderse a VBScript, ActiveX, Java, Flash o cualquier otra tecnología compatible con el navegador.
Cuando un atacante consigue que el navegador del usuario ejecute su código, este se ejecutará dentro del contexto de seguridad (o zona) del sitio web que lo aloja. Con este nivel de privilegio, el código tiene la capacidad de leer, modificar y transmitir cualquier dato sensible accesible por el navegador. Un usuario afectado por Cross-site Scripting podría tener su cuenta secuestrada (robo de cookies), su navegador redirigido a otra ubicación, o posiblemente se le mostraría contenido fraudulento entregado por el sitio web que está visitando. Los ataques de Cross-site Scripting comprometen esencialmente la relación de confianza entre un usuario y el sitio web. Las aplicaciones que utilizan instancias de objetos de navegador que cargan contenido desde el sistema de archivos pueden ejecutar código bajo la zona de la máquina local, lo que permite comprometer el sistema.
Hay tres tipos de ataques de Cross-site Scripting: no persistentes, persistentes y basados en DOM. Los ataques no persistentes y los basados en DOM requieren que el usuario visite un enlace especialmente manipulado y cargado con código malicioso, o que visite una página web maliciosa que contenga un formulario web, el cual, al enviarse al sitio vulnerable, montará el ataque. El uso de un formulario malicioso a menudo tiene lugar cuando el recurso vulnerable solo acepta peticiones HTTP POST. En tal caso, el formulario puede enviarse automáticamente, sin conocimiento de la víctima (por ejemplo, mediante JavaScript). Al hacer clic en el enlace malicioso o al enviar el formulario malicioso, el payload de XSS se reflejará de vuelta, será interpretado por el navegador del usuario y se ejecutará. Otra técnica para enviar peticiones casi arbitrarias (GET y POST) es mediante un cliente incrustado, como Adobe Flash. Los ataques persistentes ocurren cuando el código malicioso se envía a un sitio web donde se almacena durante un período de tiempo. Ejemplos de objetivos favoritos de los atacantes suelen incluir publicaciones en foros de mensajes, mensajes de webmail y software de chat web. El usuario desprevenido no necesita interactuar con ningún sitio o enlace adicional (por ejemplo, un sitio del atacante o un enlace malicioso enviado por correo electrónico), simplemente debe ver la página web que contiene el código.