Une attaques de type cross-site scripting consiste à amener un navigateur web à exécuter un code malveillant.
Cet article s'articule autour des points suivants :
Contenu associé
Qu'est-ce que la sécurité des applications web ?
Falsification de requêtes intersites
Attaque par force brute
Attaque par débordement de tampon (buffer overflow)
Tout savoir sur la SQL injection
Abonnez-vous à theNET, le récapitulatif mensuel de Cloudflare des idées les plus populaires concernant Internet !
Copier le lien de l'article
Le cross-site scripting (XSS) est un exploit dans lequel l'attaquant attache du code sur un site web légitime qui s'exécutera lorsque la victime chargera le site web. Ce code malveillant peut être inséré de plusieurs façons. Le plus souvent, il est soit ajouté à la fin d'une url, soit affiché directement sur une page qui affiche du contenu généré par l'utilisateur. En termes plus techniques, le cross-site scripting est une attaque par injection de code côté client.
Le code côté client est un code JavaScript qui s'exécute sur la machine d'un utilisateur. En ce qui concerne les sites web, le code côté client est généralement un code exécuté par le navigateur web après le chargement d'une page web par le navigateur. Il diffère du code côté serveur, qui est exécuté sur le serveur web de l'hôte. Le code côté client est très utile pour les pages web interactives ; le contenu interactif s'exécute plus rapidement et de manière plus fiable puisque l'ordinateur de l'utilisateur n'a pas à communiquer avec le serveur web à chaque fois qu'il y a une interaction. Les jeux par navigateur sont l'une des plateformes les plus populaires pour le code côté client, car ce dernier peut garantir le bon fonctionnement du jeu, quels que soient les problèmes de connectivité.
Le code qui s'exécute côté client est très populaire dans le développement web moderne et est utilisé sur la plupart des sites web modernes. Comme le code inter-site est un élément de base du web moderne, le cross-site scripting sont devenus l'une des vulnérabilités de cybersécurité les plus fréquemment signalées, et les attaques par cross-site scripting ont touché des sites majeurs tels que YouTube, Facebook et Twitter.
Un exemple utile d'attaque par cross-site scripting est couramment observé sur les sites web dont les forums de commentaires restent non validés. Dans ce cas, un pirate publie un commentaire composé de code exécutable enveloppé dans des balises "<script></script>". Ces balises indiquent à un navigateur web d'interpréter tout ce qui se trouve entre les balises comme du code JavaScript. Une fois ce commentaire sur la page, lorsqu'un autre utilisateur charge ce site web, le code malveillant entre les balises de script est exécuté par son navigateur web, et il devient victime de l'attaque.
Les attaques de script intersites en JavaScript sont populaires parce que JavaScript a accès à certaines données sensibles qui peuvent être utilisées pour usurper l'identité et à d'autres fins malveillantes. Par exemple, JavaScript a accès à des cookies*, et un pirate pourrait utiliser une attaque XSS pour voler les cookies d'un utilisateur et se faire passer pour lui en ligne. JavaScript peut également créer des requêtes HTTP, qui peuvent être utilisées pour renvoyer des données (telles que des cookies volés) au pirate. En outre, le JavaScript côté client peut également aider un pirate à accéder à des API qui contiennent des coordonnées de géolocalisation, des données de webcam et d'autres informations sensibles.
Voici un flux d'attaque de cross-site scripting typique :
*Les cookies sont des identifiants de connexion temporaires enregistrés sur l'ordinateur d'un utilisateur. Par exemple, lorsqu'un utilisateur se connecte à un site comme Facebook, le site lui attribue un cookie de sorte que s'il ferme la fenêtre du navigateur et retourne sur Facebook plus tard dans la journée, il est automatiquement authentifié par le cookie et n'a pas besoin de se connecter à nouveau.
Les deux types d'attaques par cross-site scripting les plus populaires sont le cross-site scripting reflété et le cross-site scripting persistant.
Il s'agit de l'attaque de cross-site scripting la plus courante. Dans le cas d'une attaque réfléchie, un code malveillant est ajouté à la fin de l'url d'un site web ; c'est souvent un site web légitime et de confiance. Lorsque la victime charge ce lien dans son navigateur web, celui-ci exécute le code injecté dans l'url. Le pirate utilise généralement une forme d'ingénierie sociale pour amener la victime à cliquer sur le lien.
Par exemple, un utilisateur peut recevoir un courriel d'apparence légitime qui prétend provenir de sa banque. Ce courriel lui demandera de prendre des mesures sur le site web de la banque et lui fournira un lien. Le lien peut se présenter sous la forme suivante :
http://legitamite-bank.com/index.php?user=&script> voici un mauvais code ! </script>
Bien que la première partie de l'url semble sûre et contienne le domaine d'un site web de confiance, le code injecté à la fin de l'url peut être malveillant.
Cela se produit sur des sites qui permettent aux utilisateurs de publier du contenu que d'autres utilisateurs verront, comme un forum de commentaires ou un site de médias sociaux, par exemple. Si le site ne valide pas correctement les apports de contenu généré par l'utilisateur, un pirate peut insérer du code que les navigateurs des autres utilisateurs exécuteront au chargement de la page. Par exemple, un pirate peut aller sur un site de rencontres en ligne et mettre quelque chose de ce genre dans son profil :
« Salut ! Je m'appelle Dave, j'aime les longues promenades sur la plage et <script>code malveillant ici</script> »
Tout utilisateur qui tente d'accéder au profil de Dave sera victime de son attaque de type cross-site scripting persistante.
Il n'existe pas de stratégie unique pour atténuer les effets de cross-site scripting, et différents types d'applications web nécessitent différents niveaux de protection. Un certain nombre de mesures de protection peuvent être prises, nous en présentons quelques-unes ci-dessous.
Si possible, éviter le HTML dans les entrées - Un moyen très efficace d'éviter les attaques de type cross-site scripting persistantes est d'empêcher les utilisateurs de poster du HTML dans les données des formulaires. Il existe d'autres options qui permettent aux utilisateurs de créer un contenu riche sans utiliser le HTML, comme le markdown et les éditeurs WYSIWYG.
Validation des entrées - La validation consiste à mettre en œuvre des règles qui empêchent un utilisateur de poster des données dans une forme qui ne répond pas à certains critères. Par exemple, une entrée qui demande le "Nom de famille" de l'utilisateur doit être soumise à des règles de validation qui ne permettent à l'utilisateur que de soumettre des données composées de caractères alphanumériques. Les règles de validation peuvent également être définies de manière à rejeter les balises ou les caractères couramment utilisés dans le cross-site scripting, tels que les balises "".
Assainissement des données - L'assainissement des données est similaire à la validation, mais il a lieu après que les données ont déjà été publiées sur le serveur web, mais avant qu'elles ne soient affichées à un autre utilisateur. Il existe plusieurs outils en ligne qui peuvent assainir le HTML et filtrer toute injection de code malveillant.
Mesures de sécurité pour les cookies - Les applications web peuvent également définir des règles spéciales pour la gestion des cookies, ce qui peut limiter le vol de cookies par des attaques de cross-site scripting. Les cookies peuvent être liés à des adresses IP particulières de sorte que les pirates de cross-site scripting ne puissent pas y accéder. En outre, des règles peuvent être créées pour empêcher le JavaScript d'accéder aux cookies.
Définition des règles de WAF - Un WAF peut également être configuré pour faire appliquer des règles qui empêcheront le "cross-site scripting" réfléchi. Ces règles WAF utilisent des stratégies qui bloquent les requêtes suspectes adressées au serveur, y compris les attaques de type "cross-site scripting". Le WAF de Cloudflare offre une installation clé en main et protège les applications web contre le cross-site scripting, les attaques DDoS, l'injection SQL et d'autres menaces courantes.