La vulnerabilidad XSS (Cross-Site Scripting) es una de las más comunes en aplicaciones web… y también una de las más peligrosamente subestimadas. Permite a un atacante inyectar código JavaScript malicioso en una página que otros usuarios visitan.
¿Resultado? Robo de cookies, suplantación de sesiones, defacement, ejecución de acciones en nombre de la víctima, y mucho más.
✅ ¿Cómo funciona realmente?
- La aplicación web recibe datos del usuario (input).
- No los valida ni los “escapa” correctamente.
- Ese input se muestra en la página web, y el navegador lo interpreta como código ejecutable.
- Ese código se ejecuta en el navegador de la víctima → secuestro de navegador.
💡 En resumen: el atacante no ataca directamente al servidor, ataca al usuario a través del servidor.
🎯 Tipos de XSS
1️⃣ Stored XSS (Persistente)
El payload malicioso se guarda en la base de datos y se ejecuta cada vez que otro usuario carga esa página.
📌 Ejemplo clásico:
- Dejas un comentario con <script>alert('Hacked')</script> en un foro.
- Cada visitante que vea el comentario ejecuta ese script.
⚠️ Es el más peligroso, porque afecta a muchos usuarios sin necesidad de interacción.
2️⃣ Reflected XSS (No persistente)
El script viaja dentro de una URL o parámetro, y se refleja temporalmente en la respuesta del servidor.
📌 Ejemplo:
Si la página muestra “Resultados para <script>...” sin sanitizar, se ejecuta el script.
3️⃣ DOM-Based XSS (XSS en el navegador)
Aquí el fallo no está en el servidor, sino en el JavaScript del lado del cliente.El DOM manipula datos inseguros (como location.hash, document.URL, etc.), y los inyecta en la página.
📌 Ejemplo:
document.getElementById("resultado").innerHTML = location.hash.substring(1);
Si accedes a:
🛠️ ¿Qué puede hacer un atacante con XSS?
✅ Robar cookies y sesiones de usuario.
✅ Suplantar la identidad del usuario (session hijacking).
✅ Modificar el contenido de la página (defacement).
✅ Redirigir a phishing/malware.
✅ Realizar acciones dentro de la cuenta de la víctima (CSRF interno con JavaScript).