DOM Based XSS   Version imprimable de cet article

Explication de la faille XSS de type 0


par Podalirius , Ruulian

Prérequis

Pour comprendre l’ensemble de cet article, il vous faudra :

  • Savoir coder en HTML
  • Connaître les bases du Javascript
  • Connaître la définition d’une XSS

Qu’est ce que le DOM ?

Le Document Object Model (DOM) est une interface de programmation normalisée par le W3C, qui permet à des scripts d’examiner et de modifier le contenu du navigateur web. On peut utiliser le DOM pour changer de couleur le texte au moment du clic d’un bouton, ou encore rendre visible ou invisible certaines parties de la page en fonction des actions utilisateur.

Le DOM est représenté par la variable document.

Définition

Une XSS basée sur le DOM a lieu lorsqu’une entrée utilisateur est directement placée dans le code Javascript d’une page. Cette injection se fait donc sans passer par des balises html.

Exploitation

Prenons pour exemple une page qui récupère l’entrée utilisateur et la multiplie par 10.

Voici le code la page :

<script>
var number = <entrée utilisateur>;
var result = number * 10;
console.log('The result is ' + result);
</script>

Ici la variable number stocke l’entrée utilisateur qui sera multipliée par 10 par la suite. Le problème de ce script c’est que si on entre autres choses qu’un nombre, par exemple bonjour, on aura l’erreur {{undefined}} dans la console. Ce qui signifie que notre entrée est interprétée comme du code Javascript.

On peut donc entrer une fonction qui sera appelée par la variable, par exemple alert(1) ou des payloads plus complexes. A partir de là on peut facilement faire une redirection et voler les cookies d’autres utilisateurs. :)

Petits conseils pour les XSS Basées sur le DOM

Regardez le rendu de votre entrée sur le code source.

Sur ce genre de faille, on a la possibilité de pouvoir visualiser nos actions et les répercussions qu’elles ont. Par exemple, vérifier que des guillemets ont bien été échappés.

Regardez les erreurs que vous affiche la console de votre navigateur.

Les erreurs permettent de comprendre bien des choses sur le code, et souvent dans ce genre de XSS les erreurs, c’est bon signe ! Ça signifie qu’on a réussi à faire exécuter des choses au site qui n’étaient pas prévues initialement. Regarder les erreurs est donc primordial.

Références

Documentations publiées dans cette rubrique Documentations publiées dans cette rubrique