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

7.2 KiB

{% 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
{% endhint %}

Description

Dans une situation où un attaquant peut contrôler l'argument href d'une balise <a avec l'attribut target="_blank" rel="opener" qui va être cliquée par une victime, l'attaquant dirige ce lien vers un site web sous son contrôle (un site malveillant). Ensuite, une fois que la victime clique sur le lien et accède au site de l'attaquant, ce site malveillant pourra contrôler la page originale via l'objet javascript window.opener.
Si la page n'a pas rel="opener" mais contient target="_blank" et n'a pas rel="noopener", elle peut également être vulnérable.

Une manière classique d'abuser de ce comportement serait de changer la localisation du web original via window.opener.location = https://attacker.com/victim.html vers un web contrôlé par l'attaquant qui ressemble à l'original, afin qu'il puisse imiter le formulaire de connexion du site web original et demander des identifiants à l'utilisateur.

Cependant, notez qu'étant donné que l'attaquant peut maintenant contrôler l'objet window du site web original, il peut en abuser de d'autres manières pour effectuer des attaques plus discrètes (peut-être en modifiant des événements javascript pour exfiltrer des informations vers un serveur qu'il contrôle ?)

Overview

Lien entre les pages parent et enfant lorsque l'attribut de prévention n'est pas utilisé :

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

Lien entre les pages parent et enfant lorsque l'attribut de prévention est utilisé :

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

Examples

Créez les pages suivantes dans un dossier et exécutez un serveur web avec python3 -m http.server
Ensuite, accédez à http://127.0.0.1:8000/vulnerable.html, cliquez sur le lien et notez comment l'URL du site original change.

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

<html lang="en"> <head> </head> Click me! </html> {% endcode %} ```markup <html> </html> ``` {% endcode %}

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

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

{% endcode %}

Propriétés accessibles

Dans le scénario où un accès cross-origin se produit (accès entre différents domaines), les propriétés de l'instance de la classe JavaScript window, référencées par l'objet JavaScript opener, auxquelles un site malveillant peut accéder sont limitées aux suivantes :

  • opener.closed : Cette propriété est utilisée pour déterminer si une fenêtre a été fermée, renvoyant une valeur booléenne.
  • opener.frames : Cette propriété fournit l'accès à tous les éléments iframe dans la fenêtre actuelle.
  • opener.length : Le nombre d'éléments iframe présents dans la fenêtre actuelle est renvoyé par cette propriété.
  • opener.opener : Une référence à la fenêtre qui a ouvert la fenêtre actuelle peut être obtenue par cette propriété.
  • opener.parent : Cette propriété renvoie la fenêtre parente de la fenêtre actuelle.
  • opener.self : L'accès à la fenêtre actuelle elle-même est fourni par cette propriété.
  • opener.top : Cette propriété renvoie la fenêtre de navigateur la plus haute.

Cependant, dans les cas où les domaines sont identiques, le site malveillant a accès à toutes les propriétés exposées par la référence d'objet JavaScript window.

Prévention

Les informations de prévention sont documentées dans le HTML5 Cheat Sheet.

Références

{% 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
{% endhint %}