XML-Sicherheit, Teil 1: XXE-Angriffe, zum ersten!
XML wird meist für den Austausch von Daten verwendet. Werden die XML-Daten vor der Verarbeitung nicht geprüft, kann ein Angreifer darüber eigenen XML-Code einschleusen. Meist kommt es dann zu XML External Entity (XXE) Angriffen, die in den aktuellen OWASP Top 10 einen eigenen Eintrag haben: Sie stehen auf Platz 4. Aber auch andere Angriffe sind über XML möglich.
OWASP Top 10, 2017, Platz 4: XML External Entities (XXE)
XML External Entity (XXE) Angriffe sind möglich, wenn XML-Daten von einem XML-Prozessor verarbeitet werden, der eine External Entity auflöst.
Eine External Entity erlaubt den Zugriff auf lokale oder entfernte Daten über einen deklarierten System-Identifier. Diese Identifier sind im Allgemeinen ein URL, auf den der XML-Prozessor beim Verarbeiten der XML-Daten zugreifen kann. Die External Entity wird dann durch den Inhalt des dereferenzierten URL ersetzt.
Ein Angreifer kann den System-Identifier so manipulieren, dass darüber auf vertrauliche Daten zugegriffen oder anderweitig Schaden angerichtet wird. Unter Umständen bis zur Ausführung eingeschleusten Codes, wenn über den XXE-Angriff eine entsprechende Schwachstelle ausgenutzt werden kann.
Voraussetzungen für einen Angriff
Für einen Angriff müssen verschiedene Bedingungen erfüllt sein:
- Der Angreifer muss seinen Code in den System-Identifier-Teil einer External Entity in der DTD einfügen können.
- Der XML-Prozessor muss so konfiguriert sein, dass er die DTD verarbeitet und auswertet.
- Der XML-Prozessor muss so konfiguriert sein, dass er External Entities in der DTD auflöst.
Einige Beispiele für XXE-Angriffe
Dateien ausspähen
Ein einfaches Beispiel für einen XXE-Angriff ist das Ausspähen
der Datei /etc/passwd
(auch wenn diese Datei schon lange keine
Passwörter mehr enthält stellt sie weiterhin ein gutes Beispiel
für das Ausspähen sensibler Informationen dar):
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo>
Beim Auswerten der Daten holt der XML-Prozessor den Inhalt der Datei
/etc/passwd
und fügt ihn an Stelle von
&xxe;
ein. Genau so, wie er es auch tun soll.
Schwachstellen in Parsern ausnutzen
Über XXE können aber auch Schwachstellen in den XML-Parsern ausgenutzt werden. Einige Beispiele dafür hat z.B. Willis Vandevanter auf der Black Hat USA 2015 vorgetellt: "Exploiting XXE Vulnerabilities in File Parsing Functionality" (Website dazu).
Aber nicht in irgendwelchen x-beliebigen, sondern in denen für Dateien
im Office Open XML (OPENXML, OOXML, OXML) Format von Microsoft (Dateiendung
*.docx
, *.pptx
, *.xlsx
). Diese
Dateien sind ZIP-Archive, die eine XML-Datei und Media-Dateien enthalten.
Er hat in den Parsern verschiedene Schwachstellen entdeckt, die XXE Angriffe möglich machen. Einschließlich der Möglichkeit, über die Verwendung eine Externen DTD Server-Side Request Forgery (SSRF) Angriffe durchzuführen:
- In der Java-Library Apache POI war das Lesen beliebiger Dateien (CVE-2014-3529)
- und die Durchführung von DoS-Angriffe (CVE-2014-3574) möglich.
- In der Ruby-Library Nokogiri waren SSRF-Angriffe (CVE-2012-6685, Info)
- und ebenfalls DoS-Angriffe (CVE-2014-3660) möglich.
Für die Suche nach XXE-Schwachstellen hat Willis Vandevanter ein Tool entwickelt, mit dem sich XXE/XML-Exploits in verschiedene Dateitypen einfügen lassen: oxml_xxe.
Außerdem hat er noch auf eine Stolperfalle beim Schutz vor Angriffen hingewiesen: Die Libraries, die XML-Dateien irgendwo auf dem Server verarbeiten, müssen nicht die gleichen sein, die hochgeladene Dateien zur Prüfung parsen. Unter Umständen werden beim Prüfen des Uploads Angriffe nicht erkannt, die erst bei der späteren Verarbeitung durch eine andere Library aktiv werden.
Schwachstellen beim Upload
Schwachstellen in File-Parsern sind schlecht. Noch schlechter ist es, wenn
ein Angreifer seine präparierte XML-Datei den Parser unterschieben
kann. Auch dafür gibt es ein Beispiel: Von Mohamed Ramadan wurde im
Dezember 2014 eine Schwachstelle in Facebooks Career-Seite entdeckt, die
den Upload von .docx
-Dateien mit XXE-Angriffen darin
erlaubte.
Ups!
In der nächsten Folge stelle ich weitere Schwachstellen vor, außerdem natürlich die möglichen Schutzmaßnahmen gegen XXE-Angriffe.
Kategorien: Grundlagen
Trackbacks
Dipl.-Inform. Carsten Eilers am : XML-Sicherheit, Teil 2: XXE-Angriffe, zum zweiten!
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : XML-Sicherheit, Teil 3: XXE-Angriffe, zum dritten!
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : XML-Sicherheit, Teil 4: XSL Injection, zum ersten
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : XML-Sicherheit, Teil 5: XSL Injection, zum zweiten
Vorschau anzeigen
Dipl.-Inform. Carsten Eilers am : XML-Sicherheit, Teil 6: XPath Injection
Vorschau anzeigen