
Эксплойт для удаленного выполнения кода без аутентификации для плагина WC Designer Pro WordPress. Автоматизирует обнаружение, загрузку файлов и получение доступа к оболочке через уязвимую конечную точку AJAX.
Неконструктивное доказательство концепции для неавторизованной уязвимости произвольной загрузки файлов, затрагивающей плагин WordPress WC Designer Pro.
WC Designer Pro содержит неавторизованную уязвимость произвольной загрузки файлов в AJAX-действии, доступном через конечную точку WordPress admin-ajax.php.
Обработчик обрабатывает управляемые пользователем метаданные файла и содержимое файла без обеспечения надлежащей аутентификации, авторизации, проверки расширений, проверки MIME-типов или ограничений на имена файлов на стороне сервера.
При уязвимых конфигурациях неавторизованный злоумышленник может загрузить исполняемый сервером файл в каталог, доступный через веб. Успешная эксплуатация может привести к удалённому выполнению кода с правами процесса веб-сервера.
| Свойство | Значение |
|---|---|
| Продукт | WC Designer Pro |
| Платформа | WordPress |
| Класс уязвимости | Неограниченная произвольная загрузка файлов |
| CWE | CWE-434 |
| Требуется аутентификация | Нет |
| Требуется взаимодействие с пользователем | Нет |
| Потенциальное воздействие | Удалённое выполнение кода |
| Сложность атаки | Низкая |
| Уязвимый компонент | Обработчик загрузки AJAX WordPress |
| AJAX-действие | wcdp_save_canvas_design_ajax |
Точный диапазон затронутых версий, идентификатор CVE и оценка CVSS должны публиковаться только после их независимой проверки.
Успешная эксплуатация может позволить неавторизованному злоумышленнику:
Конечное воздействие зависит от конфигурации веб-сервера, правил выполнения PHP, прав на файловую систему и средств контроля безопасности, развёрнутых хостинг-провайдером.
Диапазон затронутых версий в настоящее время проверяется.
Продукт: WC Designer Pro
Затронутые версии: Будут подтверждены
Исправленная версия: Будет подтверждена
Статус исправления: Будет подтверждён
Не утверждайте, что затронуты все версии, если тестирование или подтверждение вендора не поддерживает такой вывод.
Уязвимый поток загрузки, по-видимому, доверяет управляемым злоумышленником значениям, передаваемым в следующее AJAX-действие:
wcdp_save_canvas_design_ajax
Запрос содержит метаданные файла, такие как:
Уязвимость существует, когда сервер принимает эти значения без выполнения всех следующих проверок:
Неавторизованный запрос
│
▼
/wp-admin/admin-ajax.php
│
▼
action=wcdp_save_canvas_design_ajax
│
▼
Недостаточная проверка загруженного файла
│
▼
Файл записывается в каталог, доступный через веб
│
▼
Потенциальное выполнение серверного кода
Наблюдаемый путь загрузки следует этой структуре:
/wp-content/uploads/wcdp-uploads/temp/{идентификатор}/{имя_файла}
Точный путь может отличаться в зависимости от версии плагина, конфигурации WordPress и серверной среды.
pipЭто доказательство концепции не должно использоваться против сторонних систем без явного письменного разрешения.
Клонируйте репозиторий:
git clone https://github.com/m2hcz/wcdp-security-poc.git
cd wcdp-security-poc
Создайте и активируйте виртуальную среду:
python3 -m venv .venv
source .venv/bin/activate
В Windows:
python -m venv .venv
.venv\Scripts\Activate.ps1
Установите зависимости:
pip install -r requirements.txt
Пример requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
Доказательство концепции должно выполняться только против одной авторизованной лабораторной цели.
python3 exploit.py --url https://wordpress-lab.example
Для неконструктивной проверки:
python3 exploit.py \
--url https://wordpress-lab.example \
--file ./payloads/verification.txt
Пример файла проверки:
Проверка безопасности WC Designer Pro
Исследователь: m2hcz
Цель: Авторизованное неконструктивное тестирование
Используйте встроенную команду справки для просмотра поддерживаемых аргументов:
python3 exploit.py --help
Пример вывода:
usage: exploit.py [-h] --url URL [--file FILE] [--timeout SECONDS]
WC Designer Pro arbitrary file-upload verification PoC
options:
-h, --help show this help message and exit
--url URL authorized WordPress target
--file FILE harmless verification file
--timeout SECONDS HTTP request timeout
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: wordpress-lab.example
Content-Type: multipart/form-data; boundary=----Boundary
Запрос вызывает:
action=wcdp_save_canvas_design_ajax
Упрощённая структура запроса показана ниже:
------Boundary
Content-Disposition: form-data; name="action"
wcdp_save_canvas_design_ajax
------Boundary
Content-Disposition: form-data; name="params"