Le cross-site scripting (abrégé en XSS) est un type de faille de sécurité de sites Internet. Des scripts mal­veil­lants sont in­tro­duits (le terme « injecté » est ha­bi­tuel­le­ment utilisé) dans des sites Web, afin de pouvoir attaquer les systèmes des uti­li­sa­teurs. Les scripts sont des pro­grammes dans des langues de script (Ja­vaS­cript par exemple), qui sont exécutés dans le na­vi­ga­teur d'In­ter­net. Il existe des variantes inof­fen­sives telles que les fenêtres pop-up. Dans le pire des cas, les at­ta­quants (ou pirates) pourront se procurer des in­for­ma­tions sensibles en utilisant ce script ou alors accéder aux or­di­na­teurs des in­ter­nautes dans le plus grand secret.   

Le danger potentiel du cross-site scripting est qu’il peut trans­fé­rer les données des uti­li­sa­teurs au na­vi­ga­teur sans vé­ri­fi­ca­tion. C’est ainsi que des scripts mal­veil­lants peuvent atteindre les clients concernés. A partir de là, les ap­pli­ca­tions peuvent manipuler les scripts côté serveur tels que les for­mu­laires d’ins­crip­tion des uti­li­sa­teurs. Ce processus d’ins­crip­tion semble fonc­tion­ner, l’in­ter­naute le considère comme anonyme et ver­rouille alors les données qui sont trans­fé­rées sans filtre.

Le but de ces attaques ex­ploi­tant une faille XSS n’est pas seulement de voler des données sensibles et de rendre vul­né­rable le client concerné. Ces scripts sont divers et variés. D’un côté, il y a ceux qui font passer les clients pour des pirates in­for­ma­tiques et qui utilisent les tech­niques de ha­me­çon­nage ainsi que des pro­grammes mal­veil­lants. De l’autre côté, on compte ceux qui modifient des sites Internet pour les dis­cré­di­ter. Ces at­ta­quants restent la plupart du temps anonymes.

Exemples de cross-site scripting

Voici une courte liste ac­com­pag­née d’ex­pli­ca­tions sur les dif­fé­rentes sortes de cross-site scripting (XSS). 

cross-site scripting / XSS réfléchi

Un script mal­veil­lant est envoyé à un serveur Web via le char­ge­ment d’une adresse URL manipulée ou via l’envoi d’un for­mu­laire préparé. Ce serveur Web retourne par la suite ce script au client sans vé­ri­fi­ca­tion. Le code mal­veil­lant n’est pas en­re­gis­tré sur le serveur et existe seulement de manière tem­po­raire lors du char­ge­ment de la page Web via le client. Les cibles préférées de ces scripts sont les sites Internet généraux ou les logiciels de mes­sa­ge­rie.

Exemple : le cyber agresseur dissimule son script dans un lien tout préparé. Par la suite, il essaye de le trans­fé­rer (souvent par email). Le code mal­veil­lant se déclenche seulement si l’uti­li­sa­teur clique sur le lien qu’il a reçu. S’il le fait, une page s’affichera, par exemple une imitation de la page d’accueil de sa banque en ligne. Au lieu d’envoyer les données au serveur Web de la banque, le script les transfère à l’adresse que le pirate a dé­ter­mi­née au­pa­ra­vant. 

cross-site scripting / XSS per­sis­tant

Les scripts mal­veil­lants sont en­re­gis­trés sur le serveur Web et livrés au client à chaque char­ge­ment. C’est pour cela que certaines ap­pli­ca­tions Web en par­ti­cu­lier sont plus propices aux cy­be­rat­taques, car elles en­re­gistrent les données des in­ter­nautes côté serveur et les diffusent souvent sans codage. Les sites les plus visés par ces scripts sont les blogs et les forums.  

Exemple : Dans un forum, les posts des uti­li­sa­teurs sont en­re­gis­trés dans une base de données, souvent sans vé­ri­fi­ca­tion. Les at­ta­quants sai­sis­sent cette op­por­tu­nité pour ajouter des posts com­por­tant des scripts mal­veil­lants. Par la suite, les uti­li­sa­teurs in­sou­ciants reçoivent ce lien par email ou alors arrivent par hasard sur le post en question et cliquent dessus.

Cross-site scripting / XSS basé sur le DOM

