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文件枚举, 域名枚举, 漏洞复现, 版权保护, 编程工具, 请求拦截, 远程代码执行