Fehlkonfiguration der Sicherheit - XXE detailliert
Bei der Schwachstelle "XML eXternal Entities" (XXE) handelt es sich um eine Sicherheitsfehlkonfiguration bei XML-Parsern.
Der XML-Standard enthält Möglichkeiten, auf "Entitäten" wie Dateien und URLs zu verweisen. Standardmäßig lösen Parser externe Entitäten oft vollständig auf, was bedeutet, dass XML-Dokumente zur Offenlegung von Dateien und anderen sensiblen Informationen für potenzielle Angreifer führen können.
Ein einfaches Beispiel
Schauen wir uns ein Beispiel für ein XML-Dokument an, das externe Entitäten verwendet:
xml
<?xml version="1.0" ?>
<!DOCTYPE outerElement [
<!ENTITY externalEntity SYSTEM "file:///etc/passwd" > ]>
<outerElement>&externalEntity;</outerElement>
Zunächst deklarieren wir einen neuen "doctype", der die Struktur-/Elementtypen definiert, die im Dokument vorkommen und vom Parser verarbeitet werden können.
Darin geben wir eine Entität vom Typ SYSTEM mit der Bezeichnung "externalEntity" an. Diese Entität verweist auf die Datei "/etc/passwd".
Nach der "doctype"-Definition folgen die eigentlichen XML-Daten. Wir definieren ein "outerElement" und fügen dann einen Verweis (gekennzeichnet durch ein "&") auf die Entität "externalEntity" hinzu.
An diesem Punkt wird der Interpreter die Entitätsdefinition nachschlagen und die definierte URL auflösen und an die Stelle von "&externalEntity;" setzen.
Am Ende des Parsing-Prozesses erhalten wir ein Dokument, das wie folgt aussieht:
xml
<?xml version="1.0" ?>
<outerElement>
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
....
</outerElement>
Milderung
Die Notwendigkeit und die Besonderheiten des vollständigen Schutzes gegen XXE hängen stark von der Sprache, dem Framework und der Version davon ab.
Jede Kombination ermöglicht oft die Deaktivierung einiger Aspekte des Parsers, die die Auflösung von Dateien, aber nicht von HTTP-Pfaden verhindern können. Oder es kann immer noch die Erweiterung von Entitäten ermöglichen, was allein schon zu einer Denial-of-Service-Schwachstelle führen kann.
.NET
Wenn Sie mit .NET 4.5.1 oder niedriger arbeiten, sind die folgenden Klassen standardmäßig anfällig:
- XmlDocument (Deaktivieren mit 'xmlDocument.XmlResolver = null;')
- XmlTextReader (Deaktivieren mit 'xmlTextReader.ProhibitDtd = true;')
- XPathNavigator