Ce type d’attaque est aussi appelé XXS local. En chargeant une de ces adresses URL ma­ni­pu­lées, un code malicieux est exécuté sans vé­ri­fi­ca­tion grâce à une faille présente dans un script côté client. Au contraire des XXS per­sis­tants et réfléchis, le serveur Web n’a ici pas sa place dans le processus. Cette variante de script porte également atteinte aux sites Web statiques, qui prennent ce langage de script en charge.

Exemple : le script basé sur le DOM fonc­tionne comme les cross-site-scrip­tings réfléchis : l’uti­li­sa­teur ouvre un lien. Après avoir cliqué dessus, un script lit la valeur d’argument de l’URL et exécute le code de script qu’il contient. C’est ainsi que les cookies de session par exemple sont volés.

Comment se protéger des attaques XSS

Les uti­li­sa­teurs et les ad­mi­nis­tra­teurs de sites ne peuvent sous-estimer les con­sé­quences néfastes que le cross-site scripting peut avoir. D’un côté, les uti­li­sa­teurs risquent de perdre leurs données et servent de complices aux at­ta­quants. De l’autre côté, les ad­mi­nis­tra­teurs de sites sont res­pon­sables des données de leurs clients / visiteurs et sont donc également concernés par ces attaques. Les contenus mal­veil­lants ainsi que les pannes de serveurs diminuent le nombre de visites, ce qui peut à long terme avoir un impact négatif sur le clas­se­ment dans les moteurs de re­cherches. Par ailleurs, la relation de confiance entre l’uti­li­sa­teur et le site Internet est com­pro­mise ce qui peut également mener à des pertes fi­nan­cières. En tant qu’ad­mi­nis­tra­teur de site Web mais aussi en tant qu’uti­li­sa­teur, il convient de prendre des mesures pour prévenir ces failles de sécurité de type cross-site scripting.

Mesures de pré­ven­tion pour les in­ter­nautes

La meilleure des façons pour prévenir un cross-site scripting côté client est de dé­sac­ti­ver le support de Ja­vaS­cript dans votre na­vi­ga­teur. En faisant cela, les XSS basés sur le DOM qui visent Ja­vaS­cript n’ont aucun effet, étant donné que l’ap­pli­ca­tion ma­li­cieuse n’est pas démarrée. Pour certains na­vi­ga­teurs, il existe des modules qui per­met­tent de prévenir ces attaques XXS. Firefox par exemple dispose de l’extension NoScript. Par défaut, tous les contenus actifs des sites Internet tels que Ja­vaS­cripts, Java-Applets, Adobe Flash ou Microsoft Sil­ver­light y sont au­to­ma­ti­que­ment bloqués. Il est possible de lever ce blocage tem­po­rai­re­ment ou de les mettre en liste blanche si vous êtes sûr et certain de leur fiabilité. Malgré le danger que présente le cross-site scripting, il faut être sceptique à l’égard de  données externes telles que les liens et bien les vérifier avant de les utiliser.

Les mesures à prendre pour se protéger des attaques XSS

Pour protéger vos ap­pli­ca­tions Web d’attaques XSS, il vous faut con­si­dé­rer que tous les éléments Internet ne sont pas sécurisés. Il faut les vérifier avant que le serveur Web ne puisse les recevoir. La méthode la plus sûre est de l’insérer sur une liste blanche (comme dans le module de na­vi­ga­teur NoScript). Le fait de scanner les res­sources arrivant sur votre site Internet et d’autoriser l’accès seulement aux contenus fiables constitue un excellent moyen de pro­tec­tion contre le type de faille de sécurité cross-site scripting.

En plus de ces données entrantes, il faut penser à sécuriser les données sortantes. Il est pour cela né­ces­saire de remplacer les ca­rac­tères spéciaux HTML qui posent problème par leurs référents. Ainsi, ces éléments sont in­ter­pré­tés comme normaux et les scripts mal­veil­lants ne peuvent démarrer.  La plupart des langages de pro­gram­ma­tion et de script tels que Perl, Ja­vaS­cript ou PFP disposent de fonctions déjà pré­dé­fi­nies pour subs­ti­tuer ou masquer ces ca­rac­tères que vous utilisez sans le savoir. Vous pouvez également vous défendre contre ces attaques XSS aussi en utilisant des pare-feu.

Le cross-site scripting est souvent considéré comme une première étape dans les attaques plus graves, qui peuvent com­pro­mettre la pro­tec­tion complète des données entrantes et sortantes de votre serveur Web.

Aller au menu principal