Seguridad web

Clickjacking

Se lee en aproximadamente 3 minutos

Qué es el clickjacking

El clickjacking es una técnica de ataque que utiliza iframes transparentes o invisibles para superponer una página web legítima en la pantalla del usuario, induciendo operaciones de clic no intencionadas. El conjunto de ataques que superponen otro contenido sobre la interfaz visible para engañar al usuario se denomina UI Redressing (suplantación de la interfaz), y el clickjacking es su caso representativo.

El atacante crea una página trampa y superpone el sitio objetivo como un iframe transparente. El usuario ve los botones y enlaces de la página trampa, pero lo que realmente está haciendo clic son los elementos del sitio objetivo dentro del iframe transparente. Esto permite ejecutar operaciones como pulsar "me gusta", cambiar configuraciones o aprobar transferencias sin que el usuario se dé cuenta.

Funcionamiento y métodos del ataque

El clickjacking se ejecuta siguiendo estos pasos.

  1. El atacante crea una página web trampa. Coloca contenido atractivo (botón de reproducción de video, juego, formulario de sorteo, etc.).
  2. Carga el sitio objetivo en un iframe y lo configura como opacity: 0 (completamente transparente) con CSS.
  3. Superpone el iframe transparente exactamente sobre los elementos clicables de la página trampa.
  4. Cuando el usuario hace clic en el botón de la página trampa, en realidad se hace clic en el botón del sitio objetivo dentro del iframe transparente.

Métodos avanzados

  • Abuso de arrastrar y soltar: Utilizar la operación de arrastre del usuario para introducir datos en formularios dentro del iframe transparente.
  • Suplantación de la visualización del cursor: Sustituir u ocultar la imagen del cursor con CSS para desplazar la posición aparente del puntero respecto a la posición real en la que se registra el clic, de modo que el usuario haga clic en un lugar no intencionado.
  • Ataque de múltiples pasos: Inducir múltiples clics, incluyendo hacer clic en el botón "Aceptar" de diálogos de confirmación.

Cuando se combina con XSS o CSRF, se pueden construir escenarios de ataque más complejos.

Implementación de medidas de defensa

El núcleo de la defensa contra clickjacking es prevenir que el propio sitio se incruste en iframes de otros sitios.

Directiva frame-ancestors de CSP

La directiva frame-ancestors de CSP controla los orígenes de las páginas padre que pueden incrustar el sitio en un iframe. Se introdujo en CSP Level 2 como sucesora de X-Frame-Options, y la especificación de CSP establece que, cuando se indican ambas, se aplica frame-ancestors y se ignora X-Frame-Options. Si va a configurar la defensa ahora, esta es la opción de referencia.

  • frame-ancestors 'none': No permite la incrustación en iframe desde ningún sitio.
  • frame-ancestors 'self': Solo permite la incrustación desde el mismo origen.
  • frame-ancestors https://trusted.example.com: Solo permite la incrustación desde un origen específico.

Encabezado X-Frame-Options

Los fabricantes de navegadores lo introdujeron como encabezado no estándar entre 2009 y 2010, y en 2013 quedó documentado como RFC 7034 (Informational). Los valores que se utilizan son estos dos.

  • X-Frame-Options: DENY: Rechaza toda incrustación en iframe.
  • X-Frame-Options: SAMEORIGIN: Solo permite la incrustación desde el mismo origen.

La especificación incluye un tercer valor, ALLOW-FROM <URI>, pero no se utiliza porque los principales navegadores no lo implementan. En los navegadores que no lo admiten, la indicación se ignora por completo y no queda ninguna protección.

Otra trampa es el alcance de la comprobación de SAMEORIGIN. Muchos navegadores solo comparan el origen del documento de nivel superior, de modo que una estructura anidada, en la que una página del propio sitio se carga en un iframe del propio sitio y el atacante envuelve todo el conjunto desde el nivel superior, elude la protección. frame-ancestors comprueba los marcos antecesores uno por uno, por lo que no presenta ese hueco.

Si se configuran los dos, los navegadores compatibles con frame-ancestors aplicarán esa directiva y los que no lo sean se regirán por X-Frame-Options. Indicar ambos no hace que se anulen entre sí.

Defensa con JavaScript (frame busting)

Un script como if (top !== self) { top.location = self.location; } que escapa al marco superior cuando se carga dentro de un iframe. Sin embargo, como el atacante puede restringir la ejecución de JavaScript con el atributo sandbox, solo debe usarse como complemento a las medidas con encabezados HTTP.

Lista de verificación práctica de medidas

Lista de verificación para implementar de forma segura las medidas contra clickjacking.

  • Verificación de configuración de encabezados de seguridad: Confirmar que todas las respuestas de página incluyen X-Frame-Options: DENY (o SAMEORIGIN) y CSP frame-ancestors.
  • Identificación de páginas que necesitan incrustación en iframe: Para páginas que necesitan permitir iframe por razones legítimas, como incrustación de formularios de pago, restringir estrictamente los orígenes permitidos.
  • Protección de operaciones importantes: Para operaciones importantes como cambio de contraseña, transferencias y eliminación de cuenta, requerir reautenticación (reingreso de contraseña) además del token CSRF.
  • Combinación con HSTS: Forzar HTTPS y prevenir la eliminación de encabezados de seguridad mediante ataques de intermediario.
  • Pruebas regulares: Probar regularmente si el sitio puede ser incrustado en iframe. Se puede verificar con las herramientas de desarrollo del navegador o escáneres de seguridad.

El clickjacking por sí solo puede no parecer causar un gran daño, pero combinado con ingeniería social, es una técnica de ataque poderosa que puede ejecutar operaciones importantes sin que el usuario se dé cuenta. Como se puede defender solo con la configuración de encabezados HTTP, es una medida de seguridad con una relación costo-efectividad muy alta.

Para obtener más información sobre este tema, consulte Encabezados de seguridad HTTP - 5 encabezados esenciales para proteger tu sitio web.

Conceptos erróneos comunes

El clickjacking es una técnica de ataque antigua que ya no es una amenaza
La única condición para que el ataque funcione es que el sitio pueda cargarse en el iframe de otro sitio, por lo que en las páginas que no configuran ni X-Frame-Options ni CSP frame-ancestors sigue funcionando en 2026. Los sitios con interfaces en las que un solo clic deja el resultado confirmado (botones de compartir de redes sociales, pantallas de autorización de OAuth, interruptores de configuración, etc.) necesitan revisar sus propios encabezados de respuesta, con independencia de cuándo se publicaran.
El frame busting con JavaScript es suficiente para defenderse
Los atacantes pueden restringir la ejecución de JavaScript con el atributo sandbox del iframe o impedir el escape del marco con el evento onbeforeunload. La defensa con encabezados HTTP (X-Frame-Options, CSP frame-ancestors) es obligatoria, y JavaScript es solo una medida complementaria.
Compartir

Términos relacionados

Artículos relacionados