Reverse Tab Nabbing
Description
Dans une situation où un attaquant peut contrôler l'argument href
d'une balise <a
avec l'attribut target="_blank" rel="opener"
qui va être cliqué par une victime, l'attaquant peut rediriger 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 web de l'attaquant, ce site web malveillant pourra contrôler la page originale via l'objet javascript window.opener
.
Si la page n'a pas de rel="opener"
mais contient target="_blank"
et n'a pas rel="noopener"
, elle peut également être vulnérable.
Une façon courante d'exploiter ce comportement serait de changer l'emplacement du site web d'origine via window.opener.location = https://attacker.com/victim.html
vers un site web contrôlé par l'attaquant qui ressemble à l'original, afin de imiter le formulaire de connexion du site web original et de demander les identifiants à l'utilisateur.
Cependant, notez que comme l'attaquant peut maintenant contrôler l'objet fenêtre du site web d'origine, il peut l'exploiter de différentes manières pour effectuer des attaques plus discrètes (peut-être en modifiant les événements javascript pour exfiltrer des informations vers un serveur contrôlé par lui ?)
Aperçu
Avec lien de retour
Lien entre les pages parent et enfant lorsque l'attribut de prévention n'est pas utilisé :
Sans lien de retour
Lien entre les pages parent et enfant lorsque l'attribut de prévention est utilisé :
Exemples
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.
Propriétés accessibles
Dans le scénario où un accès cross-origin se produit (accès entre différents domaines), les propriétés de l'instance de la classe JavaScript window, référencée par l'objet JavaScript opener, qui peuvent être accessibles par un site malveillant sont limitées aux suivantes :
opener.closed
: Cette propriété est consultée pour déterminer si une fenêtre a été fermée, renvoyant une valeur booléenne.opener.frames
: Cette propriété permet d'accéder à 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 via cette propriété.opener.parent
: Cette propriété renvoie la fenêtre parent 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 du navigateur la plus en haut.
Cependant, dans les cas où les domaines sont identiques, le site malveillant obtient accès à toutes les propriétés exposées par la référence de l'objet JavaScript window.
Prévention
Les informations de prévention sont documentées dans la Feuille de triche HTML5.
Références
Last updated