Clickjacking
🌐 Vulnerabilidad: Clickjacking
🕵️♂️ ¿Qué es el Clickjacking?
Clickjacking, o secuestro de clics, es un ataque en el que un atacante engaña al usuario para que haga clic en un elemento de una página web (como un botón, enlace o formulario) sin que lo note, ejecutando acciones no deseadas. Esto se logra superponiendo contenido legítimo dentro de un iframe transparente o manipulando su presentación visual.
⚙️ ¿Cómo se produce?
El atacante crea un sitio malicioso:
Inserta la página web legítima de la víctima en un iframe.
Manipula el diseño:
Usa CSS para hacer transparente el iframe o lo posiciona sobre contenido engañoso.
Engaña al usuario:
El usuario cree que está interactuando con el contenido del atacante, pero en realidad está haciendo clic en elementos ocultos de la página legítima.
🛠️ Mecanismo de ataque
Código de ataque con iframe:
El usuario hace clic pensando que está interactuando con el mensaje del atacante:
El clic activa el botón "Transferir dinero" o similar en el sitio legítimo.
🎯 Impacto
Transferencias no autorizadas: El atacante podría iniciar pagos o transferencias sin el conocimiento del usuario.
Cambio de configuraciones críticas: Modificar la contraseña, el correo o configuraciones de seguridad.
Autorizar acciones sensibles: Como aprobar permisos o autenticaciones adicionales.
Pérdida de confianza: Los usuarios pueden perder confianza en el sitio legítimo al ser víctimas de este ataque.
📉 Puntaje CVSS v3
Vector de ataque: Red
Complejidad del ataque: Media
Impacto en confidencialidad: Medio
Impacto en integridad: Alto
Impacto en disponibilidad: Bajo
Puntaje CVSS v3: 6.0 - 8.0 (Medio - Alto) ⚠️
🧑💻 Ejemplo práctico
Escenario: Un sitio bancario legítimo permite transferencias con un clic en:
Ataque con Clickjacking: El atacante inserta este botón dentro de un iframe en un sitio malicioso con texto engañoso:
📌 Resultado: El usuario hace clic en el botón de transferencia sin saberlo.
🛡️ ¿Cómo prevenir el Clickjacking?
1️⃣ X-Frame-Options
Configura el encabezado HTTP X-Frame-Options
para evitar que tu sitio se cargue dentro de un iframe.
SAMEORIGIN: Solo permite cargar el sitio en iframes desde el mismo dominio.
DENY: Prohíbe completamente cargar el sitio en iframes.
Ejemplo en Apache:
Ejemplo en Nginx:
2️⃣ Content Security Policy (CSP)
Usa el encabezado Content-Security-Policy
con la directiva frame-ancestors
para restringir los dominios permitidos.
Ejemplo:
3️⃣ Frame Busting Scripts
Implementa un script para evitar que tu sitio se cargue en iframes:
⚠️ Nota: No es completamente efectivo en navegadores modernos.
4️⃣ Diseño de doble confirmación
Para acciones críticas, implementa un paso adicional de confirmación, como un diálogo emergente.
5️⃣ Auditorías y pruebas de seguridad
Verifica regularmente tu sitio web contra vulnerabilidades de Clickjacking utilizando herramientas como OWASP ZAP.
💡 Dato extra: Las protecciones como X-Frame-Options y CSP no solo previenen Clickjacking, sino que también ayudan a mitigar otros ataques relacionados con iframes, como el UI Redressing.
🚨 Nota importante: Algunas aplicaciones modernas requieren el uso legítimo de iframes (como widgets de terceros). En estos casos, usa configuraciones específicas con frame-ancestors
.
Última actualización
¿Te fue útil?