Ataque de Clickjacking
El clickjacking (también conocido como UI redressing) es un ataque que engaña a los usuarios para que hagan clic en algo diferente a lo que perciben. Al superponer un iframe transparente de un sitio legítimo sobre una página maliciosa, el atacante captura clics destinados a elementos visibles pero realmente dirigidos a controles ocultos — permitiendo acciones no autorizadas como cambiar la configuración de la cuenta, dar 'Me gusta' a contenido, habilitar una cámara web o aprobar transacciones financieras.
Cómo Funciona Ataque de Clickjacking
El clickjacking explota la capacidad del navegador para superponer contenido mediante iframes y CSS. El atacante crea una página con un iframe invisible del sitio objetivo posicionado de manera que los clics de la víctima interactúen con los botones y enlaces del sitio oculto en lugar de los elementos visibles de la página.
Crear una página señuelo
El atacante construye una página web atractiva con una llamada a la acción visible — como un botón de 'Haz clic para reclamar tu premio', un juego o un botón de reproducción de video — diseñada para atraer a la víctima a hacer clic en un área específica.
Incrustar el sitio objetivo en un iframe oculto
El sitio legítimo objetivo (ej., configuración de cuenta bancaria, acciones en redes sociales) se carga en un iframe posicionado sobre la página señuelo con CSS opacity: 0 u opacity: 0.0001, haciéndolo completamente invisible.
Alinear la acción oculta con el cebo visible
Usando posicionamiento CSS (top, left, z-index), el atacante alinea precisamente un botón de acción crítica en el sitio oculto (ej., 'Confirmar transferencia', 'Eliminar cuenta') con el botón de cebo visible en la página señuelo.
La víctima hace clic en el elemento oculto
Cuando la víctima hace clic en el botón visible, en realidad hace clic en el botón de acción del iframe oculto. Como están autenticados en el sitio objetivo, la acción se ejecuta con sus credenciales. La víctima no ve nada inusual.
Ejemplos Reales
Ataques de 'Likejacking' en Facebook
Los atacantes usaron clickjacking para engañar a los usuarios de Facebook para que dieran 'Me gusta' a páginas sin su conocimiento. El ataque se propagó viralmente ya que cada 'Me gusta' aparecía en los feeds de los amigos de la víctima, dirigiendo tráfico a sitios de estafas. Afectó a millones de usuarios.
Secuestro de cámara web con Adobe Flash
Investigadores demostraron un ataque de clickjacking en el administrador de configuración de Adobe Flash que podía habilitar la cámara web y el micrófono de un usuario sin su conocimiento, engañándolos para que hicieran clic a través de diálogos de permisos de Flash ocultos.
Gusano en Twitter mediante clickjacking
Un gusano de clickjacking se propagó por Twitter engañando a los usuarios para que hicieran clic en un botón oculto de 'Tweet'. Cada víctima publicaba sin saberlo un enlace que propagaba el ataque aún más, creando una cadena auto-propagante.
Impacto y Evaluación de Riesgo
El clickjacking puede obligar a los usuarios a realizar cualquier acción que estén autorizados a hacer en el sitio objetivo: cambiar contraseñas, realizar compras, habilitar permisos del dispositivo, transferir fondos o eliminar cuentas. Combinado con ingeniería social, los ataques de clickjacking logran altas tasas de éxito porque los usuarios creen que están interactuando con el contenido visible (benigno). Las variantes de múltiples clics pueden guiar a los usuarios a través de flujos de trabajo completos de manera invisible.
Cómo Detectar Ataque de Clickjacking
Probar las aplicaciones web para verificar si pueden incrustarse en iframes — si su sitio puede cargarse en un iframe en un dominio de terceros, es vulnerable. Monitorear los encabezados X-Frame-Options o CSP frame-ancestors en las respuestas HTTP. Usar herramientas de escaneo automatizado para detectar la ausencia de protecciones contra framing. La detección de frame-busting del lado del cliente puede identificar si su página está siendo enmarcada.
Cómo Prevenir Ataque de Clickjacking
Configurar el encabezado X-Frame-Options a DENY o SAMEORIGIN en todas las páginas que realizan acciones sensibles. Implementar Content-Security-Policy con la directiva frame-ancestors para un control granular (ej., frame-ancestors 'self'). Usar el atributo SameSite en las cookies para prevenir que se envíen cuando la página está enmarcada cross-origin. Implementar confirmación de UI para acciones sensibles (ej., 're-ingrese su contraseña para confirmar'). Desplegar JavaScript de frame-busting como medida de defensa en profundidad, aunque los encabezados HTTP son la protección principal.
Ejemplos de Código
<!-- Attacker's page with invisible iframe overlay -->
<style>
iframe {
position: absolute;
top: 0; left: 0;
width: 500px;
height: 400px;
opacity: 0.0001; /* Invisible but clickable */
z-index: 10;
}
.bait-button {
position: absolute;
top: 185px; left: 120px; /* Aligned with target's action button */
padding: 20px 40px;
font-size: 24px;
cursor: pointer;
}
</style>
<button class="bait-button">Click to win a prize!</button>
<iframe src="https://target-bank.com/settings/delete-account"></iframe>
# Nginx — prevent framing
add_header X-Frame-Options "DENY" always;
add_header Content-Security-Policy "frame-ancestors 'none'" always;
# Apache — prevent framing
Header always set X-Frame-Options "DENY"
Header always set Content-Security-Policy "frame-ancestors 'none'"
# Express.js
app.use((req, res, next) => {
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('Content-Security-Policy', "frame-ancestors 'none'");
next();
});
PowerWAF bloquea automáticamente Ataque de Clickjacking antes de que llegue a tu servidor.
Implementa en minutos. Sin cambios de código. Plan gratuito disponible.
Los cupos del plan gratuito son limitados