Clickjacking
El atacante carga la web víctima en un iframe invisible sobre su propia página y engaña al usuario para que haga clic donde no cree (UI redressing). Ese clic ejecuta una acción con la sesión de la víctima: cambiar un ajuste, aceptar un permiso, confirmar un pago, dar un “me gusta” (likejacking) o incluso escribir (cursorjacking).
Modelo de amenaza
Sección titulada «Modelo de amenaza»Ejecutar acciones de un clic o arrastre en nombre de la víctima; encadenado con flujos sin confirmación, puede llevar a cambios de cuenta, concesión de permisos (OAuth) o pagos.
Anatomía
Sección titulada «Anatomía»Funciona si la página víctima permite ser enmarcada (no envía X-Frame-Options ni
CSP frame-ancestors). El atacante superpone su UI (un botón/juego señuelo) sobre el
botón real de la víctima, que queda invisible (opacidad 0) pero clicable, alineado
con el cursor.
Red Team
Sección titulada «Red Team»Comprobar si es enmarcable
Sección titulada «Comprobar si es enmarcable»# ¿La respuesta trae estas cabeceras? Si NO, es candidata:X-Frame-Options: DENY | SAMEORIGINContent-Security-Policy: frame-ancestors 'none' | 'self' | <orígenes>Montar el PoC
Sección titulada «Montar el PoC»<style> iframe{opacity:0.0;position:absolute;top:0;left:0;width:1000px;height:800px;z-index:2} #lure{position:absolute;top:/*alinear con el botón real*/;left:/*...*/;z-index:1}</style><div id="lure">Haz clic para ganar</div><iframe src="https://victima.tld/settings/delete-account"></iframe>Ajusta la posición del cebo para que caiga justo sobre el botón real. Para acciones que requieren varios pasos, usa multi-clic o drag-and-drop (arrastrar un dato a un campo del iframe).
Bypass de “frame busting” débil
Sección titulada «Bypass de “frame busting” débil»Los scripts antiguos de frame busting (if(top!=self) top.location=self.location) se
eluden con sandbox="allow-forms allow-scripts" (sin allow-top-navigation), con el
atributo csp del iframe, o con doble framing. La defensa fiable son las cabeceras,
no el JS.
Herramientas
Sección titulada «Herramientas»Burp Clickbandit genera PoCs automáticamente; el navegador para afinar el overlay.
Blue Team
Sección titulada «Blue Team»Detección
Sección titulada «Detección»Páginas sensibles servidas sin frame-ancestors/X-Frame-Options; auditoría
periódica de cabeceras.
Hardening
Sección titulada «Hardening»Content-Security-Policy: frame-ancestors 'none'(o los orígenes permitidos) — la defensa moderna y preferente.X-Frame-Options: DENY(oSAMEORIGIN) para navegadores antiguos.- Cookies
SameSite(dificulta que la acción enmarcada lleve la sesión) y confirmación/re-autenticación en acciones sensibles.
Respuesta
Sección titulada «Respuesta»Añadir las cabeceras en todo el sitio (no solo en páginas concretas) y revisar acciones sin confirmación.
CVEs y casos reales
Sección titulada «CVEs y casos reales»- Likejacking en redes sociales (clics en “me gusta” robados mediante iframes invisibles) fue masivo hacia 2010-2011.
- Numerosos paneles y apps han sido vulnerables por no enviar
frame-ancestors/X-Frame-Options; sigue apareciendo en bug bounty, con impacto según la acción enmarcable.
CVEs/incidentes en NVD (https://nvd.nist.gov/vuln/search) y GitHub Advisories (https://github.com/advisories).
Checklist de prueba
Sección titulada «Checklist de prueba»- ¿La página se puede enmarcar? (sin
frame-ancestors/X-Frame-Options). - PoC de clickjacking sobre una acción con efecto real.
- Probado frame busting (si lo hay) y su bypass.
- Evaluado drag-and-drop / multi-paso si un clic no basta.