
Lauffähiger Proof-of-Concept-Reproduzierer für CVE-2026-85316, der den unbeabsichtigten Proxy-Modus bei der Pfadpräfix-Übereinstimmung von Apache Camel camel-platform-http demonstriert, mit Kontrollen für die korrigierte Version.
Lauffähiger Proof-of-Concept-Reproduzierer für die Apache-Camel-Schwachstelle, bei der camel-platform-http entschied, ob ein
Endpunkt im Proxy-Modus läuft, indem geprüft wurde, ob sein konfigurierter Pfad mit der Zeichenkette proxy beginnt, statt
ihn exakt abzugleichen. Der Proxy-Modus verwandelt einen Endpunkt in einen Catch-all (getPath() wird zu /), dessen Weiterleitungsziel
aus dem Host-Header der Anfrage selbst übernommen wird. Jeder Endpunkt, dessen Pfad lediglich mit diesen Zeichen beginnt —
proxyStats, proxy-health, proxying, … — wurde also stillschweigend zu einem Weiterleitungs-Proxy, den der Routenautor nie angefordert hatte: ein
Request-Forgery-Primitiv und eine Offenlegung all dessen, was der Weiterleitungspfad erreichen kann (CWE-1220).
| Laufzeitumgebung | Verzeichnis | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http 4.22.0 (betroffen; behoben in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-platform-http (Camel 4.22.0, betroffen; behobene Kontrolle CQ 3.40.0 / Camel 4.22.1) |
Beide Module demonstrieren das betroffene und das behobene Verhalten gegenüber dem echten PlatformHttpEndpoint.
Der Treiber bildet den Regressionstest des Fixes selbst nach (PlatformHttpEndpointProxyPathTest). Er erstellt einen
platform-http:proxyStats-Endpunkt — einen Statistik-Endpunkt, dessen Name zufällig mit proxy beginnt — und fragt die
Komponente, ob es sich um einen Proxy handelt:
isHttpProxy() gibt true zurück und getPath() fällt auf das Catch-all / zusammen — der Endpunkt wurde
in einen Weiterleitungs-Proxy verwandelt.isHttpProxy() gibt false zurück und getPath() ist proxyStats — nur der exakte Pfad proxy wählt
den Proxy-Modus aus.Der dokumentierte platform-http:proxy-Endpunkt bleibt in beiden Versionen ein Proxy (zum Vergleich gezeigt), was bestätigt, dass der
Fix lediglich die unbeabsichtigte Klassifizierung entfernt.
# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: proxyStats isHttpProxy=true, path "/"; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85316-platform-http-proxy-prefix-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: isHttpProxy=false, path "proxyStats"; >>> 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.22.0): proxyStats isHttpProxy=true, path "/"
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: isHttpProxy=false, path "proxyStats"
| Eigenschaft | Wert |
|---|---|
| Komponente | camel-platform-http (PlatformHttpEndpoint.isHttpProxy) |
| CWE | CWE-1220 (Unzureichende Granularität der Zugriffskontrolle) |
| Schweregrad | MITTEL |
| Angriffsvektor | Eine Route deklariert einen platform-http-Endpunkt, dessen Pfad mit proxy beginnt (aber nicht als Proxy gedacht ist); er wird zu einem Catch-all, der an den Host-Header des Aufrufers weiterleitet |
| Auswirkung | Unbeabsichtigte Proxy-/Request-Forgery-Funktion und Offenlegung dessen, was der Weiterleitungspfad erreichen kann |
| 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-24455 |
| Danksagung | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85316.html
Das betroffene Quarkus-Modul basiert auf CQ 3.39.0 (Camel 4.22.0). Die korrigierte Kontrolle ist CQ 3.40.0 (Camel 4.22.1). Die Demonstration erstellt und inspiziert lediglich einen Endpunkt (
isHttpProxy()/getPath()), sodass kein HTTP-Server gestartet wird; das Spring-Boot-Modul verwendet die einfachecamel-platform-http-Komponente anstelle des Starters.
PlatformHttpEndpoint.isHttpProxy() vergleicht den Pfad nun auf Gleichheit
mit proxy (PROXY_PATH.equals(this.path)) anstelle von startsWith, sodass nur der dokumentierte platform-http:proxy-Endpunkt
im Proxy-Modus läuft.
Benennen Sie jeden Endpunktpfad um, der mit proxy beginnt, aber nicht als Proxy gedacht ist.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Camel-Nutzern zu helfen, die Schwachstelle zu verstehen, zu überprüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Die Demonstration inspiziert lediglich die Endpunktklassifizierung im Prozess und leitet keinen Datenverkehr weiter. Verwenden Sie dieses Material nicht gegen Systeme, die Sie nicht besitzen oder betreiben.