由JSON CSRF到FormData攻击
字数 2056 2025-08-26 22:11:40
Apache ActiveMQ 远程代码执行漏洞(CVE-2023-46604)分析与防护指南
1. 漏洞概述
CVE-2023-46604是Apache ActiveMQ中的一个严重远程代码执行漏洞,影响多个版本。该漏洞源于OpenWire协议命令解析机制缺陷,允许攻击者通过构造恶意数据包在目标服务器上执行任意代码。
2. 受影响版本
- Apache ActiveMQ 5.18.0 - 5.18.3
- Apache ActiveMQ 5.17.0 - 5.17.6
- Apache ActiveMQ 5.16.0 - 5.16.7
- Apache ActiveMQ 5.15.0 - 5.15.16
- Apache ActiveMQ 5.10.0 - 5.10.16(已停止支持)
- 更早版本(已停止支持)
3. 漏洞原理
3.1 技术根源
漏洞存在于OpenWire协议命令的解析过程中,具体在BaseDataStreamMarshaller#createThrowable()方法中。当反序列化异常信息时,系统未对类名进行有效验证,导致可加载任意类。
3.2 攻击向量
攻击者通过构造恶意OpenWire数据包,在exception字段中指定恶意类名和参数:
- 恶意类必须实现
Throwable接口 - 利用
ClassPathXmlApplicationContext加载外部XML配置文件 - 通过Spring XML配置执行系统命令
3.3 利用流程
- 建立与ActiveMQ的OpenWire协议连接(默认端口61616)
- 发送恶意构造的OpenWire命令
- 服务端反序列化时触发恶意类加载
- 执行Spring XML配置中定义的系统命令
4. 漏洞复现
4.1 环境搭建
# 下载受影响版本
wget https://archive.apache.org/dist/activemq/5.18.0/apache-activemq-5.18.0-bin.tar.gz
# 解压并启动
tar -zxvf apache-activemq-5.18.0-bin.tar.gz
cd apache-activemq-5.18.0/bin
./activemq start
4.2 利用工具
使用公开的PoC工具进行测试:
java -jar activemq-rce.jar [目标IP] [命令]
4.3 恶意XML配置示例
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.lang.ProcessBuilder">
<constructor-arg value="calc.exe"/>
<property name="whatever" value="#{ pb.start() }"/>
</bean>
</beans>
5. 防护措施
5.1 紧急缓解方案
方案一:防火墙限制
# 禁止外部访问OpenWire端口(默认61616)
iptables -A INPUT -p tcp --dport 61616 -j DROP
# 或仅允许可信IP访问
iptables -A INPUT -p tcp --dport 61616 -s [可信IP] -j ACCEPT
iptables -A INPUT -p tcp --dport 61616 -j DROP
方案二:配置文件修改
在activemq.xml中禁用OpenWire协议:
<transportConnectors>
<!-- 注释或删除以下配置 -->
<!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> -->
</transportConnectors>
5.2 彻底修复方案
升级到安全版本
- 升级至Apache ActiveMQ 5.18.4或更高版本
- 升级至Apache ActiveMQ 5.17.7或更高版本
- 升级至Apache ActiveMQ 5.16.8或更高版本
升级步骤
- 备份当前配置和数据
- 下载最新版本:https://activemq.apache.org/download.html
- 停止ActiveMQ服务
- 替换二进制文件
- 恢复配置文件
- 启动并验证服务
5.3 检测方法
日志检查
检查activemq.log中是否存在异常反序列化记录:
WARN | Failed to build command from wire format
网络流量检测
监控OpenWire端口的异常连接请求和异常类名加载行为
6. 漏洞分析深度解读
6.1 反序列化机制缺陷
ActiveMQ使用自定义的OpenWire协议序列化机制,而非Java原生序列化。在解析ExceptionResponse命令时,BaseDataStreamMarshaller#createThrowable()方法直接使用Class.forName()加载指定类名,未进行安全检查。
6.2 Spring框架利用链
攻击者利用Spring的XML配置机制实现代码执行:
- 通过ClassPathXmlApplicationContext加载远程XML
- XML中定义ProcessBuilder等可执行类
- Spring表达式语言(SpEL)触发命令执行
6.3 绕过限制的技术细节
即使目标环境无法出网,攻击者仍可通过本地XML文件执行攻击:
new ClassPathXmlApplicationContext("classpath:恶意配置文件.xml")
7. 应急响应流程
7.1 确认影响范围
- 检查服务器是否开放61616端口
- 确认ActiveMQ版本是否受影响
- 检查日志中是否存在攻击痕迹
7.2 处置措施
- 立即隔离受影响服务器
- 备份日志和系统状态
- 升级或实施缓解措施
- 进行全面安全检测
7.3 恢复运营
- 验证修复效果
- 监控系统运行状态
- 持续关注安全更新
8. 参考资源
- Apache官方安全公告:https://activemq.apache.org/security-advisories.data/CVE-2023-46604-announcement.txt
- NVD漏洞详情:https://nvd.nist.gov/vuln/detail/CVE-2023-46604
- 漏洞分析原文:https://xz.aliyun.com/news/5664
附录:常见问题解答
Q: 无法立即升级怎么办?
A: 优先采用网络隔离措施,限制OpenWire端口访问,并尽快安排升级。
Q: 如何检测是否被利用?
A: 检查日志中的异常反序列化记录,监控异常进程创建行为。
Q: 其他消息队列组件是否受影响?
A: 目前仅确认Apache ActiveMQ受影响,但建议检查其他使用类似机制的组件。
本文档基于公开漏洞信息和技术分析编写,仅供安全研究和防护使用。请勿用于非法用途。