Injections externer XML-Entitäten (XXE)

OWASP-Kategorie:MASVS-CODE: Code Quality

Übersicht

Eine XXE-Injection (XML eXternal Entity) ist ein Angriff auf Anwendungen, die XML-Eingaben parsen. Ein XXE-Angriff erfolgt, wenn nicht vertrauenswürdige XML-Eingaben mit einem Verweis auf eine externe Entität von einem schwach konfigurierten XML-Parser verarbeitet werden. Mit diesem Angriff können mehrere Vorfälle inszeniert werden, darunter Denial of Service, Dateisystemzugriff oder Daten-Exfiltration.

Auswirkungen

Wenn eine Anwendung ein XML-Dokument parst, kann sie alle im Dokument 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 möglicherweise vertrauliche Daten enthalten. Außerdem kann dieser schädliche Code Anfragen vom Gerät aus senden und so möglicherweise Sicherheitsmaßnahmen umgehen.

Wenn die Anwendung DTDs erweitert, kann dies zu einer Situation mit mehreren Iterationen referenzierter Einheiten führen, die die Ressourcen des Geräts erschöpfen und zu einem Denial-of-Service führen.

Gegenmaßnahmen

DTDs deaktivieren

Die sicherste Methode, XXE-Angriffe 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 auf spezifische Weise deaktiviert werden.

Aufgrund der großen Anzahl von XML-Parsing-Engines auf dem Markt unterscheiden sich die Methoden zur Verhinderung von XXE-Angriffen von Engine zu Engine. Möglicherweise müssen Sie in der Dokumentation Ihrer Engine nachsehen, um weitere Informationen zu erhalten.

Eingaben bereinigen

Die Anwendung sollte so neu konfiguriert werden, dass Nutzer keinen beliebigen Code in die Präambel des XML-Dokuments einschleusen 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, sollte eine andere in Betracht gezogen werden. Sowohl der XML Pull Parser als auch der SAX Parser können sicher konfiguriert werden, sodass DTDs und Entitäten nicht zulässig sind.

Ressourcen