Reverse Tab Nabbing
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
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?)
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:
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.
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.
As informações de prevenção estão documentadas no HTML5 Cheat Sheet.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)