由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 利用流程

  1. 建立与ActiveMQ的OpenWire协议连接(默认端口61616)
  2. 发送恶意构造的OpenWire命令
  3. 服务端反序列化时触发恶意类加载
  4. 执行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&amp;wireFormat.maxFrameSize=104857600"/> -->
</transportConnectors>

5.2 彻底修复方案

升级到安全版本

  • 升级至Apache ActiveMQ 5.18.4或更高版本
  • 升级至Apache ActiveMQ 5.17.7或更高版本
  • 升级至Apache ActiveMQ 5.16.8或更高版本

升级步骤

  1. 备份当前配置和数据
  2. 下载最新版本:https://activemq.apache.org/download.html
  3. 停止ActiveMQ服务
  4. 替换二进制文件
  5. 恢复配置文件
  6. 启动并验证服务

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配置机制实现代码执行:

  1. 通过ClassPathXmlApplicationContext加载远程XML
  2. XML中定义ProcessBuilder等可执行类
  3. Spring表达式语言(SpEL)触发命令执行

6.3 绕过限制的技术细节

即使目标环境无法出网,攻击者仍可通过本地XML文件执行攻击:

new ClassPathXmlApplicationContext("classpath:恶意配置文件.xml")

7. 应急响应流程

7.1 确认影响范围

  1. 检查服务器是否开放61616端口
  2. 确认ActiveMQ版本是否受影响
  3. 检查日志中是否存在攻击痕迹

7.2 处置措施

  1. 立即隔离受影响服务器
  2. 备份日志和系统状态
  3. 升级或实施缓解措施
  4. 进行全面安全检测

7.3 恢复运营

  1. 验证修复效果
  2. 监控系统运行状态
  3. 持续关注安全更新

8. 参考资源

  1. Apache官方安全公告:https://activemq.apache.org/security-advisories.data/CVE-2023-46604-announcement.txt
  2. NVD漏洞详情:https://nvd.nist.gov/vuln/detail/CVE-2023-46604
  3. 漏洞分析原文:https://xz.aliyun.com/news/5664

附录:常见问题解答

Q: 无法立即升级怎么办?
A: 优先采用网络隔离措施,限制OpenWire端口访问,并尽快安排升级。

Q: 如何检测是否被利用?
A: 检查日志中的异常反序列化记录,监控异常进程创建行为。

Q: 其他消息队列组件是否受影响?
A: 目前仅确认Apache ActiveMQ受影响,但建议检查其他使用类似机制的组件。


本文档基于公开漏洞信息和技术分析编写,仅供安全研究和防护使用。请勿用于非法用途。

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 环境搭建 4.2 利用工具 使用公开的PoC工具进行测试: 4.3 恶意XML配置示例 5. 防护措施 5.1 紧急缓解方案 方案一:防火墙限制 方案二:配置文件修改 在 activemq.xml 中禁用OpenWire协议: 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 中是否存在异常反序列化记录: 网络流量检测 监控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文件执行攻击: 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受影响,但建议检查其他使用类似机制的组件。 本文档基于公开漏洞信息和技术分析编写,仅供安全研究和防护使用。请勿用于非法用途。