Aujourd'hui, nous allons jeter un coup d'œil à l'origine de l'une des vulnérabilités les plus courantes et exploitées sur Internet : le XSS, également connu sous le nom de cross-site scripting. Si vous n'êtes pas familier avec la sécurité web, ne vous inquiétez pas, je vais tout vous expliquer ! Commençons !
Mais avant d'expliquer ce qu'est un XSS
, nous devons comprendre comment fonctionne une page web pour acquérir les bases.
Une page web est une collection de fichiers, tels que HTML, CSS et JavaScript, qui sont téléchargés dans un navigateur
web et affichés en tant que pages web. Voici comment cela fonctionne :
navigateur
web (par exemple, Google Chrome, Mozilla Firefox, Safari) envoie une requête (HTTP request) à un serveur web pour récupérer une page web.navigateur
reçoit la réponse du serveur sous forme de code HTML, CSS et JavaScript.navigateur
analyse ensuite le code HTML et construit une représentation visuelle de la page web. Il interprète les balises HTML pour déterminer la structure de la page, les styles CSS pour déterminer la présentation visuelle, et exécute le code JavaScript pour ajouter des fonctionnalités dynamiques à la page.navigateur
doit trouver les balises <script> </script>
, pour un paragraphe sur une page web, il a besoin de la balise <p>
. Sans cela, votre page web ne s'affichera ni ne fonctionnera normalement.navigateur
affiche la page web à l'utilisateur. L'utilisateur peut interagir avec la page en cliquant sur des liens, en remplissant des formulaires, en utilisant des boutons et des menus, etc.navigateur
envoie de nouvelles requêtes HTTP, et le cycle recommence.![]() |
---|
Schema expliquant le fonctionnement du web |
Dans cette introduction, j'ai parlé de JavaScript, un langage web permettant d'ajouter des fonctionnalités dynamiques à une page. C'est ici que notre attaque XSS intervient. Pour en donner une définition générale :
Cross-Site Scripting est une attaque qui permet à un attaquant d'injecter du code malveillant dans une page web (généralement en JavaScript).
Le code malveillant est ensuite exécuté par le navigateur des utilisateurs qui visitent la page. Cela peut permettre à l'attaquant de voler des informations confidentielles
telles que des mots de passe, des cookies de session ou même des données bancaires. Plus d'informations sur les impacts plus tard.
![]() |
---|
Fonctionnement d'une XSS basique |
La XSS fonctionne sur le principe de l'injection : un attaquant fournit une entrée non fiable à un programme, qui l'exécute ensuite, induisant une action malveillante. Les injections sont un vecteur d'attaque courant en cybersécurité, toujours dans le top 3 du top 10 de l'OWASP (un document de sensibilisation standard pour les développeurs et la sécurité des applications Web).
Il existe 3 types de XSS :
Nous allons passer en revue chaque type, c'est parti !
Imaginez que vous soyez derrière votre écran, en train d'utiliser un site web qui vous permet de poster des commentaires sur des articles.
Si le site n'a pas une protection suffisante contre les attaques XSS stockées, un attaquant peut poster un commentaire contenant un script malveillant qui sera stocké sur le serveur (dans la base de données des commentaires, par exemple).
Lorsque d'autres utilisateurs accèdent à la page de l'article et lisent les commentaires, leur navigateur exécute automatiquement le script malveillant sans qu'ils s'en rendent compte.
![]() |
---|
Fonctionnement d'une XSS stockée |
La XSS stockée est explicite en ce que le script malveillant est stocké sur le serveur.
Cela se produit lorsque qu'un attaquant parvient à insérer un code malveillant (généralement sous forme d'un script JavaScript) dans une page Web stockée sur le serveur, qui est ensuite exécuté sur les navigateurs des utilisateurs accédant à la page.
Imaginons à nouveau que vous utilisiez un site web qui vous permet de chercher des produits en entrant des termes de recherche dans une barre de recherche.
Si le site n'a pas une protection suffisante contre les attaques XSS réfléchies, un attaquant peut insérer un code malveillant dans le terme de recherche qui sera renvoyé dans la réponse de la page de résultats.
Lorsque vous ouvrez la page de résultats, votre navigateur exécute automatiquement le script malveillant sans que vous en ayez conscience.
![]() |
---|
Fonctionnement d'une XSS réfléchie |
Il s'agit de la vulnérabilité XSS la plus courante. Elle se produit lorsque qu'un attaquant insère un code malveillant (JS) dans une requête HTTP, qui est ensuite renvoyée dans la réponse de la page web.
Si vous avez bien compris, vous pensez probablement que cette XSS nécessite une interaction de l'utilisateur pour fonctionner, car elle n'est pas stockée. Et vous avez raison. C'est pourquoi les attaquants utilisent souvent le phishing avec des liens malveillants contenant une XSS réfléchie pour faire exécuter la charge utile par la victime.
Petite mise en garde, c'est la XSS la plus compliquée à comprendre. Mais avant de parler de la XSS elle-même, un point sur ce qu'est le DOM est nécessaire.
Le Modèle d'Objet de Document (DOM) est une représentation en mémoire d'une page web qui permet aux développeurs web de manipuler la structure, le style et le contenu de la page en utilisant JavaScript.
Pour simplifier, le DOM est une hiérarchie d'objets qui représentent les éléments HTML (par exemple, les balises <p>, <div>, <img>
, etc.) et peuvent être manipulés à l'aide de méthodes et de propriétés JavaScript.
![]() |
---|
Arbre DOM |
Normalement, avec cette phrase, vous devriez commencer à comprendre d'où provient la vulnérabilité.
En effet, qui dit modification dynamique du DOM avec JavaScript dit possibilité d'exploiter ces modifications dynamiques.
La XSS basée sur le DOM se produira lorsque qu'un attaquant parvient à injecter un code malveillant dans la page Web en exploitant les vulnérabilités du code Javascript du site.
Lorsque l'utilisateur ouvre la page web, le code malveillant est exécuté directement sur le navigateur de l'utilisateur.
Par exemple, si une page HTML contient ce morceau de code vulnérable :
<script>
document.write(“Le site est:” + document.location.href + “.”);
</script>
Un attaquant peut ajouter le code JavaScript à l'URL pointant vers cette page vulnérable.
#<script>alert(document.cookie)</script>
Une fenêtre pop-up est alors affichée sur le navigateur de la victime qui aura imprudemment cliqué sur ce lien URL.
Contrairement aux XSS stockées et réfléchies, la XSS basée sur le DOM ne nécessite pas d'interaction avec le serveur pour fonctionner, ce qui le rend particulièrement difficile à détecter et à prévenir.
![]() |
---|
Fonctionnement d'une DOM BASED XSS |
À quoi peut servir les XSS ?
L'impact réel d'une XSS dépend de la nature de l'application, de ses fonctionnalités et de ses données, ainsi que du statut de l'utilisateur compromis.
<
devient : <>
devient : ><
devient : \u003c>
devient : \u003ePour déployer CSP, vous devez inclure un en-tête de réponse HTTP appelé "Content-Security-Policy" avec une valeur contenant votre politique.
default-src 'self'; script-src 'self'; object-src 'none'; frame-src 'none'; base-uri 'none';
![]() |
---|
Fonctionnement des CSP |
5_Faille-XSS-ou-le-Cross-Site-Scripting | Icesi
vulnerabilite-xss-injection | Certilience
what-is-a-cross-site-scripting-attack | Kapersky
cross-site-scripting | Portswigger
XSS | TheHackerRecipes
TraceTheCode