针对 Apache Camel 漏洞的可运行概念验证复现程序:当 exchange 处理失败时,Mina 消费者将 exchange.getException() 直接写回套接字发送给远程对端。在 textline 编解码器下,这会把异常的类名和消息交给对端;在 object 编解码器下,则会交出序列化的异常,包括其 cause 链。能够诱发失败的远程对端可以读取有关部署的内部细节——类和包名,以及消息或嵌套 cause 所携带的任何内容,实践中包括路径、主机名和连接细节。该消费者没有提供抑制此行为的选项,这与由 CAMEL-23651 统一处理的 HTTP 系列消费者不同。
仅限 Spring Boot。 不存在
camel-quarkus-mina扩展,因此本复现程序只提供一个 Camel Spring Boot 模块。(该缺陷位于组件的MinaConsumer中,与运行时无关。)
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mina 4.22.0(受影响;修复版本 4.22.1) |
一个 Mina TCP 消费者(sync=true、textline=true)处理每一行传入数据并失败——代表任何遇到内部错误的路由。该路由抛出一个 IllegalStateException,其消息携带模拟的内部细节(一个伪造的配置路径 /etc/camel/secret.properties、一个伪造的主机名,以及一个标记令牌)。利用驱动程序是一个普通的远程 TCP 对端:它打开套接字,发送一行数据,然后读取消费者写回的回复。
java.lang.IllegalStateException: INTERNAL-DETAIL-MARKER-7F3A2B config=/etc/camel/secret.properties db=internal-db.prod.svc。java.lang.Exception: Exchange processing failed——不包含路由异常的类、消息或堆栈
跟踪——同时仍会回复,因此同步对端不会陷入超时。cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: exception leaks over the socket; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85246-mina-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: generic reply; >>> Not exploited
| 属性 | 值 |
|---|---|
| 组件 | camel-mina(MinaConsumer.messageReceived) |
| CWE | CWE-209(生成包含敏感信息的错误消息) |
| 严重性 | 中 |
| 攻击向量 | 远程 TCP/UDP 对端触发路由失败,并从通过套接字写回的回复中读取异常 |
| 影响 | 信息泄露:通过 textline 编解码器泄露异常类/消息,或通过对象编解码器泄露序列化的异常 + 原因链(内部主机名、路径、连接详情) |
| 受影响版本 | 从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24476 |
| 致谢 | Claude Security Scan Tool |
公告:https://camel.apache.org/security/CVE-2026-85246.html
MinaConsumer 新增了一个 muteException 消费者选项(默认值为 true)。
启用后,失败的交换不再将 exchange.getException() 写回;而是写入一个替代的
Exception("Exchange processing failed"),其堆栈跟踪为空——它仍然是一个 Exception(因此对象编解码器对端
仍能收到一个异常),但不携带路由异常的类、消息或堆栈帧。回复仍会被写入,因此同步对端
不会因等待而超时。设置 muteException=false 可恢复之前的行为。
添加一个 onException 处理器,显式设置回复正文,这样框架就永远不会将异常写回
对端。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该 漏洞、验证自身是否受影响,并确认升级可以解决该问题。失败路由中的配置路径、主机和 标记令牌均为无实际作用的虚构本地测试数据。请勿将本材料用于您不拥有或 不运营的系统。