Toujours utilisé dans les entreprises, le navigateur web de Windows peut se révéler être une véritable faille de sécurité pour les entreprises.

Dans la dernière version d'Internet Explorer 8, les développeurs de Microsoft ont mis en place un filtre XSS supposant améliorer la sécurité du navigateur.

Ce filtre a pour but de détecter et de prévenir certains types d'attaques XSS. Les Cross(X) Site Scripting (XSS), sont des failles de sécurité que l'on trouve plus spécifiquement sur les applications Web. Elle permettent d'exécuter un certain type de code malveillant, généralement en Javascript, dans le but de détourner des informations, de rediriger vers un site maquillé et même dans certains cas, prendre le contrôle total de l'ordinateur de la victime.

Exemple de script

<script>alert(0)</script>_

L'idée donc de ces XSS est de modifier la réponse du serveur web afin de détourner les fonctions du navigateur. La principale parade utilisée pour contrer les attaques XSS sous IE8 une fois détecté, est le remplacement de certains caractères dans la chaîne de code afin de bloquer l'exécution du script.

Exemple de script après filtrage

<sc#ript>alert(0)</script>_

Cela a pour effet de bloquer certains type de XSS en altérant la réponse serveur avant le rendu de la page. Cependant, ce mécanisme de blocage à des effets assez inattendus sous IE8.

Pour commencer, ce mécanisme de filtrage peut permettre à un attaquant de bloquer un contenu bénin sur la page comme par exemple, un code Javascript, en simulant un faux XSS. Ceci est possible, depuis que la chaîne de caractère <script> déclenche l'un des filtres XSS de IE8 lorsque celui-ci est présent en même temps dans la requête et dans la réponse.

Un attaquant peut alors désactiver un script Javascript de sécurité en envoyant un simple GET en paramètre comme ceci

« &foo=<script>._

Autre attaque possible avec le filtre XSS d'IE8. Le remplacement du caractère « = » par un caractère « # », ce qui permet à l'attaquant avec quelques ajustement de créer une seconde commande indépendante.

Imaginons qu'un attaquant puisse injecter du contenu dans un formulaire pour insérer une image par exemple : ‹img alt="x onload=alert(0) x" src="x.png"› _; la fonction alert ne s'exécute pas

Ici l'injection XSS va être filtrer par IE8 ce qui va donner ceci : ‹img alt#"x onload=alert(0) x" src="x.png"› _; la fonction alert fonctionne (si l'image existe)

Dans cet exemple un caractère d'espacement « %20 » à été inséré pour séparer la commande « onload=alert(0) » du reste de l'injection, ce qui permet de l'exécuter comme un nouvel attribut. Pour cette technique, l'attaquant doit obligatoirement déclencher le filtrage d'IE8 afin que celui ci remplace le caractère « = » par « # » quelque part sur la page avant l'injection.

Mais cette simple technique met en avant le contre coup d'une protection mal étudiée qui permet à un attaquant, d'exécuter n'importe quel script Javascript sur l'ordinateur d'une victime et à en prendre le contrôle.

Il est vivement recommandé de mettre à jour très régulièrement IE8 voir d'utiliser un autre navigateur comme par exemple Firefox avec l'extension NoScript.

Pour plus d'information