Germany/Projekte/Top 10-2017 A4-XML External Entities (XXE)



Angreifer können anfällige XML Verarbeiter instrumentalisieren, wenn sie XML direkt hochladen können oder schädliche Inhalte in ein XML-Dokument aufnehmen können, wobei sie anfälligen Code, Abhängigkeiten oder Integrationen ausnutzen. 

Standardmäßig erlauben viele ältere XML-Prozessoren die Spezifikation einer externen Entität, also einer URI, die während der XML-Verarbeitung dereferenziert und ausgewertet wird. SAST -Tools können dies erkennen, indem sie Abhängigkeiten und Konfigura-tionen überprüfen. DAST -Tools erfordern zusätzliche manuelle Schritte, um dieses Problem zu erkennen und auszunutzen. Manuelle Tester müssen geschult werden, wie man auf XXE testet, was Stand 2017 typischerweise selten passiert. 

Diese Fehler können ausgenutzt werden, um Daten zu extrahieren, eine Remote-Anfrage vom Server auszuführen, interne Systeme zu scannen, einen Denial-of-Service-Angriff oder auch andere Angriffe durchzuführen. Die Auswirkungen auf das Unternehmen hängen vom Schutzbedarf der Anwendung und ihrer Daten ab.

Anwendungen und insbesondere XML-basierte Webservices oder nachgelagerte Integrationen können in folgenden Fällen anfällig für Angriffe sein:
 * Die Anwendung akzeptiert direkt XML oder XML-Uploads, insbesondere aus nicht vertrauenswürdigen Quellen oder fügt nicht vertrauenswürdige Daten in XML-Dokumente ein, die dann von einem XML-Prozessor analysiert werden.
 * Die XML-Prozessoren in der Anwendung oder SOAP-basierte Webservices haben Document Type Definitions (DTDs) aktiviert. Da der genaue Mechanismus zum Deaktivieren der DTD-Verarbeitung je nach Prozessor variiert, ist es empfehlenswert, eine Referenz wie den OWASP Cheat Sheet 'XXE Prevention'.
 * Wenn Ihre Anwendung SAML für die Identitätsverarbeitung im Rahmen von föderierter Sicherheit oder für Single Sign On (SSO) Zwecke verwendet. SAML verwendet XML für Identitätsbekundungen und kann daher anfällig sein.
 * Wenn die Anwendung SOAP vor Version 1.2 verwendet, ist sie wahrscheinlich anfällig für XXE-Angriffe, wenn XML-Entitäten an das SOAP-Framework übergeben werden.
 * Die Anfälligkeit für XXE-Angriffe bedeutet wahrscheinlich, dass die Anwendung anfällig für Denial-of-Service-Angriffe, einschließlich des sogenannten "Billion Laughs" Angriffs, ist.

Die Schulung von Entwicklern ist unerlässlich, um XXE zu identifizieren und zu beheben. Zusätzlich:
 * Verwenden Sie möglichst weniger komplexe Datenformate, wie JSON und vermeiden Sie die Serialisierung sensibler Daten.
 * Patchen oder aktualisieren Sie alle XML-Prozessoren und Bibliotheken, die von der Anwendung oder dem zugrunde liegenden Betriebssystem verwendet werden. Verwenden Sie Werkzeuge zur Prüfung von Abhängigkeiten. Aktualisieren Sie auf SOAP 1.2 oder höher.
 * Deaktivieren Sie die Verarbeitung von externen XML-Entitäten und DTDs in allen XML-Parsern in der Anwendung, gemäß dem OWASP Cheat Sheet 'XXE Prevention' . Implementierung einer positiven serverseitigen Eingabevalidierung ("White-listing"), -filterung oder -bereinigung, um bösartige Daten in XML-Dokumenten, Headern oder Knoten zu verhindern.
 * Vergewissern Sie sich, dass die Upload-Funktionalität für XML- oder XSL-Dateien eingehende XML-Daten mithilfe der XSD-Validierung oder ähnlichem validiert.
 * SAST -Tools können helfen, XXE im Quellcode zu erkennen, jedoch ist die manuelle Codeüberprüfung die beste Alternative in großen, komplexen Anwendungen mit vielen Integrationen.
 * Wenn dies nicht möglich ist, sollten Sie die Verwendung von virtuellen Patches, API-Sicherheitsgateways oder Web Application Firewalls (WAFs) in Betracht ziehen, um XXE-Angriffe zu erkennen, zu überwachen und zu blockieren.

Zahlreiche öffentliche XXE-Probleme wurden entdeckt, darunter auch Angriffe auf Embedded-Geräte. XXE tritt an vielen unerwarteten Stellen auf, einschließlich tief verschachtelter Abhängigkeiten. Der einfachste Weg, wenn möglich, ist das Hochladen einer bösartigen XML-Datei:

Szenario 1: Der Angreifer versucht, Daten vom Server zu extrahieren:

 
 * <!DOCTYPE foo [
 * <!ELEMENT foo ANY >
 * <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
 * &xxe;



Szenario 2: Ein Angreifer durchsucht das private Netzwerk des Servers, indem er die obige ENTITY-Zeile ändert zu: 
 * <!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]>



Szenario 3: Ein Angreifer versucht einen Denial-of-Service-Angriff, indem er eine potenziell endlose Datei einfügt: 
 * <!ENTITY xxe SYSTEM "file:///dev/random" >]>




 * OWASP Application Security Verification Standard
 * OWASP Testing Guide: Testing for XML Injection
 * OWASP XXE Vulnerability
 * OWASP Cheat Sheet: XXE Prevention
 * OWASP Cheat Sheet: XML Security


 * CWE-611: Improper Restriction of XXE
 * Billion Laughs Attack
 * SAML Security XML External Entity Attack
 * Detecting and exploiting XXE in SAML Interfaces