Définition du cross-site scripting (XSS)
Qu’est-ce que le cross-site scripting ?
Une attaque de cross-site scripting (XSS) injecte du code malveillant dans un site Web par ailleurs digne de confiance. Cela peut permettre à un attaquant de recueillir des renseignements sensibles saisis sur le site, comme les identifiants des utilisateurs ou les données de cartes de paiement.
HTML, CSS et scripts
Un site Web est composé de plusieurs couches de code différentes. Le langage de balisage hypertexte (HTML) définit la structure générale et le contenu statique, les feuilles de style en cascade (CSS) gèrent l’aspect visuel, et les langages de script comme JavaScript et PHP peuvent servir à ajouter des fonctionnalités interactives.
Le HTML constitue la couche de base d’un site Web, et la norme permet aux autres types de contenu d’être soit intégrés dans une page HTML, soit liés à celle-ci à partir de fichiers autonomes. Par exemple, JavaScript peut être utilisé dans une page Web au moyen d’un fichier autonome ou en indiquant qu’un certain bloc de contenu est un script à l’aide d’une balise <script>.
Une page HTML peut entremêler du contenu HTML, CSS et des scripts, en ne les séparant que par leurs balises. Lorsque la page est affichée par un navigateur, celui-ci interprète ces balises et utilise le contenu en conséquence.
Comment fonctionne une attaque XSS ?
Dans une attaque XSS, l’attaquant tire parti de la structure des pages HTML pour intégrer du code malveillant dans une page Web. Pour ce faire, il lui faut une situation où du contenu fourni par l’utilisateur peut être intégré dans une page Web. En voici quelques exemples :
- Commentaires, évaluations et forums
- Intégration du nom d’un utilisateur (ou d’autres renseignements) dans une page Web
- Résultats de recherche
Puisque le HTML peut entremêler différents types de contenu, un attaquant peut profiter de cette occasion pour intégrer du code malveillant dans une page Web. Il y parvient en fournissant une entrée soigneusement conçue qui inclut du code malveillant dans une structure imitant correctement la façon dont il serait balisé dans une page Web légitime.
Types de XSS
Les attaques XSS peuvent être menées de quelques façons différentes. Les trois types d’attaques XSS sont les suivants :
- XSS réfléchi : Le XSS réfléchi — aussi appelé XSS non persistant ou de type I — intègre du code de script dans une URL ou un champ de saisie. Souvent, il est utilisé dans des attaques d’hameçonnage où un lien malveillant contient le code de script malveillant, ce qui permet de l’ouvrir dans le navigateur de l’utilisateur.
- XSS stocké : Le XSS stocké — aussi appelé XSS persistant ou de type II — intègre des scripts malveillants dans des commentaires ou d’autres champs persistants d’une page Web. Ces attaques touchent quiconque visite la page contenant le code malveillant intégré.
- XSS fondé sur le DOM : Le XSS fondé sur le DOM est aussi appelé XSS de type 0. Il exploite le modèle objet de document (DOM) dans le navigateur de l’utilisateur, en manipulant la façon dont le code côté client est exécuté plutôt que la page Web elle-même.
Prévenir le XSS
Les vulnérabilités XSS existent lorsqu’un site Web intègre dans une page Web des entrées fournies par l’utilisateur sans les vérifier adéquatement. Cela peut être dangereux, car le script malveillant a le même accès aux données que la page Web elle-même. Un script malveillant pourrait recueillir des renseignements sensibles fournis par l’utilisateur (identifiants, données de cartes de paiement, etc.) et les exfiltrer vers un attaquant, ou poser d’autres gestes malveillants contre l’organisation.
Voici quelques moyens de se protéger contre les attaques XSS :
- Assainissement des entrées : Un exploit XSS comprend des balises HTML et du code malveillant, ce qui signifie qu’il ne correspond probablement pas au format attendu des données fournies par l’utilisateur. Une application peut bloquer le XSS, par exemple, en n’autorisant que des caractères alphanumériques dans un champ qui ne nécessite pas de symboles.
- Encodage des entrées : Le HTML permet d’intégrer des données dans une page Web sous une forme encodée qui sera décodée avant que la page ne soit présentée à l’utilisateur. Puisque ce décodage a lieu après que les sections de la page Web ont été interprétées comme des données ou du code, cela empêche un attaquant de fournir des données malveillantes que le navigateur interpréterait et exécuterait comme du code JavaScript ou PHP.
Conclusion
Le XSS est un risque de sécurité des applications Web qui découle de mauvaises pratiques d’assainissement des entrées. Avant de traiter une entrée fournie par l’utilisateur ou de l’intégrer dans une page Web, vérifiez qu’elle correspond aux attentes (c.-à-d. qu’il s’agit bien d’un nom, etc.) et encodez-la pour vous protéger contre les attaques XSS.
Howard Poston
Howard Poston est rédacteur, auteur et concepteur de cours possédant de l’expérience en cybersécurité et en sécurité des chaînes de blocs, en cryptographie et en analyse de maliciels. Il détient une maîtrise en cyberopérations, cumule une décennie d’expérience en cybersécurité et compte plus de cinq ans d’expérience à titre de consultant indépendant.