Qu’est-ce que le Cross-Site Scripting (XSS) et comment le prévenir ?

Nous vivons à l’ère de la transformation numérique rapide, avec des solutions innovantes nous permettant d’accomplir un large éventail de choses plus vite et plus facilement. À mesure que les technologies progressent, les pirates et les acteurs malveillants créent des contre-approches sophistiquées en exploitant ces technologies de pointe.

Bien que les professionnels de la sécurité de l’information travaillent constamment à développer des outils de cybersécurité pratiques, les utilisateurs de sites web sont exposés à de nouvelles vulnérabilités — le cross-site scripting (XSS) étant l’une des cybermenaces les plus répandues.

Qu’est-ce que le Cross-Site Scripting (XSS) ?

Le cross-site scripting (XSS) est une attaque de sécurité par injection de code qui permet à un acteur malveillant d’insérer des scripts malveillants dans les navigateurs web d’applications ou de sites web de confiance. Contrairement à l’injection SQL et à d’autres vecteurs d’attaque qui accèdent directement à la base de données, le XSS cible l’utilisateur final afin de prendre le contrôle total des opérations.

En usurpant l’identité des utilisateurs, l’acteur malveillant peut voler le cookie de session actif de l’utilisateur et accéder à ses données confidentielles. Le navigateur de la victime ne peut pas distinguer le balisage légitime du balisage malveillant et l’exécute.

Le XSS se classe huitième dans la liste des OWASP Top 10 des vulnérabilités les plus critiques des applications web. Les classements de l’Open Web Application Security Project sont fournis par des experts en sécurité du monde entier pour aider les développeurs à corriger les failles du système et à réduire la présence de risques connus.

Qu’est-ce que le Cross-Site Scripting (XSS) et comment le prévenir ?

Quels sont les types d’attaques XSS ?

Selon l’endroit où un pirate injecte une entrée malveillante, le XSS peut être divisé en trois catégories principales :

Cross-Site Scripting Persistant

Le XSS stocké ou XSS persistant est le type d’attaque XSS le plus dangereux, qui peut compromettre de nombreux visiteurs et entraîner des conséquences dévastatrices. Le XSS stocké survient lorsque l’entrée utilisateur n’est pas validée avant que le contenu ne soit stocké et affiché sur la page web.

Les réseaux sociaux, les forums, les sites de blogs, les profils d’utilisateurs, les tableaux de messages et les sections de commentaires sont des zones courantes où le XSS peut être stocké. Les acteurs malveillants exploitent cette vulnérabilité en injectant des charges utiles XSS sur les pages les plus visitées des sites web. En cliquant sur le lien conçu à cet effet et en ouvrant la page virale, le navigateur web de la victime exécute la charge utile côté client.

Voici une illustration claire d’une vulnérabilité XSS stockée. Un utilisateur peut laisser des messages à une application de tableau de messages, que d’autres utilisateurs peuvent consulter :

<p>Hello, this is my message!</p>

L’application ne traite pas davantage les données, ce qui permet facilement à un fraudeur d’envoyer un message ciblant d’autres utilisateurs :

<p><script>/* Bad stuff here... */</script></p>

Cross-Site Scripting Réfléchi

Le XSS réfléchi est l’attaque de cross-site scripting la plus couramment utilisée (également connue sous le nom de XSS non persistant). Pour mener cette attaque, un pirate ajoute du code malveillant à la fin de l’URL. Une fois que l’utilisateur clique sur ce lien dans son navigateur web, le navigateur exécute la charge utile XSS réfléchie.

L’acteur malveillant utilise généralement des URL malveillantes, des e-mails de phishing et d’autres attaques d’ingénierie sociale numérique pour inciter la victime à cliquer sur le lien. En règle générale, les attaques XSS suivantes sont menées via les réseaux sociaux.

Pour illustrer la vulnérabilité XSS réfléchie, consultez l’exemple ci-dessous :

https://insecure-website.com/status?message=All+is+well.
<p>Status: All is well.</p>

L’application web n’effectue aucun traitement de données supplémentaire, permettant à un pirate d’exécuter l’attaque suivante :

