operationName 请求头注入(SOAP 操作重定向)针对同一 Apache Camel 漏洞的可运行概念验证复现程序,每种运行时一个:
| 运行时 | 目录 | 技术栈 | 后端 SOAP 服务 |
|---|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | 使用 CXF ServerFactoryBean 运行在独立端口 :9000 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0(内置 Camel 4.20.0) | 使用 quarkus-cxf 运行在受管服务器上,路径为 /soapservice/account |
两者均为受影响版本(已在 4.14.8 / 4.18.3 / 4.21.0 中修复),且都展示了完全相同的缺陷:
CxfProducer#getBindingOperationInfo 首先查找 operationName 消息头,仅当该头不存在时才回退到
端点的 defaultOperationName。该头常量的值是普通字符串
operationName — 而非 CamelCxfOperationName — 因此 HTTP 边界过滤器(仅剥离 Camel* 前缀)会放行
同名的入站 HTTP 头。不可信客户端添加 operationName: deleteAccount 后,
路由中固定且只读的 getBalance 就变成了破坏性调用(CWE-441,混淆代理)。
两种变体的唯一区别在于后端 SOAP 服务的搭建方式:Quarkus 变体使用 quarkus-cxf 将其发布在受管的 Quarkus HTTP 服务器上(因此契约带有 JAX-WS
@WebService注解), 而 Spring Boot 变体则使用 CXFServerFactoryBean在独立端口上以编程方式创建。 缺陷本身不受影响。
每个子目录都是一个自包含项目,带有各自的 Dockerfile、docker-compose.yml 和 README。简而言之,
对于任一项目:
cd camel-spring-boot # 或:cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
安全公告:https://camel.apache.org/security/CVE-2026-46592.html
这些复现程序仅供安全研究和授权测试使用,针对的是已公开披露且已修复的漏洞。 未经明确许可,请勿将其用于任何系统。
| 属性 | 值 |
|---|
| 组件 | camel-cxf(camel-cxf-soap;该常量位于 camel-cxf-common 中,因此 camel-cxfrs 也受影响) |
| 受影响类 | org.apache.camel.component.cxf.jaxws.CxfProducer#getBindingOperationInfo 读取 CxfConstants.OPERATION_NAME("operationName") |
| CWE | CWE-20(输入验证不恰当)/ CWE-441(非预期代理或中介 — 混淆代理) |
| 影响 | HTTP 客户端设置 operationName → 生产者调用不同的 SOAP 操作(例如破坏性操作) |
| 受影响版本 | 4.0.0 至 4.14.8 之前,4.15.0 至 4.18.3 之前,4.19.0 至 4.21.0 之前 |
| 修复版本 | 4.14.8、4.18.3、4.21.0 |
| JIRA | CAMEL-23526(PR apache/camel#23326) |
| 致谢 | Yu Bao(PayPal) |