CVE-2026-83531
Apache Camel:Camel-Dynamic-Router 控制端点编译由控制消息提供的谓词表达式
- 已发布
- 2026年10月19日
- 已更新
- 2026年10月20日
- 分配 CNA
- apache
- 观察到的证据
- 2026年10月19日
初级CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H低 · 未来 30 天
- 百分位
- 57.9%
- 型号日期
- 2026年10月25日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
Apache Camel 中存在“代码生成控制不当(‘代码注入’)”以及“表达式语言语句中特殊元素中和不当(‘表达式语言注入’)”漏洞。此问题影响 Apache Camel:从 4.4.0 到 4.18.5 之前的版本,以及从 4.19.0 到 4.22.1 之前的版本。4.4.0 中引入的 dynamic-router-control 端点允许路由参与者通过发送控制消息来管理 Dynamic Router 订阅。当处理订阅或更新请求时,DynamicRouterControlProducer 会从传入消息中获取订阅谓词以及用于编译该谓词的语言名称,来源可以是 DynamicRouterControlMessage 正文中的 predicate 和 expressionLanguage 字段,也可以是 CamelDynamicRouterPredicate 和 CamelDynamicRouterExpressionLanguage 消息头。随后,DynamicRouterControlService 会从 CamelContext 中解析该语言,并将表达式编译为 Predicate,整个过程没有允许列表,也没有选择加入机制。编译后的谓词会被添加到通道的规则库中,并在订阅存在期间,对通过相应 dynamic-router 端点路由的每个 exchange 进行求值。因此,如果某条路由将来自外部传输的消息转发到控制端点(如组件文档中针对其他 JVM 或应用程序中的路由参与者所示),那么任何能够在该传输上发送消息的行为者都可以提供自己选择的表达式,而该表达式会以 Camel 进程的权限进行求值。类路径上可用的任何表达式语言都可能被选中,包括始终存在且在消息头路径上作为默认值的 simple 语言,因此从类路径中移除可选的表达式语言并不能防止该问题。利用该漏洞需要能够在一个传输上发送消息,且该传输的路由会将其转发到 dynamic-router-control 端点;不需要其他身份验证或用户交互。4.4.0 之前的版本不受影响,因为其控制通道仅从路由作者配置的端点 URI 中获取谓词表达式。建议用户升级到 4.23.0 版本,该版本修复了此问题。如果用户使用 4.22.x 发布流,建议升级到 4.22.1。如果用户使用 4.18.x 发布流,建议升级到 4.18.5。4.14.x 发布流及更早版本在此问题解决之前已达到生命周期终止,不会收到修复,因此这些线路上的部署必须迁移到受支持的版本。升级后,除非在 dynamic-router-control 端点上启用新的 allowPredicateFromMessage 选项,否则携带谓词表达式或表达式语言的控制消息将被拒绝;仅当所有控制消息发送者都可信时才应启用该选项。对于无法立即升级的部署,请勿将来自不受信任或共享传输的消息转发到 dynamic-router-control 端点。如果控制消息必须经过此类传输,请对发送者进行身份验证,并确保每个订阅的谓词和表达式语言由路由设置,而不是取自传入消息,例如在消息到达端点之前移除 CamelDynamicRouterPredicate 和 CamelDynamicRouterExpressionLanguage 消息头,并清除 DynamicRouterControlMessage 的 predicate 和 expressionLanguage 字段。从类路径中移除可选的表达式语言并不是充分的缓解措施。作为纵深防御,应限制谁可以向为控制端点提供输入的传输发送消息,并在 4.23.0 和 4.22.1 上设置 dynamic-router 端点的 allowedSchemes 选项,以限制订阅的 destinationUri 可以指定的端点。
来源
针对 CVE-2026-83531 的可运行 Spring Boot 概念验证,演示 Apache Camel 的 dynamic-router-control 端点中的表达式语言注入,并验证修复。
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。