OWASP-Kategorie: MASVS-CODE: Codequalität
Übersicht
Eine XML eXternal Entity Injection (XXE) ist ein Angriff auf Anwendungen, die XML-Eingaben parsen. Ein XXE-Angriff tritt auf, wenn eine nicht vertrauenswürdige XML-Eingabe mit einem Verweis auf eine externe Entität von einem schwach konfigurierten XML-Parser verarbeitet wird. Mit diesem Angriff können mehrere Vorfälle inszeniert werden, darunter Dienstverweigerungsangriffe, Dateisystemzugriff oder Datenexfiltration.
Positiv beeinflussen
Wenn eine Anwendung ein XML-Dokument analysiert, kann sie alle darin enthaltenen DTDs (Document Type Definitions, auch als externe Entitäten bezeichnet) verarbeiten. Ein Angreifer kann dieses Verhalten ausnutzen, indem er schädlichen Code als DTDs einschleust. Dieser Code kann dann auf Teile des Dateisystems des Geräts zugreifen, die nur für die Anwendung zugänglich sind und potenziell vertrauliche Daten enthalten. Außerdem kann dieser schädliche Code Anfragen vom Gerät senden und so möglicherweise Perimeter-Sicherheitsmaßnahmen umgehen.
Wenn die Anwendung DTDs erweitert, kann dies zu einer Situation mit mehreren Iterationen der referenzierten Entitäten führen, was die Ressourcen des Geräts erschöpft und zu einer Dienstverweigerung führt.
Abhilfemaßnahmen
DTDs deaktivieren
Die sicherste Methode, XXE zu verhindern, besteht darin, DTDs (externe Entitäten) immer vollständig zu deaktivieren. Je nach verwendetem Parser kann die Methode dem folgenden Beispiel für die XML-Pull-Parser-Bibliothek ähneln:
Java
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
Durch das Deaktivieren von DTDs wird der Parser auch vor Denial-of-Service-Angriffen geschützt. Wenn es nicht möglich ist, DTDs vollständig zu deaktivieren, müssen externe Entitäten und externe Dokumenttypdeklarationen für jeden Parser spezifisch deaktiviert werden.
Aufgrund der großen Anzahl von XML-Parsing-Engines auf dem Markt unterscheiden sich die Möglichkeiten zur Abwehr von XXE-Angriffen von Engine zu Engine. Weitere Informationen finden Sie möglicherweise in der Dokumentation Ihrer Suchmaschine.
Eingabebereinigung durchführen
Die Anwendung sollte so neu konfiguriert werden, dass Nutzer keinen beliebigen Code in die Präambel des XML-Dokuments einfügen können. Dies muss serverseitig überprüft werden, da clientseitige Steuerelemente umgangen werden können.
Andere Bibliothek verwenden
Wenn die verwendete Bibliothek oder Methode nicht sicher konfiguriert werden kann, sollten Sie eine andere in Betracht ziehen. Der XML Pull-Parser und der SAX-Parser können beide auf sichere Weise konfiguriert werden und lassen DTDs und Entitäten nicht zu.
Ressourcen
- OWASP XXE
- OWASP XXE Prevention Cheat Sheet
- XML-Konstanten: FEATURE_SECURE_PROCESSING
- XML-Pull-Parser
- SAX-Parser