CVE-2026-78165
Apache Camel:Camel-Spring-Redis 对 Redis 载荷的未过滤 Java 反序列化
- 已发布
- 2026年10月19日
- 已更新
- 2026年10月20日
- 分配 CNA
- apache
- 观察到的证据
- 2026年10月17日
初级CVSS
cvelist · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H总结
Apache Camel Spring Redis 组件中的不可信数据反序列化漏洞。此问题影响 Apache Camel:从 2.11.0 到 4.18.5 之前,从 4.19.0 到 4.22.1 之前。当未配置任何 serializer 选项时,RedisConfiguration.getSerializer 会延迟构建一个裸的 JdkSerializationRedisSerializer,并且该实例被用于组件执行的每一次读取。Spring 的实现通过 DeserializingConverter 委托给 DefaultDeserializer,后者使用 ConfigurableObjectInputStream 读取字节,并且没有在流上安装 java.io.ObjectInputFilter,因此任意序列化的类图都会被实例化,其 readObject 方法也会被执行。RedisConsumer.setBody 将该序列化器应用于发布到订阅频道的每条消息的原始字节,这一过程发生在 Exchange 构建之前,因此也发生在任何路由逻辑能够检查消息之前,所以能够对已订阅频道发出 PUBLISH 的攻击者可以直接到达反序列化汇聚点。同一个默认序列化器也支撑着由 RedisConfiguration.createDefaultTemplate 构建的 RedisTemplate,因此生产者读取命令 GET、HGET、HGETALL 和 HVALS 会反序列化 Redis 键空间中存储的任何内容,并且 SpringRedisIdempotentRepository 共享该模板。配置自定义 redisTemplate 并不能关闭消费者路径,因为 RedisConsumer.setBody 直接读取 getSerializer,而不是读取附加到模板上的序列化器,因此即使某个部署已将 String 序列化器接入自己的模板,除非它同时设置了 serializer 选项,否则在消费者侧仍然暴露。该组件本身从未构造 java.io.ObjectInputStream,这就是为什么此前对 Camel 代码库进行的未过滤 Java 反序列化排查没有触及它。该行为可追溯到该组件引入之时,该组件首次发布于 2.11.0,并且在此修复之前一直未改变。建议用户升级到 4.23.0 版本,该版本修复了此问题。如果用户处于 4.22.x 发布流,则建议升级到 4.22.1。如果用户处于 4.18.x 发布流,则建议升级到 4.18.5。4.14.x 发布流及更早版本在此问题解决之前已达到生命周期终止,将不会收到修复,因此处于这些线路上的部署必须迁移到受支持的版本。对于无法立即升级的部署,请设置 JVM 范围的 jdk.serialFilter 系统属性,受影响的代码路径会遵守该属性,因为它通过 java.io.ObjectInputStream 读取,例如 -Djdk.serialFilter=!java.net.**;java.**;javax.**;org.apache.camel.**;!* ;或者将 serializer 端点选项设置为不使用 Java 序列化的序列化器,例如 StringRedisSerializer,注意必须将其设置为 serializer 选项,而不能仅设置在自定义 redisTemplate 上。作为纵深防御,请在 Redis 实例上要求身份验证,并限制哪些客户端可以向订阅频道发布,并且不要将 Camel 使用的 Redis 实例暴露到不可信网络。
来源
针对 CVE-2026-78165 的可运行概念验证复现程序,演示 Apache Camel camel-spring-redis 中对 Redis PUBLISH 载荷进行未过滤的 JDK 反序列化。
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。