hacktricks/pentesting-web/reverse-tab-nabbing.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

7.1 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Descripción

En una situación en la que un atacante puede controlar el argumento href de una etiqueta <a con el atributo target="_blank" rel="opener" que va a ser clicada por una víctima, el atacante apunta este enlace a una web bajo su control (un sitio web malicioso). Entonces, una vez que la víctima hace clic en el enlace y accede al sitio web del atacante, este sitio web malicioso podrá controlar la página original a través del objeto javascript window.opener.
Si la página no tiene rel="opener" pero contiene target="_blank" y tampoco tiene rel="noopener" también puede ser vulnerable.

Una forma habitual de abusar de este comportamiento sería cambiar la ubicación de la web original a través de window.opener.location = https://atacante.com/victima.html a una web controlada por el atacante que parezca la original, de modo que pueda imitar el formulario de inicio de sesión del sitio web original y pedir credenciales al usuario.

Sin embargo, tenga en cuenta que como el atacante ahora puede controlar el objeto de ventana de la página original, puede abusar de él de otras maneras para realizar ataques más sigilosos (tal vez modificando eventos de javascript para exfiltrar información a un servidor controlado por él?)

Visión general

Con enlace de retroceso

Enlace entre páginas padre e hijo cuando no se utiliza el atributo de prevención:

Sin enlace de retroceso

Enlace entre páginas padre e hijo cuando se utiliza el atributo de prevención:

Ejemplos

Crea las siguientes páginas en una carpeta y ejecuta un servidor web con python3 -m http.server
Luego, accede a http://127.0.0.1:8000/vulnerable.html, haz clic en el enlace y observa cómo cambia la URL del sitio web original.

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

<!DOCTYPE html>
<html>
 <body>
  <script>
  window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
  </script>
 </body>
</html>

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

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

Propiedades accesibles

El sitio malicioso solo puede acceder a las siguientes propiedades del objeto de referencia javascript opener (que en realidad es una instancia de la clase javascript window) en caso de acceso de origen cruzado (entre dominios):

  • opener.closed: Devuelve un valor booleano que indica si una ventana ha sido cerrada o no.
  • opener.frames: Devuelve todos los elementos iframe en la ventana actual.
  • opener.length: Devuelve el número de elementos iframe en la ventana actual.
  • opener.opener: Devuelve una referencia a la ventana que creó la ventana.
  • opener.parent: Devuelve la ventana principal de la ventana actual.
  • opener.self: Devuelve la ventana actual.
  • opener.top: Devuelve la ventana del navegador más superior.

Si los dominios son los mismos, entonces el sitio malicioso puede acceder a todas las propiedades expuestas por el objeto de referencia window javascript.

Prevención

La información de prevención está documentada en la Hoja de trucos de seguridad HTML5.

Referencias

{% embed url="https://owasp.org/www-community/attacks/Reverse_Tabnabbing" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