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. Assim, habilitando o X-Frame-Options nos cabeçalhos de resposta HTTP, impede que usuários mal-intencionados explorem uma vulnerabilidade chamada de clickjacking.
Então, o 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, os atacantes executam o clickjacking 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. Como por exemplo o site da Redbull ilustrado abaixo.
Existe uma forma de burlar esta proteção caso o CORS (Cross-origin resource sharing) não esteja bem configurado. Para que isso ocorra, 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 que os desenvolvedores mantenham o CORS (Cross-origin Resource Sharing) da aplicação bem configurado, evitando assim que atacantes explorem a vulnerabilidade do 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
Rafael Cintra Lopes
Analista de Segurança – Resh Strike Team