针对 Apache Camel 漏洞的可运行概念验证复现程序,该漏洞中按请求的签名材料被保存在跨请求共享的状态中,而非局限于正在处理的请求。单个 ResponseMDN 注册在共享的 HttpProcessor 上,为每个 AS2 请求提供服务;在动态密钥配置下(每个路径一个贸易合作伙伴,每个合作伙伴的密钥按请求从 HttpContext 解析),受影响的构建将解析出的按请求签名密钥写回实例字段。当部署服务多个合作伙伴时,并发或连续的请求因此可能观察到彼此的材料,并且消息处置通知(Message Disposition Notification)可能使用不同贸易合作伙伴的密钥进行签名。AS2 部署通常在设计上就是多合作伙伴的,因此该条件可由普通并发流量触发。
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-as2 4.22.0(受影响;修复版本 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-as2(Camel 4.22.0,受影响;修复对照 CQ 3.40.0 / Camel 4.22.1) |
两个模块均演示了受影响和修复后的行为。
驱动程序以动态密钥形式使用真实的 ResponseMDN(AS2 响应拦截器)。它依次通过 ResponseMDN.process(...) 解析两个合作伙伴的签名材料——先合作伙伴 A,再合作伙伴 B——(每个合作伙伴的 RSA 密钥位于 HttpContext 中),并在每次之后读取实例的 signingPrivateKey 字段。
final 且从不写入;按请求的密钥始终局限于请求内,因此共享实例的 signingPrivateKey 保持为 null。# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: per-request key on the shared instance; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85296-as2-signing-key-confusion-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: field stays null; >>> 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): per-request key on the shared instance
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: field stays null
| 属性 | 值 |
|---|---|
| 组件 | camel-as2(ResponseMDN 动态键处理) |
| CWE | CWE-488(数据元素暴露给错误的会话) |
| 严重性 | 中危 |
| 攻击向量 | 在共享同一个 ResponseMDN 实例的多合作伙伴部署中,普通的并发 AS2 流量 |
| 影响 | 使用另一交易伙伴的私钥签名的消息处置通知;跨伙伴的签名材料复用 |
| 受影响版本 | 从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24429 |
| 致谢 | Claude Security Scan Tool |
公告:https://camel.apache.org/security/CVE-2026-85296.html
Quarkus 受影响模块基于 CQ 3.39.0(Camel 4.22.0)构建:本 PoC 所验证的按请求动态 AS2 签名密钥机制 晚于 CQ 3.29.0(Camel 4.15.0),因此 CQ 3.39.0 与 Spring Boot 模块搭载的是同一个 Camel 4.22.0。
ResponseMDN 将配置的安全字段设为 final,并在 process() 内部将
按请求的动态材料解析为局部变量,绝不将其写回实例字段。因此,单个共享实例
不再会将一个请求的签名密钥泄露给另一个请求。
为每个交易伙伴运行独立的 Camel 上下文,从而不在它们之间共享任何签名材料。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该 漏洞、验证自身是否受影响,并确认升级可以解决该问题。RSA 密钥对是在 进程内为演示而生成的,且为惰性密钥。请勿将本材料用于您不拥有或 不运营的系统。