6.4 KiB
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
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
Com link de retorno
Link entre páginas pai e filho quando o atributo de prevenção não é usado:
Sem link de retorno
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
Então, acesse http://127.0.0.1:8000/
vulnerable.html, clique no link e note 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, 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
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.