Cours-XSS
Cours-XSS
Cours-XSS
Dr Sana BENZARTI
ISIMM 2024/2025
Type 1 : Stored XSS (XSS stockés)
Stored XSS
Stored XSS
Stored XSS
Stored XSS
Stored XSS
Stored XSS
Stored XSS
Stored XSS
Type 2 : Reflected XSS (XSS réfléchis)
Reflected XSS
Reflected XSS
Reflected XSS
Reflected XSS
Reflected XSS
Reflected XSS
Reflected XSS
Reflected XSS
Reflected XSS
Reflected XSS
• Les scripts intersites (XSS) sont l'une des méthodes les plus courantes utilisées
par les pirates pour attaquer les sites Web. Les vulnérabilités XSS permettent à un
utilisateur malveillant d'exécuter des fragments arbitraires de JavaScript lorsque
d'autres utilisateurs visitent votre site.
• XSS permet l'exécution arbitraire de code JavaScript, les dommages pouvant être causés par un
attaquant dépendent donc de la sensibilité des données traitées par le site.
• Propagation de vers sur les sites de médias sociaux. Facebook, Twitter et YouTube ont tous été
attaqués avec succès de cette manière.
• Détournement de session. Un code JavaScript malveillant peut être en mesure d'envoyer l'ID de
session à un site distant sous le contrôle du pirate, ce qui permet à ce dernier d'usurper l'identité
de cet utilisateur en détournant une session en cours.
Que pourrait faire un pirate informatique déterminé pour exploiter une vulnérabilité
XSS ?
• Vol d'identité . Si l'utilisateur saisit des informations confidentielles telles que des numéros de
carte de crédit sur un site Web compromis, ces informations peuvent être volées à l'aide d'un
code JavaScript malveillant.
• Les attaques XSS réfléchies sont moins dangereuses que les attaques XSS
stockées, qui provoquent un problème persistant lorsque les utilisateurs visitent
une page particulière, mais elles sont beaucoup plus courantes .
• Une page qui prend un paramètre d'une requête GET ou POST et affiche ce
paramètre à l'utilisateur d'une manière ou d'une autre est potentiellement à
risque.
• Résultats de la recherche : les critères de recherche sont-ils affichés à l'utilisateur ? Sont-ils
indiqués dans le titre de la page ? Êtes-vous sûr qu'ils sont correctement échappés ?
• Pages d'erreur : si vous avez des messages d'erreur signalant des entrées non valides,
l'entrée est-elle correctement échappée lorsqu'elle est affichée à l'utilisateur ? Votre page
404 mentionne-t-elle le chemin recherché ?
• Soumissions de formulaires : si une page publie des données, une partie des données
soumises par le formulaire est-elle affichée à l'utilisateur ? Que se passe-t-il si la soumission
du formulaire est rejetée : la page d'erreur permet-elle l'injection de code malveillant ? Un
formulaire soumis par erreur est-il prérempli avec les valeurs précédemment soumises ?
Protection
Échapper au contenu dynamique
• Les pages Web sont constituées du HTML, généralement décrit dans des fichiers modèles,
avec du contenu dynamique intégré lors du rendu de la page. Les attaques
XSS stockées utilisent le traitement inapproprié du contenu dynamique provenant du data
store principal. L'attaquant abuse d'un champ modifiable pour insérer du code JavaScript, et
celui-ci est évalué au chargement de la page.
• vous devez échapper tout contenu dynamique provenant du data store, afin que le
navigateur sache qu'il doit être traité comme le contenu des balises HTML, par opposition au
code HTML brut.
L'échappement du contenu dynamique consiste généralement à
remplacer les caractères significatifs par l'encodage de l'entité HTML :
Échapper au contenu dynamique
• L'échappement des caractères consiste à convertir des caractères spéciaux (comme <,
>, ou même des guillemets) en une forme "sécurisée" ou "encodée" pour éviter qu'ils ne
soient interprétés comme du code.
• Les balises comme <script> sont échappées en entités HTML. Par exemple :
• < devient <
• > devient >
• " devient "
• ' devient '
Échapper au contenu dynamique
• Si un utilisateur essaie d'injecter
• <script>alert('XSS')</script>
• <script>alert('XSS')</script>.
Échapper au contenu dynamique
• http://example.com?param=%3Cscript%3E.
Allowlist Values
•
La meilleure pratique consiste à restreindre les valeurs dans le data store et à faire en sorte que
votre logique n'autorise que les valeurs connues comme correctes.
• Par exemple, au lieu de demander à un utilisateur de saisir son pays de résidence, demandez-lui
de sélectionner une valeur dans une liste déroulante.
• En définissant une politique de sécurité du contenu dans l'en-tête de réponse, vous pouvez
indiquer au navigateur de ne jamais exécuter de JavaScript en ligne et de verrouiller les
domaines pouvant héberger JavaScript pour une page :
• Désinfecter le HTML
• Certains sites ont un besoin légitime de stocker et de restituer du code HTML
brut. Si votre site stocke et restitue du contenu enrichi, vous devez utiliser
une bibliothèque de nettoyage HTML pour garantir que les utilisateurs
malveillants ne peuvent pas injecter de scripts dans leurs soumissions
HTML.
• Exemples de code
• La prévention des vulnérabilités XSS nécessite l'utilisation des bibliothèques
de code appropriées et la réalisation de révisions de code approfondies.
• En JavaScript (Node.js)
• DOMPurify
• Description : DOMPurify est une bibliothèque très populaire pour nettoyer
le HTML dans le navigateur et côté serveur avec Node.js.
• En PHP
• HTMLPurifier
• Description : Une bibliothèque robuste pour nettoyer le HTML et assurer
qu'il est conforme aux normes.
Type 3 : Based DOM XSS
XSS basé sur DOM
XSS basé sur DOM
• Dans les Applications web riches (souvent des applications à une seule page ou SPA,
Single Page Applications), les fragments URI, qui sont la partie de l'URL située après le
symbole # (dièse ou hash), jouent un rôle important pour représenter ou gérer l'état de
l'application sans recharger la page entière.
• Fragment URI :
• C'est la partie d'une URL qui suit le caractère #.
• Par exemple, dans https://example.com/page#section1, le fragment est section1.
• Utilisation dans les applications web riches :
• Les applications SPA utilisent souvent les fragments pour naviguer ou afficher
différentes vues ou sections sans provoquer un rechargement complet de la page.
• Exemple :
• https://example.com/#home peut correspondre à l'affichage de la section "Home".
• https://example.com/#profile peut afficher la section "Profil".
• Ce comportement est couramment géré par des frameworks comme AngularJS, React
ou Vue.js.
• Pourquoi utiliser les fragments URI ?
• Ils ne déclenchent pas une requête complète vers le serveur, ce qui rend les interactions
plus rapides et fluides.
• Ils permettent de stocker l'état ou la navigation de l'application dans l'URL, ce qui est
utile pour partager ou sauvegarder des liens spécifiques.
• En résumé, dans les applications web riches, les fragments URI servent à manipuler la
navigation et l'état de l'application de manière efficace, tout en restant dans le contexte
d'une seule page.
XSS basé sur DOM
2
XSS basé sur DOM
• 1. Détection de l'événement load :
• Cet événement est déclenché lorsque la page web (y compris tous ses scripts,
images et ressources associées) est complètement chargée.
• Lorsque l'événement load se produit, la fonction anonyme définie ici est exécutée.
2.Récupération du fragment d'URL :
• Ce code appelle une fonction nommée loadPage en lui passant comme argument la
valeur de page (le fragment d'URL sans le #).
• La fonction loadPage n'est pas définie dans le code montré ici, mais elle est
probablement utilisée pour charger dynamiquement le contenu ou exécuter une
logique basée sur le fragment d'URL.
• Par exemple, elle pourrait afficher une section particulière ou charger des données
spécifiques.
4. Affichage du fragment dans l'élément HTML :
• Les attaques XSS basées sur DOM présentent tous les risques associés
aux autres types d'attaques XSS , avec l'avantage supplémentaire qu'elles sont
impossibles à détecter côté serveur. Toute page qui utilise des fragments d'URI
est potentiellement exposée aux attaques XSS.
• Protection
• Pour se protéger contre les attaques XSS basées sur DOM, il faut vérifier que votre JavaScript n'interprète
pas les fragments d'URI de manière non sécurisée. Il existe plusieurs moyens de s'en assurer.
• https://hacksplaining.com/prevention/xss-stored
• https://www.acunetix.com/websitesecurity/cross-site-
scripting/?utm_source=hacksplaining&utm_medium=post&utm_
campaign=articlelink