针对 Apache Camel 漏洞的可运行概念验证复现程序:当 Knative HTTP 消费者在消费者侧处理交换失败时,会将产生的异常作为 HTTP 响应体写回远程调用方——包括其类名、消息和完整堆栈跟踪。因此,外部发送者可以触发一次失败,并读取有关该部署的内部细节:类和包名、异常消息中携带的文件系统或主机名、路由的结构,以及——当异常消息中嵌入了连接字符串或配置时——直接读取这些数据。camel-knative 是最后一个尚未与 CAMEL-23651 为其他 HTTP 消费者确立的 muteException 行为对齐的 HTTP 系列消费者。
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0(受影响;修复版本 4.22.1),消费者运行在 Camel 的 Vert.x platform-http 服务器上 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative(Camel 4.15.0,受影响;修复对照 CQ 3.40.0 / Camel 4.22.1),消费者运行在 Quarkus HTTP 上 |
两个模块均演示了受影响和修复后的行为。
一个 Knative HTTP 源(消费者)路由接收一个 CloudEvent,然后在处理它时失败——代表任何遇到内部错误的路由(数据源查找失败、下游超时、缺陷)。该路由抛出一个 IllegalStateException,其消息携带模拟的内部细节:一个伪造的内部主机名(internal-db.prod.svc.cluster.local)、一个伪造的 JDBC URL 以及一个标记令牌 INTERNAL-DETAIL-MARKER-7F3A2B。攻击者只是一个远程调用方:它向消费者 POST 一个格式良好的 CloudEvent,并读取消费者返回的响应。
at com.example... / 框架堆栈帧。muteException(默认 true),因此会返回错误状态,但不会有任何异常细节到达调用方。# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: stack trace leaks; prints >>> PROVEN
docker compose down
# Patched control: rebuild with the fixed version, then run on the host
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-84180-knative-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: empty body; prints >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.15.0): stack trace leaks; >>> PROVEN
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: empty body; >>> Not exploited
| 属性 | 值 |
|---|---|
| 组件 | camel-knative(Knative HTTP 消费者,KnativeHttpConsumer.computeResponseBody) |
| CWE | CWE-209(生成包含敏感信息的错误消息) |
| 严重程度 | 中危 |
| 攻击向量 | 远程调用方在消费者侧触发路由失败,并从响应体中读取异常详情 |
| 影响 | 信息泄露:异常类/消息/堆栈跟踪(内部主机名、包名、路由结构、内嵌的连接字符串)会到达外部发送方 |
| 受影响版本 | 从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24428 |
| 致谢 | Claude Security Scan Tool |
公告:https://camel.apache.org/security/CVE-2026-84180.html
KnativeHttpConsumer.computeResponseBody 现在会检查一个新的
muteException 选项(消费者端,默认值为 true)。当该选项启用时,失败的交换会返回空响应体
(new byte[0]),而不是堆栈跟踪——空响应体是刻意为之,以便保留错误状态(若响应体为 null,调用方会发送 204 No Content)。将 muteException=false 可恢复之前的输出。
这使 camel-knative 与其他 HTTP 系列消费者保持一致(CAMEL-23651)。
在消费者路由中添加一个 onException 处理器,显式设置响应体(例如设置为空响应体或通用消息),
这样框架就永远不会把异常写回给调用方。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该漏洞、验证自己是否受影响,并确认升级可以修复该问题。 失败路由中的“内部”主机名、JDBC URL 和标记令牌均为无实际作用的虚构本地测试数据——不涉及任何真实机密。请勿 将本材料用于您不拥有或运营的系统。