XML Injection (auch bekannt als Blind XPath Injection)
Beschreibung
XML Injection ist eine Schwachstelle, die auftritt, wenn Software ein XML-Dokument oder eine XPath-Abfrage ganz oder teilweise unter Verwendung von extern beeinflussten Eingaben einer vorgelagerten Komponente konstruiert, aber Spezialelemente, die die beabsichtigte XML-Struktur oder Abfragelogik modifizieren könnten, nicht oder nicht korrekt neutralisiert. Angreifer nutzen dies aus, indem sie XML-Metazeichen wie spitze Klammern (<, >), Ampersands (&), Anführungszeichen (", ') und XPath-Operatoren einschleusen, um XML-Dokumente zu manipulieren oder XPath-basierte Authentifizierung und Zugriffskontrollen zu umgehen. Dies kann zu Informationsoffenlegung, Authentifizierungsumgehung, Datenmanipulation und in schweren Fällen zu Server-Side Request Forgery oder Denial-of-Service durch XML-Entity-Expansion-Angriffe führen.
Risiko
XML-Injection-Schwachstellen können je nach Art der XML-Datenverarbeitung durch die Anwendung schwerwiegende Folgen haben. XPath-Injection in Authentifizierungssystemen kann eine vollständige Authentifizierungsumgehung ermöglichen. XML-Dokument-Injection kann Datenstrukturen beschädigen, bösartige Inhalte einschleusen oder das Anwendungsverhalten ändern. In Kombination mit XML External Entity (XXE)-Schwachstellen können Angreifer Server-Side Request Forgery erreichen, lokale Dateien lesen oder Denial-of-Service verursachen. Anwendungen, die XML für Konfiguration, Datenaustausch oder SOAP-Webservices verwenden, sind besonders gefährdet. Die Komplexität des XML-Parsings und die verschiedenen Injection-Punkte machen umfassenden Schutz herausfordernd.
Lösung
Verwenden Sie parametrisierte XPath-Abfragen, wenn diese über XML-Verarbeitungsbibliotheken verfügbar sind. Bereinigen Sie alle Benutzereingaben durch Escaping von XML-Sonderzeichen: < zu <, > zu >, & zu &, " zu " und ' zu '. Implementieren Sie strikte Eingabevalidierung mit Allowlists für erwartete Datenformate. Deaktivieren Sie die Verarbeitung externer Entitäten in XML-Parsern, um XXE-Angriffe zu verhindern. Verwenden Sie moderne, sichere XML-Bibliotheken mit sicheren Standardkonfigurationen. Für XPath-Abfragen erwägen Sie die Verwendung vorkompilierter Abfragen mit Variablenbindung, sofern unterstützt. Vermeiden Sie die Konstruktion von XML-Dokumenten durch String-Verkettung; verwenden Sie stattdessen DOM-Manipulation oder XML-Builder.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Vertraulichkeit | Bereich: Vertraulichkeit XPath-Injection kann Daten aus XML-Dokumenten extrahieren, einschließlich Authentifizierungsanmeldedaten, persönlicher Informationen und vertraulicher Geschäftsdaten. |
| Zugriffskontrolle | Bereich: Zugriffskontrolle Authentifizierungsumgehung durch XPath-Injection ermöglicht unbefugten Zugriff auf geschützte Funktionen ohne gültige Anmeldedaten. |
| Integrität | Bereich: Integrität XML-Injection kann die Dokumentstruktur modifizieren, gespeicherte Daten ändern oder bösartige Inhalte einschleusen, die das Anwendungsverhalten beeinflussen. |
Beispielcode + Lösungscode
Anfälliger Code
<?php
// ANFÄLLIG: XPath-Injection in Authentifizierung
function authenticate($username, $password) {
$xml = simplexml_load_file('users.xml');
// Angriff: username=' or '1'='1' or 'a'='a password=beliebig
// Ergibt: //user[username='' or '1'='1' or 'a'='a' and password='beliebig']
$query = "//user[username='" . $username . "' and password='" . $password . "']";
$result = $xml->xpath($query);
return count($result) > 0;
}
// ANFÄLLIG: XML-Dokument-Konstruktion
function addComment($author, $content) {
$xml = file_get_contents('comments.xml');
// Angriff: content=</comment><comment><author>hacker</author><content>bösartig
$newComment = "<comment><author>$author</author><content>$content</content></comment>";
// Vor schließendem Tag einfügen
$xml = str_replace('</comments>', $newComment . '</comments>', $xml);
file_put_contents('comments.xml', $xml);
}
?>
Korrigierter Code
<?php
// SICHER: Escapte XPath-Abfragen
function authenticate($username, $password) {
$xml = simplexml_load_file('users.xml');
// XPath-Sonderzeichen escapen
$safeUsername = escapeXPath($username);
$safePassword = escapeXPath($password);
$query = "//user[username='" . $safeUsername . "' and password='" . $safePassword . "']";
$result = $xml->xpath($query);
return count($result) > 0;
}
function escapeXPath($input) {
// XPath 1.0 hat kein ordnungsgemäßes Escaping für Anführungszeichen
// Beste Methode: concat() für Strings verwenden, die beide Anführungszeichen enthalten
if (strpos($input, "'") === false) {
return $input;
}
if (strpos($input, '"') === false) {
return $input;
}
// Enthält beide - concat verwenden
$parts = explode("'", $input);
return "concat('" . implode("',\"'\",'", $parts) . "')";
}
// SICHER: DOM-basierte XML-Konstruktion
function addComment($author, $content) {
$dom = new DOMDocument();
$dom->load('comments.xml');
// Eingabe validieren
if (strlen($author) > 100 || strlen($content) > 1000) {
throw new InvalidArgumentException("Eingabe zu lang");
}
// Elemente mit DOM erstellen - übernimmt automatisch das Escaping
$comment = $dom->createElement('comment');
$authorElem = $dom->createElement('author');
$authorElem->appendChild($dom->createTextNode($author));
$contentElem = $dom->createElement('content');
$contentElem->appendChild($dom->createTextNode($content));
$comment->appendChild($authorElem);
$comment->appendChild($contentElem);
$dom->documentElement->appendChild($comment);
$dom->save('comments.xml');
}
?>
Ausgenutzt in der Praxis
SOAP-Webservice-Angriffe (Unternehmensanwendungen, fortlaufend)
XML-Injection-Angriffe gegen SOAP-basierte Webservices wurden genutzt, um Authentifizierung zu umgehen, sensible Daten zu extrahieren und Transaktionen in Unternehmensanwendungen einschließlich Finanzdienstleistungen und Gesundheitssystemen zu manipulieren.
Tools zum Testen/Ausnutzen
-
Burp Suite — Web-Sicherheitstestplattform mit XML/XPath-Injection-Testfähigkeiten.
-
XPath Injection Payloads — Sammlung von XPath-Injection-Payloads für verschiedene Angriffsszenarien.
CVE-Beispiele
-
CVE-2023-28708 — Apache Tomcat Session-Fixation kombiniert mit XPath-Injection.
-
CVE-2021-42013 — Apache HTTP Server Path-Traversal ermöglicht XML-Konfigurationsmanipulation.
Referenzen
-
MITRE. "CWE-91: XML Injection (aka Blind XPath Injection)." https://cwe.mitre.org/data/definitions/91.html
-
OWASP. "XPath Injection." https://owasp.org/www-community/attacks/XPATH_Injection