In einem Penetrationstest wird ein System oder eine Anwendung auf viele verschiedene Schwachstellen überprüft. Eine dieser Schwachstellen ist XXE, XML-External-Entity. Wir haben einmal zusammengefasst, was XXE ist und welche Auswirkung diese Schwachstelle haben kann.
Die XXE Schwachstelle
XXE ist eine Injection Schwachstelle und so weit verbreitet, dass dieser Schwachstellen-Typ eine eigene Kategorie in der OWASP Top 10 erhielt. Wie bei vielen anderen Schwachstellen, wie bspw. SQL-Injection oder Cross-Site-Scripting ist auch bei der XML-External-Entity, der ungefilterte Benutzern-Input der Auslöser.
Wie der Name bereits andeutet, befindet sich bei XXE der Benutzer-Input in Form einer XML-Datei. Dieser Dateityp wird sehr häufig für den Austausch zwischen von Daten zwischen Servern genutzt. Der große Vorteil von XML ist, dass es sowohl von Menschen als auch von Computern gut und schnell gelesen werden kann. Bei dem XML-External-Entity-Angriff wird das Dateiformat XML jedoch ausgenutzt, um bspw. geheime Dateien auf einem Server lesen zu können.
Vor allem der XML-Parser wird bei diesem Angriff ausgehebelt. In einem klassischen XML-Dokument gibt es ein Feld in dem “external entity” bestimmt werden können. Diese machen es möglich, Inhalt aus lokalen oder externen Daten einfügen zu lassen, nachdem der Server diese “external entity” festgelegt hat. Klassische Parser haben hiermit jedoch häufig ein Problem, da bspw. komprimierte Daten übermittelt werden, auf die der Benutzer keinen Zugriff erhalten sollte.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
OWASP hat ebenfalls eine Erklärung zu der Schwachstelle XXE veröffentlicht, in der bspw. der o. a. Code gefunden werden kann, der ein System auf eine XXE Schwachstelle untersucht. Der Benutzer “sagt” dem System in dem Feld <!ENTITY>, dass eine Datei ausgewählt werden soll, die sich in dem Pfad “file:///etc/passwd” befindet.
Ist der Parser ohne jegliche Sicherheitskonfigurationen ausgestattet, würde er diese Anfrage ohne Probleme ausführen und somit potentiell sensible Informationen zurückgeben.
So können XML-External-Entity-Schwachstellen erkannt und verhindert werden
Nachdem wir den Angriff nun etwas besser verstanden haben, möchten wir verstehen, wie man diese Sicherheitslücke schließen und langfristig verhindern kann. Um diese Sicherheitslücke zu schließen, ist es zunächst notwendig, dass diese gefunden wird. Es ist definitiv möglich, diese Schwachstelle manuell zu finden, indem eigene Skripte wie o. a. von OWASP, an den eigenen Server geschickt werden und die Antwort validiert wird.
Jedoch ist diese Variante sehr zeitaufwendig und führt höchstwahrscheinlich nicht zu einem Erfolg. Professionelle Pentester haben Scanner und andere Tools, die Webseiten schnell nach solchen Schwachstellen analysieren können. Zudem ist es ratsam, professionelle Teams dafür zu engagieren, da diese Erfahrungen mit verschiedenen Sicherheitslücken haben und somit bessere Ergebnisse liefern können als ein eigener Mitarbeiter selbst.
Eigentlich ist es sehr, einfach seine Systeme vor XXE Angriffen zu schützen, denn die eigenen XML-Parser können so konfiguriert werden, dass <!ENTITY> nicht akzeptiert und verarbeitet wird. Das Problem hierbei ist, dass in vielen Fällen <!ENTITY> aus einem guten Grund verarbeitet werden. In solchen Fällen sollte die Dokumentation des eigenen XML-Parsers gut durchgearbeitet werden und lediglich Funktionen bereitstellen, die eine Daseinsberechtigung haben.