Saltearse al contenido

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).

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.

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.

# ¿La respuesta trae estas cabeceras? Si NO, es candidata:
X-Frame-Options: DENY | SAMEORIGIN
Content-Security-Policy: frame-ancestors 'none' | 'self' | <orígenes>
<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).

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.

Burp Clickbandit genera PoCs automáticamente; el navegador para afinar el overlay.

Páginas sensibles servidas sin frame-ancestors/X-Frame-Options; auditoría periódica de cabeceras.

  1. Content-Security-Policy: frame-ancestors 'none' (o los orígenes permitidos) — la defensa moderna y preferente.
  2. X-Frame-Options: DENY (o SAMEORIGIN) para navegadores antiguos.
  3. Cookies SameSite (dificulta que la acción enmarcada lleve la sesión) y confirmación/re-autenticación en acciones sensibles.

Añadir las cabeceras en todo el sitio (no solo en páginas concretas) y revisar acciones sin confirmación.

  • 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).

  • ¿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.