Clickjacking: qué es y cómo protegerse
Autor: Redacción Domeny.ForSale Publicado
En pocas palabras: El clickjacking, también llamado UI redress attack, consiste en inducir al usuario a hacer clic en un elemento distinto del que ve. Por ejemplo, el atacante puede colocar una página invisible con un botón encima de un botón aparentemente inofensivo de un juego. El propietario del sitio reduce estos ataques principalmente controlando quién puede insertar sus páginas en otros sitios; el usuario, por su parte, debe actuar con cautela ante las interacciones sospechosas.
Cómo funciona el secuestro de clics
El navegador puede mostrar una página dentro de otra mediante el elemento iframe, es decir, un marco incrustado. Es una función habitual que se utiliza, por ejemplo, para mostrar vídeos o mapas. En un ataque de clickjacking, el delincuente la aprovecha para ocultar el verdadero destino del clic debajo o encima de una interfaz preparada para engañar.
Un escenario típico es el siguiente: el usuario abre una página controlada por el atacante y esta carga otro sitio web dentro de un marco. El marco es transparente o está recortado y colocado de modo que su botón coincida exactamente con el lugar donde el usuario espera hacer clic. El usuario ve una acción, pero el navegador registra la interacción con otro elemento.
Para ello, el atacante no necesita leer el contenido de la página ajena. Las restricciones del navegador al acceso entre sitios distintos no impiden por sí solas insertar páginas en marcos y dirigir los clics hacia ellas. Por eso, impedir la lectura de datos y evitar que una interfaz se inserte en otro sitio son dos tareas diferentes.
Ejemplo: un premio que activa otra acción
Imagina una página con un juego sencillo y un botón «Recoge tu premio». Encima de ese botón hay un marco invisible con el panel de otro servicio. Si ese servicio permite que sus páginas se inserten en marcos y la sesión del usuario funciona dentro de ese marco, el clic puede alcanzar un botón que ejecute una operación en su cuenta.
Esto no significa que cada visita a una página maliciosa permita tomar el control de la cuenta de inmediato. El éxito del ataque depende, entre otras cosas, de las medidas de seguridad del sitio objetivo, de que la sesión iniciada esté disponible dentro del marco y de si la operación exige una confirmación adicional. La configuración de las cookies y las restricciones del navegador pueden dificultar este escenario, pero no sustituyen a la protección contra la inserción en marcos.
Entre las posibles consecuencias están cambiar ajustes sin querer, ejecutar una acción en el servicio o aprobar una operación. Una confirmación adicional que exija una actuación consciente del usuario reduce el riesgo, pero añadir otro botón no garantiza la protección: el ataque puede intentar guiar a la víctima a través de varios clics.
En qué se diferencia el clickjacking del phishing y de CSRF
En el phishing, el estafador suele hacerse pasar por una entidad de confianza para obtener datos mediante engaño o inducir a realizar una acción concreta. En el clickjacking, en cambio, el usuario puede hacer clic en un elemento del servicio auténtico, pero oculto en un entorno engañoso. Ambas técnicas pueden combinarse, aunque el mecanismo del engaño es distinto.
CSRF, que consiste en forzar una solicitud no deseada a un servicio, aprovecha los permisos del usuario que ha iniciado sesión sin su consentimiento consciente. El clickjacking se centra en secuestrar la interacción con la interfaz. Un token de protección contra CSRF no basta para protegerse del clickjacking, porque el clic puede activar un formulario legítimo con su token válido.
HTTPS tampoco resuelve este problema. Cifra la conexión con el sitio, pero no garantiza que su interfaz sea honesta ni que su propietario tenga buenas intenciones.
Cómo proteger tu sitio web
La protección principal es la cabecera de respuesta HTTP Content-Security-Policy con la directiva frame-ancestors. Una cabecera HTTP es información que el servidor envía al navegador junto con la página. Esta directiva determina qué orígenes pueden insertar esa página en marcos.
Si el sitio no debe poder insertarse en ningún caso, se puede utilizar:
Content-Security-Policy: frame-ancestors 'none'
Si la inserción solo debe permitirse dentro del mismo origen —la misma combinación de protocolo, host y puerto—, el valor adecuado es:
Content-Security-Policy: frame-ancestors 'self'
Un mecanismo más antiguo es X-Frame-Options con el valor DENY o SAMEORIGIN. Puede utilizarse como complemento compatible para clientes antiguos. La directiva frame-ancestors ofrece un control más flexible; por ejemplo, permite autorizar un origen concreto de un socio. Debe enviarse en una cabecera de respuesta: incluirla en una etiqueta meta no proporciona esta protección.
La implementación práctica consta de tres pasos:
- Determina qué páginas necesitan funcionar realmente dentro de marcos, por ejemplo, como parte de una integración con un socio.
- Configura la política adecuada en el servidor, en la aplicación o en el servicio intermediario y comprueba las cabeceras en las herramientas de desarrollo del navegador.
- Prueba tanto el bloqueo de las inserciones no deseadas como el funcionamiento de las integraciones legítimas.
No confíes únicamente en scripts de JavaScript que intenten sacar la página del marco. Estas soluciones tienen limitaciones y pueden eludirse. Para las operaciones sensibles, exige también una nueva autenticación o una confirmación que describa claramente la acción que se va a realizar.
Qué puede hacer el usuario
Evita las páginas que exigen una serie de clics sin un propósito claro, especialmente con el pretexto de recoger un premio, desbloquear un vídeo o realizar una supuesta verificación. Mantén actualizado el navegador, pero recuerda que una versión actualizada no sustituye a las medidas de seguridad del sitio que visitas.
Si sospechas que un clic ha activado una acción no deseada, accede al servicio correspondiente por tu cuenta en lugar de utilizar un enlace de la página sospechosa. Revisa el historial de actividad y los ajustes modificados, y comunica cualquier operación no autorizada al servicio de atención al usuario. El propietario del sitio debería empezar por comprobar la cabecera frame-ancestors en las páginas de la cuenta y del panel de administración.
Véase también: ¿Qué es Mass Assignment?
