DOM XSS
La charge utile n'atteint jamais le serveur. Il fonctionne toujours.
Qu'est-ce que DOM XSS?
XSS basé sur DOM est le script intersite que votre serveur ne voit jamais. La charge utile se trouve dans le fragment d'URL, document.referrer ou un corps postMessage , et JavaScript côté client l'écrit dans innerHTML . Les filtres côté serveur et les pare-feu d’applications Web sont aveugles à tout cela. Vous allez emballer une charge utile img onerror dans un lien de partage pour une visionneuse de notes, l'ouvrir vous-même, tracer le flux de la source au récepteur et le corriger avec textContent afin que le navigateur crée un nœud de texte au lieu d'analyser le balisage.
Ce que vous apprendrez dans DOM XSS
- Reconnaître le modèle source-récepteur : une source DOM contrôlée par un attaquant (location.hash, document.referrer, postMessage) alimentant un récepteur DOM dangereux (innerHTML, eval, document.write)
- Expliquez pourquoi le hachage d'URL n'atteint jamais le serveur et pourquoi les filtres WAF/côté serveur sont aveugles au DOM XSS
- Appliquez le correctif principal approprié : remplacez le récepteur dangereux (innerHTML) par un récepteur sûr (textContent), sans filtrage côté serveur ni réécriture des entrées.
- Distinguer DOM XSS des XSS réfléchis et stockés selon l'endroit où la charge utile circule et où le correctif doit atterrir
- Auditer une base de code pour les tuyaux source-puits adjacents une fois qu'un bug fait surface
DOM XSS — Étapes de la formation
-
Ouvrez l'outil de partage de notes
Aujourd'hui, Bob cible Tideline Federal, dont le personnel transmet des notes rapides via un outil de partage interne. Vous écrivez une note, l'outil vous remet un lien et toute personne qui ouvre le lien lit la note dans son navigateur. Bob ouvre le compositeur pour voir comment une note devient un lien.
-
Partager une note normale
Tout d’abord, Bob partage une note ordinaire pour voir comment l’outil crée un lien. Tout ce qu'il écrit est intégré dans le lien lui-même.
-
La note circule dans le lien
Il y a le lien de partage. La note entière se trouve à l’intérieur, dans la partie après le # . Lorsque quelqu'un ouvre le lien, le spectateur lit ce fragment et le restitue. Rien dans la note n'atteint le serveur de Tideline.
-
Créer une charge utile de test
Le spectateur dépose tout ce que contient la note dans la page au format HTML. Bob écrit donc une note qui n'en est pas vraiment une : une balise d'image dont la source ne peut pas se charger, portant un gestionnaire onerror . Lorsque l'image échoue, le gestionnaire s'exécute et tout code qu'il contient s'exécute dans le navigateur de celui qui ouvre le lien. Il commence par la preuve la plus simple possible, un simple alert(1) , juste pour confirmer que son code s'exécute.
-
Testez la charge utile
Avant d'armer quoi que ce soit, Bob prévisualise son propre lien pour vérifier que la charge utile se déclenche. L'aperçu ouvre la note exactement de la manière dont un destinataire la verrait. Au moment où le spectateur le charge, l’alerte apparaît. Son code s'exécute dans le navigateur, exactement comme prévu.
-
Armez-le
La preuve fonctionne, alors maintenant Bob rend la chose dangereuse. Il retourne vers le compositeur et remplace l'alerte inoffensive par une ligne qui lit le cookie de session du visiteur, le jeton qui le maintient connecté. Une vraie charge utile enverrait ce cookie à son propre serveur sans un son. Ici, la valeur volée apparaît afin que vous puissiez voir exactement ce qu'elle capture.
-
Envoyer le lien à une victime
Bob envoie le lien armé à Alice, une ingénieure de Tideline qui ouvre des notes partagées toute la journée. Il s'agit d'une note partagée avant sa révision matinale, elle n'a donc aucune raison d'hésiter.
-
Une note partagée arrive
L'e-mail de Bob est en route. Vous possédez le code de visualisation de l'outil de partage de notes et une note partagée arrive dans votre boîte de réception juste avant votre révision à 10h00. Ouvrez-le, puis ouvrez la note.
-
Ouvrir la note partagée
Rien ne semble bizarre, alors vous ouvrez la note comme vous en ouvrez des dizaines d’autres.
-
La note vole votre session
Dès l'instant où la note est chargée, cette fenêtre contextuelle s'est déclenchée dans votre navigateur et affiche votre propre cookie de session, le jeton qui vous permet de rester connecté. Vous n'avez rien cliqué et rien tapé. La note partagée contenait un script, qui lisait simplement votre session et aurait pu l'envoyer directement à un attaquant. Il s’agit d’une prise de contrôle complète du compte dès l’ouverture d’un lien.
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