Les failles XSS
L'injection de script dans une page : XSS stockée, réfléchie, fondée sur le DOM ; ce que l'attaquant y gagne ; l'échappement à la sortie selon le contexte, la politique CSP et le cookie HttpOnly.
- 22 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
Quelques cartes du deck
XSS : de quoi s'agit-il ?
Voir la réponse
Faille qui permet à un attaquant de faire exécuter son script par le navigateur d'une victime, dans le contexte d'un site légitime.
Le script s'exécute avec l'origine du site : il lit ses cookies non protégés, son contenu, et agit au nom de la victime. La cause est un texte fourni par un tiers écrit dans la page sans échappement.
Que fait ce code lorsque le commentaire vaut <img src=x onerror=alert(1)> ?
```javascript
document.querySelector("#commentaire").innerHTML = comment;`- Il crée une image sans source valide, dont l'erreur déclenche le script
- Il affiche le texte de la balise tel quel, sans l'interpréter
- Il refuse la valeur, car innerHTML ne reçoit que du texte sans balise
- Il exécute le script seulement si la page est servie en HTTP
Voir la réponse
Il crée une image sans source valide, dont l'erreur déclenche le script
innerHTML analyse la chaîne comme du HTML : la balise img est créée, le chargement de x échoue et onerror s'exécute. Un script ne s'exécute pas via innerHTML, mais les gestionnaires d'événements oui. textContent évite le problème.
Dans une XSS …, le script injecté est enregistré par le serveur, par exemple dans un commentaire, et touche chaque visiteur qui affiche la page.
Voir la réponse
Dans une XSS stockée, le script injecté est enregistré par le serveur, par exemple dans un commentaire, et touche chaque visiteur qui affiche la page.
C'est la plus grave des trois : la victime n'a rien à cliquer de particulier, il lui suffit de consulter une page normale.
Échappement en sortie : de quoi s'agit-il ?
Voir la réponse
Transformation des caractères spéciaux d'une donnée au moment de l'écrire dans une page, pour qu'ils soient lus comme du texte et non comme du code.
Il se fait à la sortie, au dernier moment, car la bonne transformation dépend de l'endroit où la valeur est écrite : texte HTML, attribut, URL ou script.
Une alerte apparaît chez tous les visiteurs d'un forum après qu'un message a été posté. En ouvrant le HTML, on voit le message écrit tel quel, avec ses balises. Quelle réparation convient ?
- Interdire les messages de plus de 200 caractères pour limiter le script
- Passer le forum en HTTPS pour que le message soit chiffré en route
- Vider le cache du navigateur de chaque visiteur
- Échapper le message à l'affichage, et ajouter une CSP en renfort
Voir la réponse
Échapper le message à l'affichage, et ajouter une CSP en renfort
C'est une XSS stockée : le message dangereux est dans la base et chacun le reçoit. HTTPS protège le trajet, pas le contenu d'une page ; une limite de longueur n'empêche pas un script court. L'échappement à la sortie ferme la faille.