Skip to content

Was ist ein XXE-Angriff und wie mildert man ihn ab?

Kurzantwort

XXE missbraucht einen XML-Parser, der externe Entitäten auflöst, die in der DTD eines Dokuments definiert sind. Ein Angreifer deklariert eine Entität, die auf eine lokale Datei oder interne URL zeigt, und der Parser ruft sie ab — was Dateioffenlegung, SSRF und Dienstverweigerung ermöglicht. Die Lösung ist, DTD-Verarbeitung und externe Entitätsauflösung in der Parser-Konfiguration zu deaktivieren.

XML External Entity (XXE) Injection nutzt eine mächtige und selten benötigte Funktion von XML aus: Ein Dokument kann Entitäten in seiner Document Type Definition (DTD) definieren, und diese Entitäten können auf externe Ressourcen zeigen. Wenn ein fehlkonfigurierter Parser vom Angreifer geliefertes XML verarbeitet, löst er diese externen Verweise bereitwillig auf — und ruft ab, was der Angreifer benannt hat.

Was ein Angreifer tun kann

Die klassische Payload deklariert eine Entität, die auf eine lokale Datei zeigt:

<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<foo>&xxe;</foo>

Wenn der Parser &xxe; expandiert, wird der Dateiinhalt in die Antwort gezogen — beliebige Dateioffenlegung. Derselbe Trick mit http:// lässt den Server eine interne URL abrufen und verwandelt XXE in SSRF (einschließlich des Cloud-Metadaten-Endpunkts). Selbst blindes XXE, bei dem die Antwort nicht zurückgegeben wird, kann Daten out-of-band exfiltrieren, indem die Entität eine ausgehende Anfrage an einen Angreiferserver auslöst. Und rekursive Entitätsexpansion (der „Billion Laughs"-Angriff) kann den Speicher für einen DoS erschöpfen.

Warum es so häufig ist

XML-Parser in vielen Sprachen aktivierten historisch DTD- und externe Entitätsverarbeitung standardmäßig. Jeder Endpunkt, der XML akzeptiert — SOAP, SAML, SVG-Uploads, Office-Dokumente, RSS — ist ein Kandidat, oft dort, wo Entwickler nicht einmal merken, dass XML geparst wird.

Abmilderung

Die zuverlässige Lösung ist, den Parser zu härten:

  • DTD-Verarbeitung vollständig deaktivieren, wo möglich (z. B. disallow-doctype-decl).
  • Werden DTDs benötigt, externe allgemeine und Parameter-Entitäten deaktivieren.
  • Parser-Bibliotheken gepatcht halten und sichere Voreinstellungen bevorzugen.
  • Wo machbar, ein weniger gefährliches Format wie JSON verwenden.

Eingabevalidierung allein hilft nicht, weil die Gefahr im Parsen liegt, nicht in den Datenwerten.

Prüfer achten auf den Mechanismus der externen Entität, auf das Dreigespann der Auswirkungen (Dateilesen, SSRF, DoS), auf das Bewusstsein für blindes XXE und darauf, DTDs / externe Entitäten zu deaktivieren als Lösung statt Eingabefilterung.

Wahrscheinliche Anschlussfragen

  • Inwiefern ist der 'Billion Laughs'-Angriff eine Form von XXE-bezogenem DoS?
  • Warum kann XXE selbst dann ausgenutzt werden, wenn der Antwortkörper nicht zurückgegeben wird?
  • Welches sicherere Datenformat würdest du anstelle von XML vorschlagen?

Quellen

Erhalte 100 Cybersecurity-Interviewfragen + Antworten

Gib deine E-Mail-Adresse ein und wir senden dir das kostenlose PDF-Paket und das Flashcard-Deck.

Kein Spam. Jederzeit abbestellbar.