Les risques XSS
Les risques de type XSS regroupent les vulnérabilités de type injection dans HTML, CSS et Javascript. Ces risques font partie de la catégorie A03:2021-Injection, mais contrairement aux autres injections ils visent surtout la partie frontend de l’application. Dans l’édition 2017 du Top 10, les vulnérabilités XSS étaient une catégorie à part, placée en 7e position. Il est important de mentionner qu’une injection XSS ne compromet pas l’application (ou le site). C’est une attaque qui vise surtout les utilisateurs de l’application/site. Elle est donc complémenté par des techniques d’ingénierie sociale. En cas de réussite l’attaquant peut usurper l’identité d’un utilisateur.
Techniquement, XSS vise le navigateur de l’utilisateur qui consulte le site de l’application et qui interprète naturellement le code html, css et Javascript présent sur la page. S’il est possible d’injecter dans la page des données provenant d’une source malveillante, alors le navigateur ne pourra pas les distinguer des informations normales et va les interpréter, ce que donne à l’attaquant son contrôle potentiel. Il devient alors possible de faire des requêtes en tant que l’utilisateur correspondant (par exemple pour effectuer un transfert de fonds) ou de voler l’identifiant de la session qui pourrait ensuite être utilisé par l’attaquant. Comme autres exploitations possibles on peut citer la modification du DOM (afin d’usurper l’identité d’un site), la récupération des données du clavier (par exemple des mots de passe) et le minage des crypto-monnaies (qui utilisent le temps du processeur et ralentissent l’ordinateur cible).
Dans l’exemple ci-dessous on voit une page des commentaires sur un site. Lorsqu’on écrit du texte ordinaire, il s’affichera tel quel dans la partie prévue. Par contre, en utilisant la balise script il est possible de faire exécuter le navigateur du code Javascript.

Il existe 3 types principaux d’attaques XSS :
- Stored XSS
- Les données compromises sont stockées dans la BD et sont injectées à chaque affichage d’une page. Cela correspond à l’image ci-dessus.
- Reflected XSS
- Le site affiche les données fournis par l’utilisateur lors d’une requête GET ou POST. Alors, il est possible de fabriquer des liens qui contiendront des scripts malicieux. L’attaquant essayera de piéger l’utilisateur en lui envoyant un email ou en publiant le lien sur un autre site.Exemple :
<?php
echo « Search results for: « . $_GET[« q »]);
Attaque avec (l’attaquant doit amener l’utilisateur à cliquer sur ce lien) :
http://testsite/page?q=<script>alert("TEST");</script> - DOM-based XSS
- Les données sont injectés en JavaScript qui est utilisé du coté client pour la construction de la page.
Exemple
<script>
var x = ‘<%= valeur %>‘;
var d = document.createElement(‘div’);
d.innerHTML = x;
document.body.appendChild(d);
</script>