
Fehlkonfiguration der Sicherheitseinstellungen — XXE detailliert
Bei der Schwachstellenklasse „XML eXternal Entities“ (XXE) handelt es sich um eine Sicherheitsfehlkonfiguration, an der XML-Parser beteiligt sind.
Der XML-Standard beinhaltet Möglichkeiten, auf „Entitäten“ wie Dateien und URLs zu verweisen. Es ist oft die Standardeinstellung, dass Parser externe Entitäten vollständig auflösen, was bedeutet, dass XML-Dokumente zur Offenlegung von Dateien und anderen vertraulichen Informationen für potenzielle Angreifer führen können.
Ein einfaches Beispiel
Schauen wir uns ein kleines Beispiel für ein XML-Dokument an, das externe Entitäten verwendet:
xml
<? xml-Version = „1.0"? >
<! DOCTYPE Äußeres Element [
<! ] >
<outerElement>&Externe Entität;</outerElement>
Zuerst deklarieren wir einen neuen 'Doctype', der die Struktur-/Elementtypen definiert, die im Dokument existieren und vom Parser verarbeitet werden können.
Darin spezifizieren wir eine Entität vom Typ System namens 'ExternalEntity'. Diese Entität zeigt auf die Datei '/etc/passwd'.
Nach der 'Doctype'-Definition haben wir unsere tatsächlichen XML-Daten. Wir definieren ein 'outerElement' und fügen dann eine Referenz (gekennzeichnet durch das '&') zur Entität 'ExternalEntity' hinzu.
An diesem Punkt sucht der Interpreter nach der Entitätsdefinition und löst die URL auf, die definiert und an die Stelle von '&externalEntity; 'gesetzt wurde.
Am Ende des Analysevorgangs 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>
Schadensbegrenzung
Die Notwendigkeit und die Einzelheiten eines umfassenden Schutzes vor XXE hängen stark von der Sprache, dem Framework und der Version ab.
Jede Kombination ermöglicht es oft, einige Aspekte des Parsers zu deaktivieren, was die Auflösung von Dateien verhindern kann, nicht aber von HTTP-Pfaden. Oder es kann immer noch die Erweiterung von Entitäten ermöglichen, was an sich schon zu einer Denial-of-Service-Schwachstelle führen kann.
.NET
Wenn Sie.NET 4.5.1 oder niedriger verwenden, sind die folgenden Klassen standardmäßig anfällig:
- XmlDocument (Deaktiviert mit 'XmlDocument.xmlResolver = null; ')
- XmlTextReader (Deaktiviert mit 'XmlTextReader.prohibitDTD = true; ')
- XPathNavigator