Definition

Cross-site scripting (XSS)

Le cross-site scripting (XSS) ou script intersites est une attaque par injection de script dans une application Web qui accepte les entrées mais sépare mal les données du code exécutable avant de renvoyer ces entrées vers le navigateur d'un utilisateur.

Comme dans toute attaque par injection, XSS exploite le fait que les navigateurs ne différencient pas les balises valides de celles du pirate et se contentent d'exécuter ce qu'ils reçoivent.

L'attaque contourne la règle de l'origine commune, cette mesure de sécurité qu'utilisent les langages de programmation Web tels que JavaScript et Ajax. Pour simplifier, cette règle veut que tous les éléments d'une page Web proviennent d'une même source. Lorsqu'elle n'est pas appliquée, un pirate peut injecter un script et modifier la page Web à ses propres fins. Il pourra par exemple récupérer des données qui lui serviront à se faire passer pour un utilisateur authentifié ou introduire un code malveillant que le navigateur exécutera ensuite. 

Un certain nombre de contrôles de sécurité permettent, lorsqu'ils sont utilisés ensemble, de réduire voire d'écarter entièrement la menace du cross-site scripting :

  • La validation des données en entrée vérifie que la saisie de l'utilisateur correspond au format attendu. Par exemple, un script de navigateur n'a pas sa place dans un champ de numéro de téléphone.
  • La politique de sécurité du contenu restreint les scripts pouvant être exécutés ou chargés sur une page Web. 
  • Le codage en sortie indique au navigateur que certains caractères qu'il va recevoir sont à traiter comme du texte à afficher plutôt que du code exécutable.

Une page Web standard contient de nombreux contextes, dont : le corps HTML, l'attribut HTML, le script et la feuille de style CSS. Chacun de ces contextes de sortie repose sur des codages de caractères différents pour empêcher l'exécution des données utiles d'un script malveillant. De nombreux langages Web et frameworks proposent des moteurs de modèles capables de définir automatiquement le contexte de sortie des données variables à inclure dans la page Web finale.

La validation des entrées selon une liste noire, technique notamment utilisée par les pare-feu d'application Web, n'est pas une solution fiable pour empêcher les attaques par injection de script. Par nature, les listes noires sont une réponse sécuritaire formulée a posteriori qui dépend de listes souvent obsolètes et incomplètes.

Si les politiques de codage en sortie et de sécurité du contenu constituent la solution la plus efficace aux problèmes que posent les attaques XSS, elles ont leurs limites : il faut définir correctement le codage en sortie pour le contexte de sortie attendu et configurer les politiques CSP de manière à les rendre aussi restrictives que possible.

Cette définition a été mise à jour en août 2016

Pour approfondir sur Menaces, Ransomwares, DDoS