https://insecure-website.com/status?message=
<p>Status: <script>/* Bad stuff here... */</script></p>

Cross-Site Scripting Basé sur le DOM

Les auteurs d’attaques peuvent insérer du code malveillant dans une page en modifiant l’environnement DOM (Document Object Model) lorsque celui-ci ne filtre pas correctement les entrées utilisateur. Le code source HTML et la réponse de l’attaque sont identiques dans le cas du XSS basé sur le DOM. La page elle-même reste inchangée, mais en raison des modifications malveillantes apportées à l’environnement DOM, le code côté client de la page s’exécute de manière inattendue.

Le XSS basé sur le DOM est entièrement une vulnérabilité d’injection côté client. Par conséquent, la charge utile parasite n’atteint jamais le serveur. En raison de la nature particulière du XSS basé sur le DOM, il est difficile pour les pare-feux d’applications web (WAF) et d’autres outils de sécurité des applications web de détecter ces attaques.

L’application web de l’exemple ci-dessous utilise JavaScript pour lire la valeur d’un champ de saisie et écrire cette valeur dans un élément HTML :

var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;

Si l’acteur malveillant contrôle la valeur du champ de saisie, il peut facilement créer une valeur malveillante qui entraîne un comportement non sécurisé de son script :

You searched for: <img src=1 onerror='/* Bad stuff here... */'>

Comment un acteur malveillant peut-il exploiter les XSS ?

En règle générale, le contenu malveillant envoyé au navigateur web prend la forme d’un segment JavaScript, mais peut également inclure du HTML, Flash, VBScript, ActiveX ou tout autre code que le navigateur peut exécuter.

Les attaques XSS basées sur JavaScript sont les plus répandues, car JavaScript est un composant fondamental de la plupart des expériences de navigation.

JavaScript peut lire les cookies dans le navigateur, permettant à l’auteur de l’attaque d’exécuter une attaque XSS et d’usurper l’identité de l’utilisateur à des fins de vol d’identité et d’autres activités malveillantes. JavaScript fournit plusieurs modules et méthodes pour effectuer des requêtes HTTP, qui peuvent être utilisés pour renvoyer des données (telles que des cookies volés) à l’acteur malveillant. De plus, la vulnérabilité du JavaScript côté client au piratage peut aider les fraudeurs à accéder aux API et à compromettre facilement la localisation géographique des clients, les données de leur webcam et d’autres informations privées.

En exploitant les vulnérabilités XSS, un acteur malveillant peut mener des activités malveillantes, telles que :

  • Détourner la session de l’utilisateur. Le détournement de session est une méthode permettant de prendre le contrôle d’une session authentifiée d’un utilisateur. Les cookies de session contiennent des données critiques qui peuvent permettre à un acteur malveillant de se faire passer pour un utilisateur légitime et d’obtenir l’identifiant de session en cas de compromission.
  • Effectuer des actions non autorisées. Les attaquants ne peuvent pas voler les cookies via JavaScript si l’attribut de cookie HTTPOnly est défini. Cependant, en effectuant l’attaque XSS, ils peuvent tout de même mener des activités non autorisées au sein de l’application au nom de la victime.
  • Mener des attaques de phishing. Le phishing est un type courant de cyberattaque où l’auteur injecte un formulaire dans la page vulnérable et utilise ce formulaire modifié pour voler les informations d’identification de l’utilisateur, généralement sous forme de mots de passe, d’informations sur les comptes bancaires et de numéros de carte de crédit.
  • Capturer les frappes au clavier des utilisateurs. Un pirate insère ici un enregistreur de frappe JavaScript dans la page vulnérable et surveille les frappes de la victime sur la page web actuelle. Les informations recueillies peuvent révéler des noms d’utilisateur, des mots de passe et des données potentiellement compromettantes que les pirates peuvent utiliser à des fins financières.
  • Voler des informations sensibles. En effectuant une attaque XSS, l’auteur collecte des données de la session actuelle de l’utilisateur. Par exemple, les attaques de cross-site scripting sur les applications bancaires en ligne peuvent permettre aux attaquants de consulter le solde actuel, les détails des transactions, les informations personnelles, etc.

