Sicherheitsfehlkonfiguration – XXE im Detail
Die Schwachstellenklasse „XML eXternal Entities“ (XXE) ist eine Sicherheitsfehlkonfiguration, die XML-Parser betrifft.
Der XML-Standard bietet Möglichkeiten, auf „Entitäten“ wie Dateien und URLs zu verweisen. Standardmäßig lösen Parser externe Entitäten oft vollständig auf, was dazu führen kann, dass XML-Dokumente Dateien und andere sensible Informationen für potenzielle Angreifer offenlegen.
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>
Zuerst deklarieren wir ein neues „Doctype“, das die Struktur bzw. die 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 verweist auf die Datei „/etc/passwd“.
Nach der „Doctype“-Definition folgen unsere eigentlichen XML-Daten. Wir definieren ein „outerElement“ und fügen dann eine Referenz (gekennzeichnet durch das „&“) auf die Entität „externalEntity“ hinzu.
An diesem Punkt schlägt der Interpreter die Entitätsdefinition nach, löst die definierte URL auf und setzt sie an die Stelle von „&externalEntity;“.
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>
Risikominderung
Die Notwendigkeit und die spezifische Art und Weise, sich vollständig gegen XXE zu schützen, hängen stark von der verwendeten Sprache, dem Framework und der jeweiligen Version ab.
Jede Kombination erlaubt es oft, bestimmte Aspekte des Parsers zu deaktivieren, was die Auflösung von Dateien verhindern kann, jedoch nicht unbedingt von HTTP-Pfaden. Oder es kann weiterhin die Expansion von Entitäten zulassen, was für sich genommen 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 (Deaktivierung mit „xmlDocument.XmlResolver = null;“)
- XmlTextReader (Deaktivierung mit „xmlTextReader.ProhibitDtd = true;“)
- XPathNavigator
Sichere Programmierung in der Praxis
Entdecken Sie Richtlinien für sicheres Programmieren, um Schwachstellen wie die OWASP Top 10 zu verstehen und zu beheben, und tauchen Sie in geführte Trainingsmissionen ein, um diese in realistischen Anwendungssimulationen zu üben.