XSS stocké
Planté une fois, il fonctionne ensuite pour chaque visiteur.
Qu'est-ce que XSS stocké?
Les scripts intersites stockés ne doivent être implantés qu’une seule fois. Chaque utilisateur qui charge ensuite la page exécute le script de l'attaquant sur sa propre session, sans lien sur lequel cliquer et sans rien remarquer. Vous déposerez une balise d'image avec un gestionnaire onerror dans un livre d'or, puis chargerez la page vous-même et regarderez l'impression de votre cookie de session. Le correctif s'échappe à la limite de rendu, de sorte que la charge utile identique toujours présente dans la base de données s'affiche sous forme de texte. La valeur stockée n'a jamais besoin d'être nettoyée pour que le correctif soit conservé.
Ce que vous apprendrez dans XSS stocké
- Distinguer le XSS stocké du XSS réfléchi, la persistance durable de la charge utile sur le serveur est ce qui change le modèle de menace
- Expliquez pourquoi une balise <img src=x onerror=alert(...)> se déclenche même s'il n'y a pas de balise <script> dans la charge utile
- Identifiez l'échappement HTML à la limite du rendu comme défense principale correcte et expliquez pourquoi les listes de blocage de la couche d'entrée et les stratégies uniquement CSP ne sont pas à la hauteur.
- Lisez suffisamment bien une fonction de rendu Node.js pour repérer un bug de concat-into-HTML et reconnaître la ligne où l'échappement doit être inséré
- Comprenez que la valeur stockée peut rester exactement telle quelle une fois que le moteur de rendu s'échappe correctement, la base de données n'a pas besoin d'être nettoyée pour que le correctif fonctionne.
XSS stocké — Étapes de la formation
-
Trouver le forum communautaire
Aujourd'hui, Bob cible Signal Coast, dont le forum communautaire permet à n'importe quel membre de publier une courte note publique que tous les autres membres lisent. Il se connecte avec un compte jetable et ouvre le livre d'or du forum pour voir comment il gère ce que les gens écrivent.
-
Les notes sont rendues telles qu'elles sont écrites
Le livre d'or fait une promesse que la plupart des sites prennent soin de ne jamais faire : il restitue chaque note exactement telle qu'elle est écrite, HTML inclus. Un champ qui transforme tout ce que vous tapez en balisage dynamique est exactement ce que Bob espérait trouver.
-
Publier une note normale
Tout d'abord, Bob se comporte comme n'importe quel autre membre et publie une note ordinaire pour voir comment le livre d'or la gère. La note rejoint le mur exactement telle qu’elle est écrite : du texte brut, rien d’inhabituel. C'est la fonctionnalité qui fonctionne comme prévu.
-
Escalader vers un script
Le champ restitue le HTML, donc Bob lui fournit un script au lieu d'une phrase. Sa sonde est une balise d'image avec une source qui ne peut pas se charger et un gestionnaire onerror qui lit le cookie de session du spectateur. L'image échoue, le gestionnaire s'exécute et le navigateur apparaît comme la note le lui demande. Ici, il imprime la session, preuve qu'une note peut exécuter du code avec le login du spectateur attaché.
-
Il fonctionne avec la session
Voilà : la note s'est exécutée toute seule et a fait apparaître le cookie de session en direct du spectateur, sans aucun lien cliqué ni aucun fichier ouvert. Une impression inoffensive aujourd’hui ; une balise silencieuse vers le serveur de Bob demain. Bob a prouvé que le mur s'étend sur tout ce que contient une note. Maintenant, il construit la véritable arme.
-
Plantez la fausse connexion
Bob échange la sonde contre une note qui réécrit la page dans une boîte de connexion de session expirée, avec un gestionnaire qui signale tout ce qui est tapé sur son propre serveur. Pour chaque membre qui charge le mur, il semble que le forum leur ait simplement demandé de se reconnecter. Les informations d'identification vont directement à Bob.
-
Le piège est armé
La fausse connexion est désormais la note la plus récente sur le mur, et elle ressemble au forum demandant aux membres de se reconnecter. Son gestionnaire signale tout ce qui y est saisi directement sur le serveur de Bob. Il l'a planté une fois ; chaque membre qui lui fait confiance et se connecte remet son mot de passe.
-
Alice ouvre le mur
Vous êtes propriétaire du code de rendu du livre d'or. Ce matin, vous rattrapez votre retard sur la communauté, comme n'importe quel autre administrateur commençant sa journée : ouvrez votre navigateur et allez sur le mur. Vous n'avez pas cliqué sur un lien ni exécuté quoi que ce soit. Vous chargez simplement une page que vous gérez.
-
Frappé en charge
La page vient à peine de terminer son chargement et une popup imprime déjà votre cookie de session. Vous n'avez rien tapé et vous n'avez cliqué sur rien. L'une des notes de Bob a été exécutée à l'instant où le mur est rendu, dans votre session d'administration. Sur sa version, le même gestionnaire lui transmettrait directement cette session.
-
Et une fausse connexion en dessous
Faites défiler le mur et vous verrez une deuxième note plantée : une boîte de connexion de session expirée qui ressemble à celle du forum. Tout membre qui lui fait confiance et se connecte remet son mot de passe à l’attaquant. Ce sont des notes stockées, gérées par le navigateur de chaque spectateur. En tant qu'ingénieur propriétaire de cette page, vous savez que le correctif se trouve dans le code de rendu.
Couverture des référentiels de sécurité
OWASP Top 10
- A05:2025 Injection
- A03:2021 Injection
CWE
- CWE-79 Improper Neutralization of Input During Web Page Generation
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security