Introduction
Le Cross Site Scripting (CSS) est une attaque qui est rarement prise au sérieux par les non-initiés.
En effet, à la différence de nombreuses techniques de piratage, celle-ci ne s'attaque pas à un serveur
mais à l'internaute via une faille au niveau d'un serveur Web ou d'une application Web.
Le principe
Il est plus simple d'expliquer cette faille par l'exemple. Soit le site www.unsitecomplice.fr,
le moyen de vérifier s'il est vulnérable à une attaque de type CSS est de demander l'affichage d'une page
inexistante. La particularité du nom de cette page est le fait qu'il contient des balises HTML :
http://www.unsitecomplice.fr/<B>nimportequoi</B>.html
Le site renvoie une page du type :
Erreur la page nimportequoi.html est introuvable.
Le site est bien vulnérable puisqu'il a renvoyé une page contenant le nom du fichier introuvable mais surtout
parce que les balises HTML sont conservées. Le navigateur interprète donc le code HTML
(ici les balises mettent simplement le texte en gras).
Les conséquences possibles
Les conséquences semblent anodines au premier abord. Mais le CSS est exploitable de la manière suivante.
Un pirate va envoyer un mail en HTML à sa victime. Ce mail comporte un lien sur un site vulnérable
à un CSS que la victime a pour habitude de visiter. Les conséquences deviennent graves à partir du moment où le
code HTML passé dans l'URL permet l'exécution de Javascript (balise <SCRIPT>) sur la machine de l'utilisateur.
Effectivement, le pirate connaissant bien le Javascript peut facilement récupérer le cookie de la victime utilisé sur ce
même site. La gravité croît alors avec la sensibilité des informations contenues dans le cookie (authentification, identificateur
de session, ...)
Le CSS est une technique déclinable pour les applications Web, cette attaque fonctionne dès que l'application
restitue dans un message le nom d'un fichier ou d'un paramètre présent dans une URL sans prendre en compte l'éventuelle
présence de balises HTML.
Comment éviter ce type de faille
Chaque élement de l'URL subissant un traitement doit obligatoirement être filtré afin d'ôter toutes les balises HTML. Une
simple transformation peut suffir pour les rendre inexécutables (par exemple le caractère < est remplacé par &lt; que le navigateur
affiche bien < mais sans l'interpréter).
|