Reverse Tab Nabbing

Support HackTricks

Descrizione

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.

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.

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?)

Panoramica

Link tra pagine padre e figlio quando l'attributo di prevenzione non è utilizzato:

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

Link tra pagine padre e figlio quando l'attributo di prevenzione è utilizzato:

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

Esempi

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.

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>
malicious.html
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
malicious_redir.html
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

Proprietà accessibili

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:

  • 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à.

  • 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.

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.

Prevenzione

Le informazioni sulla prevenzione sono documentate nel HTML5 Cheat Sheet.

Riferimenti

Support HackTricks

Last updated