针对 Apache Camel 漏洞的可运行概念验证复现程序。在该漏洞中,camel-platform-http 通过测试其配置的路径是否以字符串 proxy 开头(而非精确匹配)来决定端点是否以代理模式运行。代理模式会将端点变成一个全捕获端点(getPath() 变为 /),其转发目标取自请求自身的 Host 头。因此,任何路径仅以这些字符开头的端点——proxyStats、proxy-health、proxying 等——都会静默地变成路由作者从未要求的转发代理:一个请求伪造原语,并会暴露转发路径所能触及的任何内容(CWE-1220)。
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http 4.22.0(受影响;修复版本 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-platform-http(Camel 4.22.0,受影响;修复对照 CQ 3.40.0 / Camel 4.22.1) |
两个模块都针对真实的 PlatformHttpEndpoint 演示了受影响和修复后的行为。
驱动程序复刻了修复自身的回归测试(PlatformHttpEndpointProxyPathTest)。它创建一个 platform-http:proxyStats 端点——一个名称恰好以 proxy 开头的统计端点——并向组件询问它是否为代理:
isHttpProxy() 返回 true,且 getPath() 坍缩为全捕获的 /——该端点已被变成转发代理。isHttpProxy() 返回 false,且 getPath() 为 proxyStats——只有精确路径 proxy 才会选择代理模式。文档中所述的 platform-http:proxy 端点在两个版本中仍然是代理(此处展示用于对比),确认该修复仅移除了非预期的分类。
# 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"
| 属性 | 值 |
|---|---|
| 组件 | camel-platform-http(PlatformHttpEndpoint.isHttpProxy) |
| CWE | CWE-1220(访问控制粒度不足) |
| 严重性 | 中危 |
| 攻击向量 | 某路由声明了一个 platform-http 端点,其路径以 proxy 开头(但本意并非代理);该端点会变成通配转发,将请求转发到调用方的 Host 头 |
| 影响 | 非预期的代理/请求伪造,并暴露转发路径所能访问的任何资源 |
| 受影响版本 | 从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24455 |
| 致谢 | Claude Security Scan Tool |
公告:https://camel.apache.org/security/CVE-2026-85316.html
受影响的 Quarkus 模块基于 CQ 3.39.0(Camel 4.22.0)构建。修复后的控制版本为 CQ 3.40.0(Camel 4.22.1)。 该演示仅创建并检查一个端点(
isHttpProxy()/getPath()),因此不会启动 HTTP 服务器; Spring Boot 模块使用的是普通的camel-platform-http组件,而非 starter。
PlatformHttpEndpoint.isHttpProxy() 现在将路径与 proxy 进行相等比较
(PROXY_PATH.equals(this.path)),而不再使用 startsWith,因此只有文档中所述的 platform-http:proxy
端点会以代理模式运行。
重命名任何以 proxy 开头但本意并非作为代理的端点路径。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该漏洞、验证自身是否受影响,并确认升级可解决该问题。 该演示仅在进程内检查端点分类,不转发任何流量。请勿将本材料用于您不拥有或运营的系统。