Realizando Bypass no cabeçalho X-Frame-Options

Rafael Cintra Lopes

Analista de Segurança – Resh Strike Team

O cabeçalho X-Frame-Options é uma medida de segurança que impede a incorporação do site em um <iframe> em sites de terceiros. Habilitando o X-Frame-Options nos cabeçalhos de resposta HTTP, impede que usuários mal-intencionados explorem uma vulnerabilidade chamada de clickjacking.

Clickjacking é um ataque que engana o usuário, fazendo-o clicar em um elemento de uma página invisível ou disfarçado como outro elemento. Isso pode fazer com que os usuários baixem inadvertidamente malware, visitem páginas maliciosas, forneçam credenciais ou informações confidenciais, transfiram dinheiro ou comprem produtos online.

Normalmente, o clickjacking é executado exibindo uma página invisível ou elemento HTML, dentro de um iframe. O usuário acredita que está clicando na página visível, mas na verdade está clicando em um elemento invisível na página adicional transposta para cima dela.

A página invisível pode ser uma página maliciosa ou uma página legítima que o usuário não pretendia visitar – por exemplo, uma página no site do banco do usuário que autoriza a transferência de dinheiro.

Um site protegido de clickjacking contém o cabeçalho de resposta HTTP X-Frame-Options atribuído como deny ou sameorigin, impossibilitando que outros sites renderizem em um iframe. No exemplo abaixo utilizei o site da Redbull.

Existe uma forma de burlar esta proteção caso o CORS (Cross-origin resource sharing) não esteja bem configurado. Para isso acontecer, precisamos adicionar alguns scripts Javascript em nossa página que contém o iframe. Este script pode ser encontrado neste GitHub.

Adicionamos os scripts e o atributo is=”x-frame-bypass” na tag iframe.

<script type=”module” src=”https://unpkg.com/x-frame-bypass“></script>
<script src=”https://unpkg.com/@ungap/custom-elements-builtin“></script>

Agora, basta recarregar nossa página, e o iframe estará funcionando, como na imagem abaixo.

É necessário manter o CORS (Cross-origin resource sharing) da aplicação bem configurado para evitar que ocorra este bypass e possibilite a exploração da vulnerabilidade clickjacking.

Referências
X-Frame-Options – https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Headers/X-Frame-Options
X-Frame-Bypass – https://github.com/niutech/x-frame-bypass
Clickjacking – https://owasp.org/www-community/attacks/Clickjacking
CORS (Cross-origin resource sharing) – https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS