keraattin/CVE-2026-34197
GitHub: keraattin/CVE-2026-34197
一款针对 Apache ActiveMQ Classic 未认证 RCE 漏洞的探测与验证工具,聚焦 Jolokia API 检测与版本评估。
Stars: 0 | Forks: 0
# CVE-2026-34197 — Apache ActiveMQ Classic 通过 Jolokia API 的 RCE
│
│ │
│ │
│ │
└──────────────────────────────────────────┘
```
ActiveMQ 正是按照设计执行操作:加载代理配置。问题在于配置源由攻击者控制,而 Spring XML 本质上是一种代码执行格式。
### 认证缺口
这就是将漏洞从严重提升为危急的关键:
| ActiveMQ 版本 | Jolokia 认证状态 | 影响 |
|:---:|:---:|:---:|
| 5.x(< 5.19.4) | 已认证(默认:admin:admin) | 认证 RCE,通常可轻易绕过 |
| 6.0.0 到 6.1.1 | **完全未认证** | **未认证 RCE** |
| 6.1.2 到 6.2.2 | 已认证 | 认证 RCE |
| 5.19.4+ / 6.2.3+ | 已修复 | 不可利用 |
在 ActiveMQ 6.0.0 到 6.1.1 版本中,Jolokia 端点**完全不需要认证**。任何能够访问 8161 端口的人都可以获得未认证的远程代码执行。
即使在需要认证的版本中,默认凭证 `admin:admin` 也广为人知,且经常在不开发、测试和生产环境中更改。
## 影响分析
**对代理主机的即时影响:**
- 以 ActiveMQ 进程权限的完整远程代码执行
- 访问所有消息队列、主题和存储的消息
- 读取/修改/注入传输中的消息
- 访问配置文件、密钥库和存储的凭证
**通过消息操纵的下游影响:**
- 向处理队列注入恶意消息
- 修改传输中的金融交易、订单或命令
- 拦截流经代理的敏感数据
- 破坏所有依赖消息的服务
**企业风险放大:**
- ActiveMQ 位于使用它的每个应用程序的交汇点
- 单个被攻破的代理可能影响数十个连接的服务
- 消息代理通常部署在具有广泛访问权限的可信网络区域
- 从代理的网络位置进行横向移动非常直接
```
What an attacker can do after exploitation:
┌─────────────────────────────────────────────────────────┐
│ Compromised ActiveMQ Broker │
└────┬───────────┬───────────┬───────────┬──────────┬─────┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
Read/modify Inject Pivot to Intercept Deploy
messages malicious connected creds in persistent
in transit messages systems messages backdoor
```
## 受影响版本
| 版本 | 状态 |
|---------|--------|
| ActiveMQ Classic 6.2.3+ | **已修复** |
| ActiveMQ Classic 5.19.4+ | **已修复** |
| ActiveMQ Classic 6.0.0 到 6.2.2 | **易受攻击**(6.0.0 到 6.1.1 = 未认证) |
| ActiveMQ Classic < 5.19.4 | **易受攻击**(已认证) |
| ActiveMQ Artemis | 未受影响(不同的代码库) |
## 检测
### Python 扫描器
该 Python 脚本通过多步骤分析检测易受攻击的 ActiveMQ 实例。
**工作原理:**
1. **Jolokia 端点检查** — 测试 `/api/jolokia/` 是否无需认证即可访问(HTTP 200 = 开放,401 = 需要认证)
2. **默认凭证测试** — 如果 Jolokia 需要认证,尝试 `admin:admin`、`user:user`、`admin:activemq`
3. **版本检测** — 通过正则表达式匹配从 `/admin/` 和 `/` 页面抓取 ActiveMQ 版本字符串
4. **MBean 可访问性** — 执行安全的 Jolokia 搜索查询,确认 `org.apache.activemq:type=Broker` 路径存在
不发送任何攻击载荷。不执行任何命令。扫描器仅观察端点的可访问性和版本信息。
**用法:**
```
# 安装依赖
pip install -r requirements.txt
# 单个目标
python CVE-2026-34197_ActiveMQ_Jolokia_detector.py -t http://activemq-host:8161
# 使用自定义凭证
python CVE-2026-34197_ActiveMQ_Jolokia_detector.py -t http://10.0.0.1:8161 -u admin -p secret
# 从文件进行批量扫描并输出详细信息
python CVE-2026-34197_ActiveMQ_Jolokia_detector.py -f targets.txt -o results.json -v
# 禁用 SSL 验证的 HTTPS(默认)
python CVE-2026-34197_ActiveMQ_Jolokia_detector.py -t https://activemq-host:8161
# 增加超时以适应慢速网络
python CVE-2026-34197_ActiveMQ_Jolokia_detector.py -t http://10.0.0.1:8161 --timeout 20
```
**选项:**
| 标志 | 说明 | 默认值 |
|------|-------------|---------|
| `-t`, `--target` | 单个目标 URL(例如 `http://host:8161`) | — |
| `-f`, `--file` | 目标 URL 文件,每行一个(支持 `#` 注释) | — |
| `-u`, `--username` | Jolokia 认证用户名 | — |
| `-p`, `--password` | Jolokia 认证密码 | — |
| `-o`, `--output` | 将结果保存为 JSON 文件 | — |
| `--timeout` | 连接超时(秒) | `10` |
| `--verify-ssl` | 启用 SSL 证书验证 | 禁用 |
| `-v`, `--verbose` | 详细输出完整信息 | 关闭 |
**示例输出:**
```
[*] CVE-2026-34197 Apache ActiveMQ Jolokia RCE Scanner
[*] Scanning 1 target(s)...
======================================================================
Target: http://10.0.0.1:8161
Scan Time: 2026-04-14T15:30:00Z
Risk Level: CRITICAL
======================================================================
Jolokia Accessible: YES
Requires Auth: NO (unauthenticated)
ActiveMQ Version: 6.1.0
Vulnerable: YES
Unauth RCE (6.0-6.1): YES — CRITICAL
Broker MBean Access: YES
Details:
- Jolokia API accessible WITHOUT authentication
- Detected ActiveMQ version: 6.1.0
- Version 6.1.0 is in unauthenticated range (6.0.0 - 6.1.1)
CRITICAL: No auth required!
- Broker MBean accessible: [org.apache.activemq:type=Broker,...]
======================================================================
[*] Scan Complete: 1 targets scanned
[*] Vulnerable: 1 | Critical: 1
======================================================================
```
### Nmap NSE 脚本
```
# 安装 NSE 脚本
sudo cp CVE-2026-34197_ActiveMQ_Jolokia.nse /usr/share/nmap/scripts/
sudo nmap --script-updatedb
# 基本扫描
nmap -p 8161 --script CVE-2026-34197_ActiveMQ_Jolokia
# 扫描子网
nmap -p 8161 --script CVE-2026-34197_ActiveMQ_Jolokia 10.0.0.0/24
# 多个常用端口
nmap -p 8161,61616,443,8080 --script CVE-2026-34197_ActiveMQ_Jolokia
# 从文件扫描目标
nmap -p 8161 --script CVE-2026-34197_ActiveMQ_Jolokia -iL targets.txt
# 启用服务版本检测
nmap -sV -p 8161 --script CVE-2026-34197_ActiveMQ_Jolokia
```
**示例 Nmap 输出:**
```
PORT STATE SERVICE
8161/tcp open http
| CVE-2026-34197_ActiveMQ_Jolokia:
| VULNERABLE:
| Apache ActiveMQ Jolokia RCE (CVE-2026-34197)
| State: VULNERABLE
| Risk level: CRITICAL
| ActiveMQ Version: 6.1.0
| Jolokia Accessible: true (unauthenticated)
| Description:
| CRITICAL: Jolokia API is accessible without authentication on
| ActiveMQ 6.1.0, enabling unauthenticated remote code execution
| via addNetworkConnector MBean.
| References:
|_ https://nvd.nist.gov/vuln/detail/CVE-2026-34197
```
### 手动验证
如果希望使用 `curl` 手动检查:
```
# 步骤 1:检查 Jolokia 是否可访问(如果开放应返回 JSON)
curl -sk http://:8161/api/jolokia/ | python3 -m json.tool
# 步骤 2:使用默认凭证检查(如果步骤 1 返回 401)
curl -sk -u admin:admin http://:8161/api/jolokia/ | python3 -m json.tool
# 步骤 3:检查 MBean 可访问性(安全只读查询)
curl -sk http://:8161/api/jolokia/search/org.apache.activemq:type=Broker,brokerName=* \
| python3 -m json.tool
```
如果第一步返回包含 Jolokia 代理信息的 JSON 响应,则端点未认证。如果第二步使用默认凭证成功,则拥有认证访问权限。无论哪种情况,只要代理 MBean 可访问,就存在可利用路径。
## 妥协指标
在环境中观察以下迹象:
| 指标 | 检查位置 | 查找内容 |
|:---|:---|:---|
| Jolokia 访问 | Web 控制台访问日志 | POST 到 `/api/jolokia/` 且包含 `addNetworkConnector` |
| 出站请求 | 网络日志 / 防火墙 | ActiveMQ 向意外外部主机发起的 HTTP 请求 |
| Spring XML 加载 | ActiveMQ 日志 | 对 `xbean:http://` URI 的引用 |
| 网络连接器 | 代理配置 | 您未创建的带有 `brokerConfig` 参数的 `vm://` URI |
| 子进程 | 进程监控 | 由 ActiveMQ Java 进程生成的非预期进程 |
**调查命令:**
```
# 检查 ActiveMQ 日志中的可疑 Jolokia 操作
grep -r "addNetworkConnector\|brokerConfig\|xbean:http" /var/log/activemq/
# 检查运行代理中未预期的网络连接器
curl -sk http://:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost/NetworkConnectors
# 监控 ActiveMQ 进程的未预期出站连接
ss -tnp | grep java
# 检查未预期的子进程
ps aux --forest | grep -A5 activemq
```
## 修复
**立即操作(请立即执行):**
1. **升级 ActiveMQ Classic** 至版本 **5.19.4** 或 **6.2.3**(取决于您的分支)
2. **限制 Jolokia 访问**,通过防火墙规则或反向代理 ACL 阻止对 `/api/jolokia/` 的外部访问
3. **更改默认凭证**,如果您在 Web 控制台上使用 `admin:admin`
**短期(本周内):**
4. **审核 Jolokia 访问日志**,寻找利用迹象(查找 `addNetworkConnector` 操作)
5. **审查所有 ActiveMQ 实例的网络连接器**,查找未经授权的条目
6. **检查从 ActiveMQ 代理主机发起的意外出站连接**
7. **轮换通过代理连接的服务凭证**
**长期:**
8. **对消息代理基础设施进行网络分段**(独立的管理 VLAN)
9. **监控 Jolokia 访问模式**,并对意外 MBean 操作设置告警
10. **将 ActiveMQ 纳入常规漏洞扫描和补丁管理周期**
11. **如不需要 JMX 管理,则完全禁用 Jolokia**,或仅将其绑定到 localhost
## 参考
- [Horizon3.ai — CVE-2026-34197 ActiveMQ RCE via Jolokia API](https://horizon3.ai/attack-research/disclosures/cve-2026-34197-activemq-rce-jolokia/)
- [SecurityWeek — RCE 漏洞在 Apache ActiveMQ Classic 中潜伏 13 年](https://www.securityweek.com/rce-bug-lurked-in-apache-activemq-classic-for-13-years/)
- [Help Net Security — Apache ActiveMQ RCE 漏洞 CVE-2026-34197](https://www.helpnetsecurity.com/2026/04/09/apache-activemq-rce-vulnerability-cve-2026-34197-claude/)
- [CSO Online — Claude 发现一个 13 年前的 ActiveMQ RCE 漏洞](https://www.csoonline.com/article/4157146/claude-uncovers-a-13-year-old-activemq-rce-bug-within-minutes.html)
- [CCB Belgium — 警告:Apache ActiveMQ 的高危漏洞](https://ccb.belgium.be/advisories/warning-high-severity-vulnerability-apache-activemq-patch-immediately)
- [CSA Singapore — Apache ActiveMQ Classic 中的关键漏洞](https://www.csa.gov.sg/alerts-and-advisories/alerts/al-2026-034/)
- [GBHackers — Claude 识别关键 13 年旧 RCE 漏洞](https://gbhackers.com/claude-identifies-critical-13-year-old-rce-vulnerability-in-apache-activemq/)
## 作者
**Kerem Oruç** — 网络安全工程师
- GitHub:[@keraattin](https://github.com/keraattin)
- Twitter:[@keraattin](https://twitter.com/keraattin)
- │
│
标签:13年漏洞, ActiveMQ Classic, addNetworkConnector, AI辅助发现, Apache ActiveMQ, CVE-2026-34197, CVSS 8.8, CWE-94, JMX, Jolokia, MBean, Nmap NSE, Python 扫描器, RCE, Spring XML, URL发现, 修复版本 5.19.4, 修复版本 6.2.3, 安全检测, 影响版本 6.0.0-6.1.1, 数据泄露防护, 未认证, 编程工具, 网络探测, 远程代码执行, 远程文件包含, 逆向工具, 零点击, 高危漏洞