Clickjacking Avanzado
Ausencia de los headers X-Frame-Options y CSP frame-ancestors, combinada con sin lógica de frame-busting en el cliente, dejando la app completamente embebible en iframes maliciosos.
Cómo Funciona
El clickjacking superpone tu app invisible sobre la interfaz falsa del atacante. Las versiones avanzadas encadenan múltiples clics (clickjacking multi-paso) para completar operaciones de múltiples pasos como habilitar apps OAuth, eliminar datos o enviar dinero. Sin CSP frame-ancestors y X-Frame-Options, el navegador no tiene forma de rechazar el embebido.
// MAL: sin ninguna protección contra framing
// next.config.ts sin headers definidos
// Sin X-Frame-Options, sin CSP frame-ancestors
// El cliente tampoco tiene detección de frames// BIEN: headers + defensa en profundidad del lado del cliente
// next.config.ts
const headers = [
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'Content-Security-Policy', value: "frame-ancestors 'none'" }
];
// JS defensivo opcional (cinturón y tirantes)
if (window.top !== window.self) window.top!.location = window.location.href;Ejemplo Real
Twitter tuvo una vulnerabilidad de clickjacking (2009) que permitía a los atacantes hacer que los usuarios siguieran cuentas o publicaran tweets sin saberlo. La página de ataque mostraba un juego con botones invisibles de Twitter debajo de los elementos clicables del juego.
Cómo Prevenirlo
- Configura los headers X-Frame-Options: DENY y CSP frame-ancestors 'none'
- Agrega frame-busting JavaScript como defensa secundaria solo (los headers son la protección real)
- Presta especial atención a las páginas de configuración, pago y concesión de permisos
- Prueba intentando embeber tu sitio en un iframe — debería rechazarlo
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
XSS Basado en DOM
highScripts maliciosos ejecutados al leer datos controlados por el atacante de la URL o APIs del navegador y escribirlos en el DOM usando sinks peligrosos como innerHTML o document.write.
XSS Almacenado
highContenido provisto por el usuario guardado en la base de datos sin sanitizar y renderizado en el navegador como HTML, permitiendo inyección de scripts persistente que se ejecuta para cada usuario que ve el contenido.
PostMessage Sin Verificar Origen
mediumHandlers de window.addEventListener('message') que procesan mensajes sin verificar event.origin, permitiendo que cualquier sitio web envíe comandos al handler de mensajes de tu app.
Iframe Sin Atributo Sandbox
mediumContenido de terceros o generado por el usuario cargado en un iframe sin el atributo sandbox, permitiendo que ese contenido ejecute scripts, acceda a cookies del padre y navegue el frame de nivel superior.