Après les dernières vulnérabilités de type cross-site scripting (XSS), le FBI et la CISA ont récemment renforcé leurs mesures de sécurité et se sont concentrés sur l'amélioration de la cyber-résilience. Sans surprise, les organisations négligent souvent les principes de base, ce qui entraîne des violations de données.
Les attaques de type cross-site scripting se produisent lorsque les applications et services web ne parviennent pas à traiter les requêtes ou les entrées, ou ne fonctionnent pas comme prévu. Elles sont dangereuses car elles ne ciblent pas seulement les applications, mais aussi les utilisateurs qui les utilisent.
Voici un guide sur les attaques de type " cross-site scripting " et tout ce que vous devez savoir sur le sujet.
Que sont les attaques de type Cross-Site Scripting (XSS) ?
Aucune application ni aucun site web n'est parfait ; ils comportent tous des failles cachées. Les attaques de type " cross-site scripting "exploitent ces failles en envoyant des codes malveillants afin de provoquer leur dysfonctionnement. Ces attaques peuvent permettre à un acteur malveillant de prendre le contrôle de l'identité d'une victime et même de se faire passer pour elle.
Le script malveillant se cache dans l'application web, il est donc difficile à détecter. Il se fond dans le code source de l'application, ce qui rend impossible pour les services de vérifier s'il provient de sources non fiables. Quel en est le résultat ? Les pirates accèdent aux cookies, aux jetons de site et à d'autres données sensibles collectées par votre navigateur web. Si votre site web ou votre application diffuse du contenu à différents endroits, celui-ci est également intercepté automatiquement. Les forums en ligne et les forums de discussion où vous pouvez laisser des commentaires sous les publications sont également vulnérables à ce type d'attaque.
Types d'attaques de type Cross-Site Scripting (XSS)
Les vulnérabilités XSS ont déjà donné naissance à des vers et compromis les mesures de sécurité des applications par le passé. Elles peuvent propager des logiciels malveillants, hameçonner des identifiants et détourner des sites web de défense.
Il existe trois principaux types d'attaques de type cross-site scripting (XSS). Avant d'apprendre à prévenir les attaques XSS, vous devez connaître les menaces auxquelles vous êtes confronté. Les voici.
1. XSS stocké (XSS persistant)
Il s'agit de l'une des formes les plus basiques mais les plus dangereuses de XSS. Le XSS stocké fait référence à un code malveillant stocké dans des bases de données web lorsque la validation des entrées fait défaut. L'attaquant injecte le code via une vulnérabilité de l'application web et le stocke de manière permanente. La victime peut exécuter le script à son insu, et une charge utile est transmise à son navigateur web sous forme de code HTML. Une fois qu'elle a exécuté le script malveillant en chargeant la page web, tout est fini.
Un exemple classique est un commentaire laissé sur un article de blog. L'attaquant peut joindre une URL et inciter la victime à lire le commentaire en cliquant dessus. Lorsque l'utilisateur interagit, le code est automatiquement exécuté par celui-ci.
2. XSS réfléchi (XSS non persistant)
Lorsque la charge utile d'un attaquant est intégrée à celle envoyée au navigateur web, elle se transforme en une attaque XSS réfléchie. La requête rebondit depuis le navigateur de sorte que la réponse HTTP inclut la charge utile de la requête HTTP. Les pirates peuvent utiliser une combinaison de ingénierie sociale menaces, liens malveillants et autres techniques d'hameçonnage pour inciter les victimes à envoyer des requêtes au serveur. Le seul inconvénient de cette technique est que l'attaquant doit envoyer des charges utiles individuelles à chaque victime séparément. Il ne peut pas envoyer de charges utiles en masse ; la plupart des attaques XSS réfléchies sont menées sur les réseaux sociaux.
3. XSS basé sur DOM
Le XSS basé sur DOM consiste à pirater des comptes d'utilisateurs en récupérant du code Javascript malveillant à partir d'une source contrôlable par l'attaquant. Ce code est transmis à un récepteur qui l'exécute de manière dynamique et exécute le bloc de manière arbitraire. L'URL du navigateur est la source la plus courante de ces attaques de type cross-site scripting. L'attaquant ajoute également un lien pour envoyer les victimes vers des pages vulnérables avec des charges utiles intégrées dans des chaînes de requête. Il peut également fragmenter certaines parties de l'URL et manipuler davantage les victimes en les redirigeant vers des pages erronées.
Comment fonctionne le cross-site scripting (XSS) ?
Le cross-site scripting consiste à altérer des sites web vulnérables et à renvoyer du code JavaScript malveillant aux utilisateurs. Lorsque l'attaquant injecte un code malveillant et l'exécute à partir du navigateur de la victime, il peut compromettre entièrement ses applications et toutes les interactions qui en découlent.
Les iframes inter-origines ne permettent pas aux utilisateurs d'appeler la fonction d'alerte. Elles sont utilisées pour constituer certaines des attaques XSS les plus avancées. L'attaquant peut également prendre le contrôle des privilèges et des accès utilisateur au sein des applications web et s'emparer des données qui y sont stockées.
Les attaques et les vulnérabilités de type cross-site scripting peuvent permettre à l'attaquant d'usurper l'identité de la victime et de se faire passer pour elle sur l'ensemble du réseau. Elles peuvent contourner les politiques d'origine. Ils peuvent séparer complètement différents sites web.
Voici maintenant un aperçu simplifié du fonctionnement d'une attaque de type cross-site scripting :
- L'attaquant vous enverra un lien malveillant. Lorsque vous cliquez dessus, le code est injecté et le contenu dynamique est transmis au navigateur web.
- Il envoie une requête HTTP au serveur web de l'attaquant. Le pirate peut alors utiliser vos cookies volés pour usurper votre identité.
- Il peut accéder à des informations sensibles et mener des attaques d'ingénierie sociale plus avancées.
- Les attaques de type " cross-site scripting " permettent aux attaquants de contourner les politiques de même origine conçues pour séparer les différents sites Web. Ces attaques sont brutales et peuvent nuire à la réputation de votre entreprise. L'adversaire peut nuire à votre organisation en modifiant son contenu et en endommageant ou en ternissant l'image de l'entreprise.
- Ils peuvent diffuser de fausses informations, modifier les instructions destinées aux utilisateurs sur vos sites Web et les induire en erreur.
Les attaques XSS sont dangereuses, en particulier lorsqu'elles visent des agences gouvernementales, des organismes de santé ou des entreprises qui fournissent des ressources vitales en cas de crise.
Comment prévenir les attaques de type Cross-Site Scripting (XSS) ?
Vous pouvez adopter différentes approches. Découvrez-les pour savoir comment prévenir les attaques de type Cross-Site Scripting :
- La validation des entrées des applications et services web peut aider à prévenir les attaques de type Cross-Site Scripting (XSS). Vous pouvez également utiliser un scanner de vulnérabilité pour vérifier si vos sites web présentent d'autres failles de sécurité. C'est l'un des meilleurs moyens de savoir comment prévenir automatiquement les attaques (XSS).
- La deuxième façon de prévenir les attaques XSS consiste à encoder les données en sortie. Idéalement, cela devrait être fait avant d'écrire vos données sur une page. Le type d'encodage que vous devrez utiliser dépendra de votre contexte d'écriture.
- Par exemple, les valeurs de chaîne JavaScript nécessiteront un type d'encodage différent de celles utilisées dans un contexte HTML. Dans un contexte HTML, vous devez convertir les valeurs non répertoriées dans la liste blanche en entités HTML. Mais dans un contexte de chaîne JavaScript, vous devez vous assurer que les valeurs non alphanumériques sont échappées en Unicode.
- Plusieurs couches d'encodage peuvent être nécessaires, et ce processus doit être appliqué dans le bon ordre. Vous devez intégrer les entrées de vos utilisateurs dans des gestionnaires d'événements et traiter les contextes HTML et JavaScript. Il existe de nombreuses façons de valider les entrées à leur arrivée.
- Par exemple, si un utilisateur soumet une URL et qu'elle est renvoyée dans une réponse, vous pouvez la valider en commençant par un protocole de sécurité tel que HTTPS et HTTP. Vous pouvez également valider les valeurs lorsqu'un utilisateur les fournit par ordre alphabétique ou numérique. Vous pouvez également valider différemment en limitant la saisie à un ensemble de caractères attendus.
Voici quelques autres approches que vous pouvez également adopter :
- Vous pouvez dresser une liste de tous les protocoles sécurisés autorisés sur votre site web. Ainsi, votre système de défense bloquera automatiquement les protocoles nuisibles qu'il ne reconnaît pas par défaut. Cela peut empêcher les attaques XSS de dissimuler des valeurs invalides en essayant de contourner les listes de blocage.
- Les utilisateurs ne devraient pas être autorisés à publier du code HTML, mais cela est parfois nécessaire. Vous pouvez filtrer les balises nuisibles en mettant en place des listes blanches. Elles enregistreront les balises sûres et filtreront tout code malveillant associé aux balises figurant sur la liste noire. Toutes les balises ne figurant pas sur vos listes blanches seront considérées comme figurant sur la liste noire, sauf si vous les spécifiez.
- Vous devrez surveiller votre site web pour les mises à jour de sécurité. Supposons que vous envisagiez d'utiliser des bibliothèques JavaScript pour effectuer le filtrage et l'encodage directement à partir du navigateur de l'utilisateur. Dans ce cas, vous pouvez également prévenir les attaques XSS à l'aide d'un moteur de modèles côté serveur. Il peut intégrer du contenu dynamique dans le HTML et définir un code spécifique.
- Vous pouvez également utiliser des filtres avec des arguments et définir le contexte. Cela peut aider à prévenir la plupart des cas d'attaques XSS. Et vous pouvez passer en revue ces fonctionnalités d'échappement pour évaluer périodiquement s'il convient de continuer à utiliser le moteur de modèles ou le framework.
- Il existe également des fonctions intégrées dans PHP pour encoder les entités, et vous pouvez les appeler pour échapper les entrées lorsque vos valeurs se trouvent dans un contexte HTML. Vous pouvez les appeler avec trois arguments et vous avez besoin d'entrées d'échappement Unicode. PHP ne fournit aucune API pour échapper les chaînes Unicode.
- Convertissez vos chaînes en entités HTML, puis appelez les fonctions. Vous pouvez utiliser votre encodeur HTML personnalisé pour prévenir les attaques XSS JavaScript côté client.
Améliorez votre veille sur les menaces
Découvrez comment WatchTower, le service de chasse aux menaces de SentinelOne, peut vous apporter de meilleures informations et vous aider à déjouer les attaques.
En savoir plusAttaques par cross-site scripting (XSS) : conseils de prévention (bonnes pratiques)
Les bonnes pratiques que vous pouvez mettre en place pour prévenir les attaques XSS sont les suivantes :
- Nettoyez les entrées utilisateur et les données de sortie via l'encodage.
- Vous pouvez remplacer les caractères spéciaux par des valeurs encodées afin que toutes les données puissent être traitées comme du texte plutôt que comme du code. L'attaquant ne pourra pas injecter de script malveillant s'il a affaire à du texte brut. Si vous appliquez correctement l'encodage, aucun utilisateur ne sera affecté de cette manière.
- Vous pouvez appliquer de nombreux types d'encodage en fonction de la logique métier ou du type d'application, y compris le type de données stockées et traitées. Il existe différentes méthodes d'encodage, telles que l'encodage des entités HTML, l'une des mesures les plus élémentaires. Vous pouvez également encoder les valeurs d'attribut.
- Une autre bonne pratique pour prévenir les attaques XSS consiste à filtrer les données reçues côté client. Le filtrage des données permet de supprimer les caractères dangereux tels que les balises, les gestionnaires d'événements HTML, les éléments JavaScript malveillants, etc.
- Vous pouvez renvoyer les réponses des pages web en combinant le filtrage des entrées et des sorties. Cette méthode est la plus efficace pour atténuer les attaques XSS stockées.
- La validation des entrées utilisateur est une autre mesure de sécurité. Par exemple, si vous configurez les champs de saisie par défaut pour autoriser les types de données textuelles, il sera impossible pour les utilisateurs de saisir des chiffres. Cela fonctionne bien pour les formulaires Web ; les entrées peuvent être validées pour empêcher les attaquants de télécharger des scripts malveillants via l'autorisation. Les navigateurs Web n'autorisent l'accès qu'aux ressources autorisées et ignorent tous les autres domaines. Les scripts injectés ne seront pas exécutés, même si un attaquant parvient à découvrir des vulnérabilités d'injection XSS.
- Pour empêcher les attaques de type cross-site scripting dans jQuery, vous pouvez transmettre les entrées utilisateur à un sélecteur jQuery. La méthode la plus courante consiste à utiliser l'emplacement. Hachage et transmettre le sélecteur pour rendre le HTML. jQuery peut reconnaître le problème et corriger la logique du sélecteur pour vérifier si les entrées commencent par un hachage.
- Vous pouvez spécifier des ressources telles que des images et des scripts qui peuvent être chargées à partir de l'origine du site. Si un attaquant injecte des charges utiles XSS, il ne pourra pas charger les ressources qui ne proviennent pas de l'origine actuelle. Le sélecteur jQuery peut réduire considérablement les risques d'attaque ou de vulnérabilité XSS.
Si vous prévoyez de transmettre des données non fiables à vos sélecteurs jQuery, assurez-vous d'échapper correctement les valeurs à l'aide de la fonction js—escape. Vous pouvez également atténuer les attaques XSS en tirant parti des politiques de sécurité du contenu. Elles peuvent vous aider à contrôler divers aspects de la gestion des scripts externes, tels que leur chargement et l'exécution de scripts en ligne.
Exemples courants d'attaques XSS
Voici quelques exemples courants d'attaques XSS dans le monde réel :
- British Airways a été piratée par MageCart, un groupe de hackers très médiatisé, en 2018. Le groupe a exploité une vulnérabilité XSS dans la bibliothèque JavaScript. Les données des clients ont été envoyées à un serveur malveillant dont le nom de domaine était similaire à celui du site web officiel. Ils ont fini par pirater les données de carte de crédit de plus de 380 000 transactions de réservation, ce qui a coûté énormément d'argent à la compagnie aérienne jusqu'à ce que la violation soit découverte trop tard.
- Fornite est un jeu multijoueur en ligne populaire qui a subi une attaque XSS. Une vulnérabilité SSO non sécurisée a redirigé les utilisateurs vers une fausse page de connexion, où leurs informations ont été volées. Les joueurs ont également perdu des devises virtuelles dans le jeu, et les discussions enregistrées entre les joueurs ont été divulguées.
- eBay présentait une vulnérabilité XSS qui permettait aux attaquants d'accéder librement aux comptes des vendeurs. Les pirates ont manipulé le positionnement des annonces eBay et ont poursuivi leurs attaques même après qu'eBay ait découvert et corrigé la vulnérabilité.
Conclusion
Les attaques de type " cross-site scripting " comptent parmi les menaces les plus graves pour la sécurité web, car elles sapent la confiance dans les plateformes en ligne et compromettent les données des utilisateurs. En connaissant les types d'attaques XSS et en appliquant des mécanismes de prévention appropriés, les développeurs peuvent sécuriser leurs applications. Les mesures appropriées comprennent la validation des entrées, le codage des sorties et l'application de politiques de sécurité du contenu.
Les audits de sécurité et les outils sophistiqués de détection des menaces sont essentiels pour garantir une présence en ligne sûre et sécurisée. À mesure que la technologie progresse, les méthodes des pirates évoluent également, il est donc primordial de faire preuve de prudence. En donnant la priorité à la prévention des XSS, les organisations peuvent protéger leur réputation et garantir l'intégrité de leur présence en ligne.
"FAQs
Les attaques XSS consistent à injecter des scripts malveillants dans des sites Web afin de permettre aux pirates d'accéder à des données sensibles des utilisateurs. Les attaques XSS exploitent les vulnérabilités des applications Web et utilisent souvent les entrées des utilisateurs ou des URL manipulées.
Les développeurs peuvent éviter les attaques XSS en vérifiant les entrées des utilisateurs, en encodant les données de sortie et en n'autorisant que les scripts malveillants. Des audits de sécurité périodiques et des politiques de sécurité du contenu permettent également de réduire les risques.
Les attaques XSS exploitent les applications Web en injectant des scripts malveillants qui s'exécutent sur les navigateurs auxquels les utilisateurs ont accès, contournant ainsi les contrôles de sécurité et accédant à des informations sensibles.
Les attaques XSS doivent être évitées car elles peuvent entraîner des fuites de données, des pertes financières et nuire à la réputation. Elles brisent également la confiance des utilisateurs et peuvent potentiellement transmettre des logiciels malveillants ou des attaques de phishing.
Les solutions et outils comprennent des scanners de vulnérabilité, des pare-feu d'applications web et des systèmes avancés de détection des menaces. Ceux-ci permettent de détecter les vulnérabilités et d'empêcher l'exécution de scripts malveillants.
Oui. Un WAF peut bloquer les attaques XSS en filtrant le trafic et en identifiant les scripts malveillants avant qu'ils ne puissent interagir avec l'application.
Les tests XSS utilisent des scanners de vulnérabilité et des outils de test d'intrusion pour simuler des attaques et trouver des points d'entrée potentiels pour les scripts malveillants.
Pour se protéger contre les menaces en constante évolution, des analyses de sécurité visant à détecter les vulnérabilités XSS doivent être effectuées régulièrement, idéalement tous les trois mois.

