| S . G . D . S . N Agence nationale de la sécurité des systèmes d'information |
![]() |
Paris, le 14 septembre
2010 No CERTA-2002-INF-001-001 |
Affaire suivie par :
CERTA
Objet : Vulnérabilité de type
« Cross Site Scripting »
| Conditions d'utilisation de ce document : | http://www.certa.ssi.gouv.fr/certa/apropos.html |
| Dernière version de ce document : | http://www.certa.ssi.gouv.fr/site/CERTA-2002-INF-001 |
Une gestion de version détaillée se trouve à la fin de ce document.
Le terme anglais Cross Site Scripting est abrégé en XSS car l'acronyme CSS est déjà utilisé dans le monde du web pour Cascading Style Sheet.
Depuis, leur exploitation s'est diversifiée et concerne toutes sortes de services (webmails, enchères en ligne, forums...).
Beaucoup de logiciels ont été touchées par cette vulnérabilité dont les plus connus sont les serveurs web IIS et Apache, les serveurs d'applications IBM Websphere et Tomcat mais aussi les nombreux gestionnaires de contenus (CMS), de forum, les outils de statistiques (phpMyVisites, AwStats), le relais mandataire Squid...
Dans ce cas, un serveur web propose un formulaire de recherche à ses visiteurs. Les mots-clefs entrés pour la recherche sont souvent renvoyés à l'internaute dans des messages de la forme (pour une recherche avec le mot CERTA) :
14 documents trouvés pour la recherche de CERTA.
Un site vulnérable à l'injection de code indirecte ne filtre pas les données entrées par le visiteur avant de les lui retourner. Donc l'insertion dans le formulaire de la chaîne de caractères :
<script>alert('Ce serveur est vulnérable !')</script>
retournera cette séquence JavaScript au navigateur de l'internaute qui l'interprètera en ouvrant une fenêtre avec le message : Ce serveur est vulnérable !
L'exploitation malveillante ne se contente évidemment pas de cet affichage bénin.
Plus généralement, toute entrée par formulaire et toute variable présente dans une adresse réticulaire (URL) peuvent servir à une attaque par injection de code indirecte.
Lorsqu'un serveur web génère un message d'erreur à partir de l'adresse réticulaire qu'il a reçue, sans avoir au préalable pris la précaution de l'analyser, il est également vulnérable à cette faille.
Prenons le cas d'un serveur ayant pour nom d'hôte www.exemple.tld, sur lequel l'internaute cherche la page xxx. Si ce serveur ne trouve pas la page demandée, il retourne une réponse du type :
Erreur 404 : Page xxx non trouvée.
Imaginons qu'un utilisateur malintentionné crée sur un site web (ou dans un courriel) une page HTML contenant le lien hypertexte suivant :
<a href="http://www.exemple.tld/<script>alert('Ce serveur est vulnérable !')
</script>''> Texte incitant le visiteur (ou le destinataire) à cliquer</a>}.
Le visiteur répondant à l'incitation envoye l'URL du champ href au serveur www.exemple.tld. Ce dernier cherchera alors le fichier <script>alert('Ce serveur est vulnérable !')</script> qu'il ne trouvera pas. Il renverra donc une réponse d'erreur 404 contenant le script (inoffensif dans ce cas) qui aura pour effet d'afficher une fenetre avec le texte : Ce serveur est vulnérable !
Cette vulnérabilité était présente sur le serveur web Microsoft IIS version 4.0 et version 5.0 (voir avis de sécurité CERTA-2000-AVI-035 du CERTA).
Un serveur web est chargé d'afficher les courriels au format HTML contenus dans la boîte aux lettres d'un utilisateur (webmail). L'authentification de l'utilisateur est réalisée au moyen de cookies d'identification envoyés par le serveur web. Si le serveur est vulnérable, un utilisateur malintentionné peut, par le biais d'un courriel astucieusement écrit, récupérer le cookie d'identification envoyé par le serveur web.
Le courriel envoyé par l'utilisateur malintentionné est de la forme :
sujet : du texte anodin
corps : du texte anodin
<\textarea>
<script>un script qui récupère le cookie d'identification</script>
En lisant ce courriel à travers les pages créées par le serveur, la victime n'a pas connaissance du texte se trouvant après la balise <\textarea> qui est alors considéré comme du code HTML. L'emploi de la balise <script> permet l'exécution d'un code qui sera interprété par le navigateur.
De même les commentaires ajoutés à des billets dans des blogs sont propices à ce type d'injection.
L'interdiction du HTML ou le contrôle strict de celui-ci dans ces messages et ces commentaires réduisent les possibilités d'attaques.
Si le langage JavaScript est utilisé, il est alors possible :
Les risques liés à cette vulnérabilité sont donc nombreux : déni de service de la machine victime, utilisation de la machine victime à des fins malveillantes, récupération de données personnelles.
Pour contrer les attaques basées sur l'injection de code indirecte, il convient donc de filtrer ces données :
La surveillance des journaux de connexion et des journaux d'interrogation des bases de données (sites dynamiques) peut indiquer des tentatives et des réussites d'exploitation de ces vulnérabilités.
Il est recommandé à l'internaute :
http://www.certa.ssi.gouv.fr/site/CERTA-2004-INF-001
http://www.certa.ssi.gouv.fr/site/CERTA-2000-AVI-035
http://www.certa.ssi.gouv.fr/site/CERTA-2000-REC-001
http://www.cert.org/advisories/CA-2000-02.html