文章总结: CVE-2026-40860是ApacheCamel中多个JMS组件存在的严重不安全反序列化漏洞,CVSS评分9.8。漏洞源于JmsBinding.extractBodyFromJms()方法在处理ObjectMessage时未加过滤直接反序列化,攻击者可构造恶意消息实现远程代码执行。影响版本包括camel-jms等组件从3.0.0到4.20.0之前版本。官方已发布修复版本4.14.7、4.18.2和4.20.0,建议立即升级并配置反序列化过滤器。 综合评分: 100 文章分类: 漏洞分析,WEB安全,应用安全,安全工具
CVE-2026-40860-ApacheCamel-JMS反序列化RCE 漏洞分析报告
md-bot md-bot
Sec打更人
2026年7月10日 19:51 广东
在小说阅读器读本章
去阅读
CVE-2026-40860 漏洞分析报告
CVE编号:CVE-2026-40860
标题:CVE-2026-40860-ApacheCamel-JMS反序列化RCE
创建时间:2026-07-10T17:17:23.013658+08:00
漏洞描述
该漏洞是Apache Camel中多个JMS相关组件(包括camel-jms、camel-sjms、camel-sjms2、camel-amqp、camel-activemq和camel-activemq6)存在的一个严重的不安全反序列化漏洞,被分配编号CVE-2026-40860。漏洞的核心成因在于camel-jms组件中的JmsBinding.extractBodyFromJms()方法,以及camel-sjms组件中对应的JmsBinding类,在处理接收到的JMS ObjectMessage时,直接调用了javax.jms.ObjectMessage.getObject()方法进行反序列化。getObject()方法默认会使用Java原生的ObjectInputStream.readObject()来解析消息体中的二进制数据,而Camel在这些组件的处理逻辑中,并未在调用getObject()之前或之后施加任何有效的ObjectInputFilter、类白名单或黑名单来限制可被反序列化的类。这意味着,当Camel应用作为JMS消费者,并且其mapJmsMessage选项保持默认的true状态时(这是默认配置),任何接收到ObjectMessage类型的JMS消息,其消息体中的对象都会被无差别地反序列化。攻击者如果能够向目标Camel应用所监听的JMS队列或主题中发布一条精心构造的ObjectMessage,该消息的载荷中包含一个恶意的反序列化Gadget链。当Camel消费者消费这条消息,并触发extractBodyFromJms方法进行反序列化时,这个Gadget链会在反序列化过程中自动执行,导致攻击者可以在目标服务器上执行任意代码。该漏洞的影响范围不仅限于camel-jms,还通过继承关系影响到了camel-sjms2(因为Sjms2Endpoint继承自SjmsEndpoint)和camel-amqp(因为AMQPJmsBinding继承自JmsBinding),以及其他基于JmsComponent构建的组件,如camel-activemq和camel-activemq6,使得该漏洞的潜在影响面十分广泛。成功利用此漏洞,攻击者可以实现远程代码执行,完全控制受影响的服务器,CVSS评分为9.8(严重)。
CVE-2026-40860-ApacheCamel-JMS反序列化RCE
漏洞类型:不安全的反序列化影响应用:Apache Camel危害等级:严重,可导致远程代码执行,完全控制服务器影响版本:camel-jms/camel-sjms/camel-sjms2/camel-amqp/camel-activemq/camel-activemq6 从3.0.0到4.14.7之前,从4.15.0到4.18.2之前,从4.19.0到4.20.0之前利用条件:需要目标应用作为JMS消费者运行,并且攻击者能够向目标消费的队列或主题发布消息。同时目标应用的类路径中需要存在可用于反序列化的Gadget链(如CommonsCollections)。POC 可用性:是投毒风险:1%项目地址:oscerd/CVE-2026-40860漏洞详情:NVD数据库
详情
该漏洞是Apache Camel中多个JMS相关组件(包括camel-jms、camel-sjms、camel-sjms2、camel-amqp、camel-activemq和camel-activemq6)存在的一个严重的不安全反序列化漏洞,被分配编号CVE-2026-40860。漏洞的核心成因在于camel-jms组件中的JmsBinding.extractBodyFromJms()方法,以及camel-sjms组件中对应的JmsBinding类,在处理接收到的JMS ObjectMessage时,直接调用了javax.jms.ObjectMessage.getObject()方法进行反序列化。getObject()方法默认会使用Java原生的ObjectInputStream.readObject()来解析消息体中的二进制数据,而Camel在这些组件的处理逻辑中,并未在调用getObject()之前或之后施加任何有效的ObjectInputFilter、类白名单或黑名单来限制可被反序列化的类。这意味着,当Camel应用作为JMS消费者,并且其mapJmsMessage选项保持默认的true状态时(这是默认配置),任何接收到ObjectMessage类型的JMS消息,其消息体中的对象都会被无差别地反序列化。攻击者如果能够向目标Camel应用所监听的JMS队列或主题中发布一条精心构造的ObjectMessage,该消息的载荷中包含一个恶意的反序列化Gadget链。当Camel消费者消费这条消息,并触发extractBodyFromJms方法进行反序列化时,这个Gadget链会在反序列化过程中自动执行,导致攻击者可以在目标服务器上执行任意代码。该漏洞的影响范围不仅限于camel-jms,还通过继承关系影响到了camel-sjms2(因为Sjms2Endpoint继承自SjmsEndpoint)和camel-amqp(因为AMQPJmsBinding继承自JmsBinding),以及其他基于JmsComponent构建的组件,如camel-activemq和camel-activemq6,使得该漏洞的潜在影响面十分广泛。成功利用此漏洞,攻击者可以实现远程代码执行,完全控制受影响的服务器,CVSS评分为9.8(严重)。
漏洞利用
该漏洞的利用方式是基于Java反序列化攻击。攻击流程如下:
- **环境准备**:攻击者需要先识别出目标环境是否使用了存在漏洞的Apache Camel版本,并确认其作为一个JMS消费者运行,监听一个攻击者可以发布消息的队列或主题。此外,攻击者需要分析目标应用运行时的类路径(classpath),确认是否存在可用于反序列化攻击的Gadget库(例如
commons-collections:3.2.1、commons-beanutils等)。 - **构造恶意对象**:攻击者使用工具如
ysoserial或手动编写Java代码,根据目标环境中存在的Gadget链,生成一个序列化后的字节流,该字节流在反序列化时会执行攻击者预设的命令(例如,反向Shell、执行系统命令、写入文件等)。 - **发送恶意JMS消息**:攻击者作为JMS客户端,连接到同一个JMS代理(如ActiveMQ、Artemis等),并向目标Camel应用正在监听的队列或主题发送一个
ObjectMessage,并将上一步生成的恶意字节流作为该消息的载荷。在某些环境中,JMS代理可能默认或配置为trustAllPackages=true(即信任所有包),这会让代理允许反序列化任何类,从而使得攻击步骤更加容易。 - **触发反序列化**:目标Camel应用作为消费者,从队列中拉取或接收到这条恶意消息。当Camel的
JmsBinding.extractBodyFromJms()方法被调用处理此消息时,它会调用ObjectMessage.getObject()。这触发了JMS提供商的ObjectInputStream.readObject(),开始反序列化攻击者构造的恶意载荷。 - **远程代码执行**:在反序列化过程中,Gadget链被激活,执行了攻击者预设的命令,从而实现远程代码执行。
**POC说明**:提供的POC代码完整地复现了上述攻击流程。
* **受害者**:POC使用camel-jms:4.18.1版本创建了一个Camel JMS消费者,监听名为evil的队列。为了简化演示,POC将一个包含CommonsCollections6 Gadget链的依赖commons-collections:3.2.1显式地添加到了项目类路径中。
* **攻击者**:POC通过一个ExploitController(一个HTTP端点)模拟攻击者。当访问/exploit/attack时,该控制器会创建一个ObjectMessage,并将其载荷设置为在内存中构建的CommonsCollections6 Gadget对象(这个Gadget链会执行touch /tmp/pwned命令)。然后,它将这个ObjectMessage发布到evil队列。
* **验证**:消费者消费消息后,反序列化被执行,/tmp/pwned文件被创建。通过检查该文件是否存在即可验证漏洞利用成功。POC文件中的Dockerfile和docker-compose.yml配置了一个完整的运行环境,包括一个Apache ActiveMQ Artemis代理和漏洞应用,使得整个复现过程可以一键式启动。
修复建议
Apache官方已发布修复版本,对应的修复版本为:4.14.7(针对4.14.x LTS版本)、4.18.2(针对4.18.x版本)和4.20.0(最新版本)。用户应尽快将受影响的组件升级到这些修复版本。
加固方法:
- **升级Camel版本**:按照官方建议升级到4.14.7、4.18.2或4.20.0。这些版本默认添加了一个
ObjectInputFilter白名单(java.\*\*;javax.\*\*;org.apache.camel.\*\*;!\*),可以有效阻止Camel不期望的类被反序列化,从而阻断大部分Gadget链。 - **配置JVM级别的反序列化过滤器**:在应用启动时,通过JVM参数
-Djdk.serialFilter设置一个全局的白名单过滤器,例如-Djdk.serialFilter=java.\*\*;org.apache.camel.\*\*;!\*。这是最根本的防护措施,可以阻止任何未授权的类反序列化。 - **配置JMS提供商的反序列化过滤**:对于ActiveMQ等JMS提供商,应严格配置其
trustedPackages选项,只允许信任的包中的类进行反序列化。严禁在生产环境中设置trustAllPackages=true,这等于完全开放了反序列化攻击的入口。 - **使用新的端点选项**:在修复版本中,Camel引入了新的端点选项
deserializationFilter,允许用户为特定的JMS端点单独配置反序列化过滤器,从而实现更精细的控制。 - **临时缓解措施**:
* **避免使用ObjectMessage**:如果业务允许,可以配置Camel JMS消费者,使用mapJmsMessage=false来禁用ObjectMessage的反序列化,转而使用TextMessage、BytesMessage等更安全的消息类型。
* **移除危险库**:从应用的类路径中移除不必要且已知可用于构造Gadget链的库,如commons-collections、commons-beanutils、spring-aop等旧版本。
* **网络隔离**:限制不受信任的网络实体对JMS代理的访问,特别是禁止他们向关键队列发布消息。
–
相关仓库
- oscerd/CVE-2026-40860
URL:https://github.com/oscerd/CVE-2026-40860
描述:Reproducer for CVE-2026-40860 — Apache Camel camel-jms/sjms/amqp JMS ObjectMessage unsafe deserialization (RCE)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Sec打更人 md-bot md-bot《CVE-2026-40860-ApacheCamel-JMS反序列化RCE 漏洞分析报告》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论