Yucaerin/CVE-2026-5118

GitHub: Yucaerin/CVE-2026-5118

针对 WordPress Divi Form Builder 插件未授权权限提升漏洞(CVE-2026-5118)的概念验证利用工具,支持单目标利用与多线程批量扫描。

Stars: 0 | Forks: 1

# CVE-2026-5118 — Divi Form Builder <= 5.1.2 — 通过 Role Injection 实现的未经身份验证的权限提升 🔥 **漏洞概述** WordPress 插件 **Divi Form Builder** **<= 5.1.2** 版本存在一个**未经身份验证的权限提升**漏洞。这个严重缺陷允许**未经身份验证的攻击者**直接通过任何 Divi Form Builder 表单(包括联系表单、报价表单、简报纸表单或任何其他启用 DFB 的表单)创建新的**管理员**账号。 该漏洞源于 `FormSubmissionHandler.php` 中的 `create_user()` 函数,该函数直接接受用户提交的 POST 数据中的 `role` 参数,而没有进行适当的授权或白名单验证。该插件仅检查提交的 role 在系统中**是否存在**(例如,`administrator` 是一个有效的 WordPress role)——而从不检查该 role 对于公开注册是否**安全**。 **突破性发现:** Divi Form Builder 使用的 `fb_nonce` 是一个**全局共享的 nonce** (`wp_create_nonce('security')`) ——在网站上的所有表单中都是相同的。此外,`form_type=register` 可以**通过 POST 覆盖**到共享的 AJAX handler 中。这意味着任何 DFB 表单(联系、报价、反馈等)都可以被武器化,从而触发带有任意 role 分配的用户注册。 🔍 **受影响的插件** - **插件名称:** Divi Form Builder - **受影响版本:** <= 5.1.2 - **漏洞类型:** 通过 Role Injection 实现的未经身份验证的权限提升 - **CVE ID:** CVE-2026-5118 - **CVSS 评分:** 9.8(严重) - **CWE:** CWE-266 — 权限分配不当 - **影响:** 完全接管网站 — 创建管理员账号 🧨 **攻击者可以做什么** | 能力 | 影响 | |---|---| | 🔑 无需登录创建管理员账号 | **完全接管网站** | | 📦 访问 WooCommerce 客户数据 | **数据泄露** | | 💉 编辑插件/主题 PHP 文件 | **远程代码执行** | | 🕳️ 安装隐藏的后门 | **持久化访问** | | 👥 查看所有用户数据 | **隐私泄露** | 🧪 **利用特性** - 🔓 **无需身份验证** - 📝 **可通过任何 DFB 表单工作** — 联系、报价、简报、反馈等 - 🎯 **针对 AJAX endpoint** `/wp-admin/admin-ajax.php?action=de_fb_ajax_submit_ajax_handler` - 🧠 **Role injection** — 在正常表单字段旁边提交 `role=administrator` - 🌐 **支持批量扫描** — 具有自动发现功能的多线程多目标扫描器 - 📄 **结果保存至** `result.txt` 🧠 **存在漏洞的代码** ``` // includes/shared/handlers/FormSubmissionHandler.php ~ line 2250 $role = isset($form_data['role']) ? sanitize_text_field($form_data['role']) : 'subscriber'; // ~ line 2278 — ONLY checks if role EXISTS, not if it is SAFE $roles_obj = function_exists('wp_roles') ? wp_roles() : null; if ($roles_obj && is_object($roles_obj) && is_array($roles_obj->roles) && !isset($roles_obj->roles[$role])) { $role = 'subscriber'; // ← "administrator" EXISTS, so this check PASSES } // ~ line 2301 — Directly applies the injected role $user = new WP_User($user_id); $user->set_role($role); // ← PRIVILEGE ESCALATION! ``` 🚀 **用法** ### 单一目标 ``` python3 exploit.py -t http://target.com python3 exploit.py -t https://target.com -u hacker -p Pass123! -e hack@proton.me ``` ### 批量扫描(不带 http/https 的列表) 创建 `targets.txt`: ``` target1.com target2.com:8080 192.168.1.50 subdomain.target.com ``` ``` python3 exploit.py -l targets.txt -T 20 ``` ### 选项 | 标志 | 描述 | |---|---| | `-t, --target` | 单一目标 URL | | `-l, --list` | 包含目标列表的文件(每行一个,http/https 可选) | | `-T, --threads` | 用于批量扫描的线程数(默认:10) | | `-o, --output` | 输出结果的文件(默认:`result.txt`) | | `-u, --username` | 新账号的自定义用户名 | | `-p, --password` | 新账号的自定义密码 | | `-e, --email` | 新账号的自定义电子邮件 | | `-v, --verbose` | 详细的调试输出 | | `--no-confirm` | 跳过权限确认提示 | 🛠 **修复建议** ``` // SECURE: Allowlist only safe roles for public registration $allowed_registration_roles = array('subscriber', 'contributor'); if (!in_array($role, $allowed_registration_roles, true)) { $role = 'subscriber'; // ← Reject ALL dangerous roles } ``` - 完全移除前端表单中的 `role` 隐藏输入 - 为高权限 role 添加 `current_user_can('create_users')` 能力检查 - 实施严格的作用域为单个表单的 nonce 验证,而不是全局 nonce - 在注册 AJAX endpoint 上添加速率限制 🧠 **研究员** - 鸣谢:[0xd4rk5id3](https://www.wordfence.com/threat-intel/vulnerabilities/researchers/0xd4rk5id3) 📚 **参考** - [Wordfence 公告](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/divi-form-builder/divi-form-builder-512-unauthenticated-privilege-escalation-via-role) - [原始 CVE 仓库](https://github.com/zycoder0day/CVE-2026-5118) 🔒 **免责声明:** 此信息仅供**教育**和**授权的渗透测试**目的使用。未经授权利用计算机系统是非法且不道德的。在测试您不拥有的任何目标之前,请务必获得明确的书面许可。
标签:Web安全, WordPress插件, 协议分析, 威胁模拟, 文件完整性监控, 无服务器架构, 权限提升, 漏洞披露, 蓝队分析, 逆向工具