DOM XSS

Dernière mise à jour : 24/11/2021

A première vue, cela ressemble énormément à du reflected XSS (XSS non persistent). Pourtant il y a une différence de taille : l’action se déroule uniquement au niveau du navigateur, alors que pour du XSS réfléchi ou stocké la vulnérabilité se situe directement au niveau du serveur web.

Un exemple pour bien comprendre

Imaginons qu’un site web affiche du code via JavaScript, ce qui est de plus en plus courant pour faire du responsive design. Le code s’exécute au niveau du navigateur : si l’attaquant ajouter du code dans le document DOM, cela peut faire des ravages.

Par exemple, si dans notre code on parcourt l’URL pour en déduire un nom d’utilisateur, un lieu géographique ou un nom de serveur, l’attaquant va alors chercher à forger un lien contenant du script malveillant qui pourrait être exécuté sans laisser aucune trace au niveau du serveur, en ajoutant un <script>window.location = ...</script> vers un faux site.

Contre-mesures

Il faut filtrer, notamment encoder (à la fois le HTML et le JavaScript).