
Runnable proof-of-concept reproducer for CVE-2026-85316, demonstrating unintended proxy mode in Apache Camel camel-platform-http path prefix matching, with fixed-version controls.
Runnable proof-of-concept reproducer for the Apache Camel vulnerability where camel-platform-http decided whether an
endpoint ran in proxy mode by testing whether its configured path started with the string proxy, rather than
matching it exactly. Proxy mode turns an endpoint into a catch-all (getPath() becomes /) whose forward target
is taken from the request's own Host header. So any endpoint whose path merely begins with those characters —
proxyStats, proxy-health, proxying, … — silently became a forwarding proxy the route author never asked for: a
request-forgery primitive and an exposure of whatever the forwarding path can reach (CWE-1220).
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http 4.22.0 (affected; fixed 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-platform-http (Camel 4.22.0, affected; fixed control CQ 3.40.0 / Camel 4.22.1) |
Both modules demonstrate the affected and the fixed behaviour against the real PlatformHttpEndpoint.
The driver mirrors the fix's own regression test (PlatformHttpEndpointProxyPathTest). It creates a
platform-http:proxyStats endpoint — a stats endpoint whose name happens to begin with proxy — and asks the
component whether it is a proxy:
isHttpProxy() returns true and getPath() collapses to the catch-all / — the endpoint has been
turned into a forwarding proxy.isHttpProxy() returns false and getPath() is proxyStats — only the exact path proxy selects
proxy mode.The documented platform-http:proxy endpoint remains a proxy in both versions (shown for contrast), confirming the
fix only removes the unintended classification.
# 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"
| Property | Value |
|---|---|
| Component | camel-platform-http (PlatformHttpEndpoint.isHttpProxy) |
| CWE | CWE-1220 (Insufficient Granularity of Access Control) |
| Severity | MEDIUM |
| Attack vector | A route declares a platform-http endpoint whose path begins with proxy (but is not meant to proxy); it becomes a catch-all forwarding to the caller's Host header |
| Impact | Unintended proxy/request-forgery and exposure of whatever the forwarding path can reach |
| Affected Versions | From 4.0.0 before 4.18.5, from 4.19.0 before 4.22.1 |
| Fixed Versions | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24455 |
| Credit | Claude Security Scan Tool |
Advisory: https://camel.apache.org/security/CVE-2026-85316.html
The Quarkus affected module is built on CQ 3.39.0 (Camel 4.22.0). The patched control is CQ 3.40.0 (Camel 4.22.1). The demonstration only creates and inspects an endpoint (
isHttpProxy()/getPath()), so no HTTP server is started; the Spring Boot module uses the plaincamel-platform-httpcomponent rather than the starter.
PlatformHttpEndpoint.isHttpProxy() now compares the path for equality
with proxy (PROXY_PATH.equals(this.path)) instead of using startsWith, so only the documented platform-http:proxy
endpoint runs in proxy mode.
Rename any endpoint path that begins with proxy but is not intended to be a proxy.
This repository is published for educational and defensive purposes: to help Apache Camel users understand the vulnerability, verify whether they are affected, and confirm that upgrading resolves it. The demonstration only inspects endpoint classification in-process and forwards no traffic. Do not use this material against systems you do not own or operate.