Les vulnérabilités XSS favorisent l’escalade des attaques à un niveau plus grave et, si elles sont exploitées par des fraudeurs, peuvent causer des dommages importants. Les attaques XSS peuvent entraîner une exposition de données sensibles, la compromission du compte de la victime, et pire encore.

En créant un faux formulaire, les attaquants incitent les internautes à fournir leurs identifiants, ce qui leur permet d’obtenir toutes les informations sur l’utilisateur. Une fois que l’intention malveillante des pirates de tromper leurs victimes est accomplie, les données obtenues peuvent être utilisées pour le vol d’identité ou la fraude financière.

Exemples réels de XSS

Les attaques de cross-site scripting ont semé la confusion dans des entreprises bien connues. Voici les exemples les plus célèbres :

Fortnite

Fortnite est un phénomène du jeu vidéo — l’un des jeux de bataille en ligne les plus populaires, avec plus de 200 millions de joueurs dans le monde. En raison de son énorme popularité, la plateforme de jeu est devenue la cible principale des acteurs malveillants et a failli être victime d’une attaque XSS entraînant une fuite de données début 2019.

Des chercheurs en sécurité de Check Point Software Technologies ont découvert la vulnérabilité de cross-site scripting dans le jeu, qui aurait pu permettre à des pirates de prendre le contrôle des comptes des joueurs, d’accéder à leurs informations sensibles, de voler la monnaie virtuelle du jeu et d’espionner leurs conversations. Les experts ont signalé en privé les vulnérabilités XSS identifiées au développeur du jeu Epic Games, et la société a corrigé les problèmes.

British Airways

En 2018, British Airways a subi une violation de données affectant 380 000 transactions de réservation. Les chercheurs de RiskIQ ont réussi à identifier Magecart — l’un des plus grands groupes de pirates connus pour l’utilisation de techniques de skimming en ligne. Les pirates ont attaqué le site web de British Airways en exploitant une vulnérabilité XSS dans une bibliothèque JavaScript appelée Feedify.

Après avoir modifié le script, les auteurs ont envoyé les données des clients vers leur serveur désigné, avec un nom de domaine similaire à celui de British Airways, et ont réussi à effectuer un skimming de cartes de crédit. Le serveur malveillant disposait d’un certificat SSL, de sorte que les clients faisaient entièrement confiance au serveur auprès duquel ils achetaient.

eBay

eBay est l’une des premières et des plus populaires plateformes de commerce électronique. Cependant, elle a été compromise via une vulnérabilité de cross-site scripting fin 2014 et début 2015. Le site web utilisait un paramètre d’URL qui redirigeait les membres d’eBay vers différentes pages, mais la valeur du paramètre n’était pas vérifiée avant d’être incluse dans la page. En raison de cette faille, les attaquants pouvaient créer une URL contenant une iFrame parasite et l’injecter dans le site web légitime d’eBay.

Ainsi, les fraudeurs pouvaient accéder aux comptes des vendeurs eBay, voler des informations de paiement, vendre des produits à prix réduit et manipuler les annonces eBay de produits de valeur tels que des véhicules. Bien qu’eBay ait par la suite résolu le problème, des attaques récurrentes ont continué jusqu’en 2017.

Facebook

En 2011, trois vulnérabilités XSS distinctes ont été détectées sur les sites Facebook en 10 jours. Au moins deux ont été utilisées pour diffuser des liens viraux et des attaques contre les utilisateurs de Facebook afin d’accéder ou de modifier les informations de leurs comptes.

En raison d’un filtrage JavaScript insuffisant, le premier problème est apparu via une page sur la version mobile de l’API Facebook. L’interface incitait les utilisateurs à publier un message arbitraire sur leur mur. De plus, une deuxième vulnérabilité XSS a été développée en utilisant du HTML dans une page virale pour diffuser des logiciels malveillants sur l’ensemble du site. Plusieurs liens ont rapidement propagé des attaques de phishing, ce qui a attiré l’attention des chercheurs en sécurité, et Facebook a réussi à corriger la vulnérabilité XSS.

Le dernier problème XSS qui a été mis en lumière concernait une page « channel » de Facebook pour la gestion des sessions, où une mise à jour du code a modifié par erreur le comportement de la page. Cependant, une fois que les experts en sécurité s’en sont aperçus, Facebook a immédiatement corrigé la faille.

Détection des vulnérabilités de Cross-Site Scripting

Les raisons de l’apparition des vulnérabilités XSS sont :

  • La validation des entrées n’est pas effectuée.
  • La sortie vers le navigateur n’est pas convertie en entités de caractères HTML.

En général, des outils d’analyse web sont utilisés pour rechercher des vulnérabilités de sécurité dans les applications web. Ces outils automatisés injectent des scripts malveillants dans l’application web, tels que des variables GET ou POST, des URL, des cookies et d’autres codes susceptibles de mener des attaques XSS. Si l’outil réussit à injecter le script dans la page web, le site est exposé aux XSS. Après avoir découvert les vecteurs d’attaque de logiciels malveillants, l’outil notifie l’utilisateur de la vulnérabilité détectée.

Prévention et atténuation des XSS

Le Cross-Site Scripting (XSS) peut constituer une menace sérieuse pour les utilisateurs individuels et les entreprises dont les sites web peuvent être infectés. Dans certains cas, il est difficile de contrer l’attaque. C’est pourquoi vous devez assainir minutieusement toutes les données non fiables pour vous protéger contre les XSS. Pour réduire les risques pour votre application web, ne permettez jamais à votre navigateur de traiter des données reçues en entrée sans les valider.

Les méthodes de prévention spécifiques varient selon le sous-type de vulnérabilité XSS et le contexte d’utilisation des entrées utilisateur. Cependant, certaines mesures générales doivent être prises pour protéger vos utilisateurs contre les attaques XSS et sécuriser votre application web :

Validation

Cette mesure consiste à s’assurer que les entrées sont sûres pour être traitées dans le code et que des données malformées ne peuvent pas endommager un site web, une base de données ou les utilisateurs. En rejetant les requêtes provenant de parties ou sources externes, la validation des entrées empêche les utilisateurs d’entrer des caractères spéciaux dans les champs de saisie des sites web. La validation des entrées prévient les attaques par injection, les fuites de données et la compromission des systèmes.

Encodage

L’encodage est une ligne de défense essentielle contre les XSS. À ce stade, au point où les données contrôlables par l’utilisateur sont émises dans les réponses HTTP, vous encodez la sortie afin que le navigateur l’interprète uniquement comme des données et non comme du code exécutable. Différentes méthodes d’encodage peuvent être nécessaires selon le contexte de sortie, car les navigateurs analysent différemment JavaScript, JS, URL, HTML et CSS.

Définir les indicateurs HttpOnly

Cette méthode de précaution permet d’atténuer les attaques XSS. Si cet indicateur supplémentaire est inclus dans l’en-tête de réponse HTTP, le cookie contenant les informations confidentielles de l’utilisateur ne peut pas être accessible via le script client. Utilisez l’attribut HttpOnly pour empêcher JavaScript de lire le contenu sensible du cookie, rendant ainsi plus difficile pour un pirate de détourner la session et de prendre le contrôle du compte.

Politique de sécurité du contenu

La politique de sécurité du contenu (CSP) est une couche de sécurité supplémentaire conçue pour réduire la gravité des éventuelles vulnérabilités XSS. Cet outil de sécurité du navigateur aide à repousser et à atténuer les XSS et autres attaques côté client.

Analyse régulière

Vous devriez exécuter un scanner de vulnérabilités web robuste sur vos serveurs web pour empêcher que du contenu malveillant soit exécuté par des utilisateurs ou visiteurs non avertis. Les testeurs d’intrusion et les experts en sécurité utilisent régulièrement des outils d’analyse XSS pour l’analyse des applications web.

Tests d’intrusion

Les tests d’intrusion sont une technique de cybersécurité qui adopte la perspective d’un pirate pour identifier les failles des systèmes et atténuer les risques de cybersécurité, permettant aux organisations de combler les lacunes identifiées avant que des pirates malveillants ne les exploitent.

L’analyse de vulnérabilités ne remplace pas les tests d’intrusion. Les testeurs d’intrusion imitent les approches des acteurs malveillants du monde réel, en se concentrant sur les vulnérabilités de sécurité qui ne peuvent pas être identifiées automatiquement.

L’équipe QAwerk est composée de testeurs d’intrusion professionnels qui maîtrisent les outils avancés pour mener des audits de sécurité approfondis et des évaluations de vulnérabilités.

Comment corriger efficacement les erreurs XSS ?

Vous pouvez prendre plusieurs mesures pour corriger votre site web en cas de cross-site scripting :

  • Trouver le code vulnérable. Dans la phase initiale de la récupération après une attaque de cross-site scripting, identifiez l’emplacement de la vulnérabilité.
  • Supprimer le contenu malveillant et les backdoors. Une fois que vous savez où se trouve le logiciel malveillant, vous pouvez supprimer tout contenu malveillant ou données incorrectes de votre base de données et la restaurer dans un état propre avec un outil robuste de suppression de logiciels malveillants. De plus, vous devez analyser le reste de votre site web et des systèmes de fichiers à la recherche de backdoors pour corriger les erreurs existantes et maintenir la réputation de votre site web.
  • Corriger la vulnérabilité. Les auteurs d’attaques exploitent fréquemment les faiblesses des bases de données, des applications et des composants tiers. S’ils représentent un risque réel, ils doivent être corrigés. Une fois que vous avez identifié le logiciel vulnérable, distribuez et appliquez des mises à jour au code vulnérable pour supprimer les vulnérabilités qui ont été signalées.
  • Changer vos identifiants. En cas d’attaque XSS, il est crucial de réinitialiser immédiatement vos mots de passe et secrets d’application avec une politique de mots de passe solide une fois la vulnérabilité corrigée. Assurez-vous qu’il n’y a pas de backdoors ni d’utilisateurs administrateurs malveillants dans la base de données en nettoyant vos données pour prévenir toute réinfection.
  • Mettre en place un WAF. Un élément clé de votre stratégie de sécurité est la mise en place d’un pare-feu d’application web (WAF) puissant pour traiter spécifiquement les XSS en bloquant les requêtes serveur malveillantes vers votre site web qui visent à exfiltrer des données sensibles. Avec un WAF approprié, vous pouvez vous protéger contre les menaces potentielles avant que les correctifs ne soient disponibles.

Conclusion

L’attaque de cross-site scripting exploite les failles de sécurité web en permettant à un acteur malveillant de contourner les mécanismes de sécurité côté client et d’injecter du code JavaScript malveillant dans des sites web par ailleurs inoffensifs. En fonction des fonctionnalités et des données traitées par l’application vulnérable, les vulnérabilités XSS peuvent représenter une menace significative pour les entreprises. En se faisant passer pour une source réputée avec une requête attrayante, les pirates peuvent usurper l’identité des comptes des utilisateurs, observer leur comportement, charger du contenu externe et prendre le contrôle de toutes les sessions web des utilisateurs victimes.

Par conséquent, il est crucial de comprendre où se trouvent les failles de votre système et de prendre des mesures préventives avant qu’une attaque XSS ne nuise gravement au site web et à ses visiteurs. À moins que les variables d’une application web ne passent par un processus de validation, elles constituent une vulnérabilité potentielle. Les approches de protection les plus efficaces pour contrer les attaques XSS sont : l’assainissement des données, la protection des cookies, la suppression des balises HTML des chaînes, l’analyse de vulnérabilités et les tests d’intrusion réguliers par des professionnels.

Améliorez dès maintenant la sécurité de votre application web : l’antisèche ultime sur les XSS

Améliorez dès maintenant la sécurité de votre application web : l’antisèche ultime sur les XSS
Veuillez saisir votre adresse courriel professionnelle n'est pas un courriel professionnel