XXE-Injection
Eine hochgeladene XML-Datei, die die eigenen Dateien des Servers liest.
Was ist XXE-Injection?
XXE verwandelt einen XML-Parser in ein Dateilese- und Anforderungsfälschungsprimitiv. Der Angreifer deklariert eine SYSTEM-Entität in einem DOCTYPE und der Parser integriert eine lokale Datei oder die Antwort einer internen URL, bevor Ihr Code das Dokument sieht. Das macht es zu einem Parser-Konfigurationsfehler und nicht zu einem Eingabeformfehler. Sie verweisen auf einen Bestell-Upload auf file:///etc/passwd und lesen ihn im Feld „Echo-Lieferant“ zurück. Dann beheben Sie libxmljs.parseXml(..., { noent: true }) : DOCTYPE- und Entity-Deklarationen ablehnen und mit deaktivierter externer Entity- und DTD-Auflösung analysieren.
Was Sie lernen in XXE-Injection
- XXE als Fehler in der Parser-Konfiguration erkennen, nicht als Fehler der Eingabeform
- Eine XML-Nutzlast lesen und die gefährliche SYSTEM-Entitätsdeklaration identifizieren
- Verstehen, dass sich XXE vom Lesen lokaler Dateien auf das Abrufen interner URLs (SSRF) verallgemeinern lässt
- Die Lösung auf Parser-Ebene anwenden (Auflösung externer Entitäten deaktivieren) und zusätzliche Defense-in-Depth-Maßnahmen ergänzen
- Nach dem Fund alle XML-Parse-Aufrufstellen auf dieselbe Einstellung prüfen
XXE-Injection — Trainingsschritte
-
Die Eingabefunktion finden
Brackwell Logistics erlaubt jedem registrierten Lieferanten, eine Bestellung als XML-Datei hochzuladen. Das Formular nimmt das Dokument entgegen, parst es auf den Servern von Brackwell und liest Lieferant sowie Gesamtbetrag aus. Bob öffnet die Funktion, um ihr Verhalten zu beobachten, bevor er etwas daran verändert.
-
Wo das Parsen stattfindet
Eine Zeile auf dieser Seite ist der ganze Grund für Bobs Interesse.
-
Eine normale Bestellung hochladen
Beobachten Sie zunächst das normale Verhalten der Funktion. Bob fügt eine gewöhnliche Bestellung an und übermittelt sie. Der Netzwerkbereich des Browsers zeichnet Anfrage und Serverantwort auf – genau wie in den DevTools.
-
Was der Parser zurückgab
Die Bestellung wurde fehlerfrei geparst. Ein Detail in der Antwort zeigt Bob, wie er sie angreifen kann.
-
Mit einer normalen Datei beginnen
Bob öffnet die gewöhnliche Bestellung im Editor. Derzeit ist sie genau das, was sie zu sein scheint: ein Lieferant und ein Gesamtbetrag, reine Daten. XML erlaubt einem Dokument, eine externe Entität zu deklarieren – einen benannten Platzhalter, dessen Wert der Parser von einer anderen Quelle abruft. Bob wird nun eine solche Entität hinzufügen.
-
Die Datei präparieren
Bob fügt eine DOCTYPE-Deklaration mit einer externen Entität hinzu, die auf eine Datei auf dem Datenträger verweist, und verweist das Lieferantenfeld auf diese Entität. Die Datei lässt sich weiterhin als Bestellung parsen. Er beginnt mit einer Datei, die jedes Linux-System besitzt, um zu beweisen, dass der Parser der Referenz überhaupt folgt.
-
Die Entität
Dafür genügen zwei Zeilen.
-
Die präparierte Datei hochladen
Bob übermittelt seine präparierte Datei über dieselbe Eingabefunktion. Für den Browser ist es nur ein weiterer Bestellungs-Upload.
-
Die Datei kommt zurück
Die Antwort enthält keinen Lieferantennamen, sondern die Passwortdatei des Servers, die von der Festplatte gelesen und über die normale Ausgabe des Uploads direkt zurückgegeben wurde.
-
Wissenscheck
Sie haben gerade gesehen, wie ein Bestell-Upload Dateien des Servers ausliest. Festigen Sie nun, warum das möglich war.
Abdeckung der Sicherheits-Frameworks
OWASP Top 10
- A02:2025 Security Misconfiguration
- A05:2021 Security Misconfiguration
CWE
- CWE-611 Improper Restriction of XML External Entity Reference
- CWE-918 Server-Side Request Forgery (SSRF)
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security