XSS

XSS

Cross-site scripting

Le cross-site scripting, abrégé XSS, est un type de faille de sécurité des sites Web, que l'on trouve typiquement dans les applications Web qui peuvent être utilisées par un attaquant pour faire afficher des pages web contenant du code douteux. Il est abrégé XSS pour ne pas être confondu avec le CSS (feuilles de style)[1], X étant une abréviation commune pour « cross » (croix) en anglais.

Le terme cross-site scripting n'est pas une description très précise de ce type de vulnérabilité. Mark Slemko, pionnier du XSS, en disait[2]

« Le problème n'est pas simplement le 'scripting', et il n'y a pas forcément quelque chose entre plusieurs sites. Alors pourquoi ce nom ? En fait, le nom a été donné quand le problème était moins bien compris, et c'est resté. Croyez-moi, nous avions des choses plus importantes à faire que de réfléchir à un meilleur nom. »

Le principe est d'injecter des données arbitraires dans un site web, par exemple en déposant un message dans un forum, mais aussi par des paramètres d'URL, etc. Si ces données arrivent telles quelles dans la page web transmise au navigateur (par les paramètres d'URL, un message posté, etc.) sans avoir été vérifiées, alors il existe une faille : on peut s'en servir pour faire exécuter du code malveillant en langage de script (du JavaScript le plus souvent) par le navigateur web qui consulte cette page.

Pour vérifier la présence d'une faille XSS, il suffit de faire passer un script, par exemple :

<script type="text/javascript">alert('bonjour')</script>

qui provoquera l'affichage d'une boîte de dialogue.

Sommaire

Les risques

L'exploitation d'une faille de type XSS permettrait à un intrus de réaliser les opérations suivantes :

  • Redirection (parfois de manière transparente) de l'utilisateur.
  • Vol d'informations, par exemple sessions et cookies.
  • Actions sur le site faillible, à l'insu de la victime et sous son identité (envois de messages, suppression de données, etc.)
  • Plantage de la page (boucle infinie d'alertes par exemple), et souvent du navigateur.

Une faille de type XSS est à l'origine de la propagation des virus Samy[3] sur MySpace en 2005 ainsi que de Yamanner sur Yahoo! Mail en 2006.

Types de failles XSS

Il y a trois types de failles XSS

Premier type

Ce type de faille XSS, qui est dit « basé sur DOM » ou « local », est connu de longue date. Un article récent[4] définit bien ses caractéristiques. Dans ce cas de figure, le problème est dans le script d'une page côté client. Par exemple, si un fragment de JavaScript accède à un paramètre d'une requête d'URL, et utilise cette information pour écrire du HTML dans sa propre page, et que cette information n'est pas encodée sous forme d'entités HTML, alors il y a probablement une vulnérabilité de type XSS. Les données écrites seront réinterprétées par le navigateur comme du code HTML contenant éventuellement un script malicieux ajouté.

En pratique la manière d'exploiter une telle faille sera similaire au type suivant, sauf dans une situation très importante. À cause de la manière dont Internet Explorer traite les scripts côté client dans des objets situés dans la « zone locale » (par exemple le disque dur local du client), une faille de ce type peut conduire à des vulnérabilités d'exécution à distance. Par exemple, si un attaquant héberge un site web « malicieux » contenant un lien vers une page vulnérable sur le système local du client, un script peut être injecté et tournera avec les droits du navigateur web de l'utilisateur sur ce système. Ceci contourne complètement le « bac à sable », pas seulement les restrictions inter-domaines qui sont normalement contournées par les XSS.

Second type

Ce type de trou de sécurité, qu'on peut qualifier de « non permanent », est de loin le plus commun.

Il apparaît lorsque des données fournies par un client web sont utilisées telles quelles par les scripts du serveur pour produire une page de résultats. Si les données non vérifiées sont incluses dans la page de résultat sans encodage des entités HTML, elles pourront être utilisées pour injecter du code dans la page dynamique reçue par le navigateur client.

Un exemple classique dans les moteurs de recherche des sites : si l'on recherche une chaîne qui contient des caractères spéciaux HTML, souvent la chaîne recherchée sera affichée sur la page de résultat pour rappeler ce qui était cherché, ou dans une boîte de texte pour la réédition de cette chaîne. Si la chaîne affichée n'est pas encodée, il y a une faille XSS.

À première vue, ce n'est pas un problème grave parce que l'utilisateur peut seulement injecter du code dans ses propres pages. Cependant, avec un peu d'ingénierie sociale, un attaquant peut convaincre un utilisateur de suivre une URL piégée qui injecte du code dans la page de résultat, ce qui donne à l'attaquant tout contrôle sur le contenu de cette page. L'ingénierie sociale étant requise pour l'exploitation de ce type de faille (et du précédent), beaucoup de programmeurs ont considéré que ces trous n'étaient pas très importants. Cette erreur est souvent généralisée aux failles XSS en général.

Troisième type

Ce type de vulnérabilité, aussi appelé faille permanente ou du second ordre permet des attaques puissantes. Elle se produit quand les données fournies par un utilisateur sont stockées sur un serveur (dans une base de données, des fichiers, ou autre), et ensuite réaffichées sans que les caractères spéciaux HTML aient été encodés.

Un exemple classique est celui des forums, où les utilisateurs peuvent poster des textes formatés avec des balises HTML. Ces failles sont plus importantes que celles d'autres types, parce qu'un attaquant peut se contenter d'injecter un script une seule fois et atteindre un grand nombre de victimes sans recourir à l'ingénierie sociale.

Il y a diverses méthodes d'injection, qui ne nécessitent pas forcément que l'attaquant utilise l'application web elle-même. Toutes les données reçues par l'application web (par email, journaux, etc.) qui peuvent être envoyées par un attaquant doivent être encodées avant leur présentation sur une page dynamique, faute de quoi une faille XSS existe.

Éviter la faille

Plusieurs techniques permettent d'éviter le XSS :

  • Retraiter systématiquement le code HTML produit par l'application avant l'envoi au navigateur ;
  • Filtrer les variables affichées ou enregistrées avec des caractères '<' et '>' (en cgi comme en PHP). De façon plus générale, donner des noms préfixés par exemple par "us" (user string) aux variables contenant des chaînes venant de l'extérieur pour les distinguer des autres, et ne jamais utiliser aucune des valeurs correspondantes dans une chaîne exécutable (en particulier SQL !) sans filtrage préalable.
  • En PHP :
    • utiliser la fonction htmlspecialchars() qui filtre les '<' et '>' (c.f. ci-dessus) ;
    • utiliser strip_tags() qui supprime les balises.
  • Utiliser de façon propre les balises HTML <noscript></noscript>.

Il existe des bibliothèques qui permettent de filtrer efficacement du contenu balisé issu de l'utilisateur (systèmes de publication).

Par ailleurs, il est également possible de se protéger des failles de type XSS à l'aide d'équipements réseaux dédiés tels que les pare-feux applicatifs. Ces derniers permettent de filtrer l'ensemble des flux HTTP afin de détecter les requêtes suspectes.

Références

Pierre Gardenat, "XSS, de la brise à l'ouragan", in Actes de la Conférence SSTIC 2009, en ligne : [1], consulté le 26 juin 2009.

  1. (en) Steven Champeon, « XSS, Trust, and Barney (Reprinted from Webmonkey) » sur hesketh.com, mai 2000. Consulté le 25 août 2008
  2. (en) Cross Site Scripting Info sur The Apache HTTP Server Project, février 2000. Consulté le 25 août 2008
  3. (en) http://namb.la/popular/tech.html : explication et source du ver
  4. DOM-Based cross-site scripting

Voir aussi

Articles connexes

Liens externes

  • Xssed.com, site de référencement des failles XSS
  • Portail de la sécurité informatique Portail de la sécurité informatique
Ce document provient de « Cross-site scripting ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article XSS de Wikipédia en français (auteurs)

Игры ⚽ Нужен реферат?

Regardez d'autres dictionnaires:

  • XSS — (англ. Сross Site Sсriрting «межсайтовый скриптинг») тип уязвимости компьютерной системы, используется при хакерской атаке. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера, они используют уязвимый сервер в… …   Википедия

  • Xss — (англ. Сross Site Sсriрting «межсайтовый скриптинг») тип уязвимости компьютерной системы, используется при хакерской атаке. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера, они используют уязвимый сервер в… …   Википедия

  • XSS-11 — XSS 11 (Experimental Satellite System 11) war ein kleiner, militärischer Experimentalsatellit, der vom Air Force Research Laboratory der US Air Force entwickelt wurde, um autonome Annäherungsoperationen an andere Raumflugkörper zu erproben.… …   Deutsch Wikipedia

  • XSS-10 — Satellit XSS 10 (Experimental Satellite System 10) war ein kleiner, militärischer Experimentalsatellit, der vom Air Force Research Laboratory der US Air Force entwickelt wurde, um Annäherungsoperationen an andere Raumflugkörper zu erproben.… …   Deutsch Wikipedia

  • XSS 11 — XSS 11 (Experimental Satellite System 11, auch als USA 165 bezeichnet[1]) war ein kleiner, militärischer Experimentalsatellit, der vom Air Force Research Laboratory der US Air Force entwickelt wurde, um autonome Annäherungsoperationen an… …   Deutsch Wikipedia

  • XSS 10 — Satellit XSS 10 (Experimental Satellite System 10) war ein kleiner, militärischer Experimentalsatellit, der vom Air Force Research Laboratory der US Air Force entwickelt wurde, um Annäherungsoperationen an andere Raumflugkörper zu erproben.… …   Deutsch Wikipedia

  • XSS — may refer to*Cross site scripting (XSS) a computer security vulnerability *XSS 11 the Experimental Satellite System 11, a spacecraft …   Wikipedia

  • XSS — steht für: Cross Site Scripting den Satelliten XSS 10 den Satelliten XSS 11 Diese Seite ist eine Begriffsklärung zur Unterscheidung mehrerer mit demselben Wort bezeichneter Begriffe …   Deutsch Wikipedia

  • XSS — (Cross Site Scripting) tipo de vulnerabilidad surgida como consecuencia de errores de filtrado de las entradas del usuario en aplicaciones web. Se trata de usar diversas técnicas para inyectar código de marcas (HTML), código ejecutable en la… …   Enciclopedia Universal

  • XSS 11 — Template:Infobox Spacecraft Name = XSS 11 Caption = XSS 11 computer model Organization = AFRL Major Contractors = Lockheed Martin Bus = Mission Type = Technology demonstrator Flyby Of = Satellite Of = Earth Orbital Insertion Date = Orbits = Decay …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”