
Неаутентифицированная произвольная загрузка файлов -> RCE в WPLP Cookie Consent (gdpr-cookie-consent) <= 4.4.1 — техническое описание и PoC
Proof-of-concept и техническое описание для CVE-2026-75865 — неаутентифицированная произвольная загрузка файлов, приводящая к удалённому выполнению кода в плагине WPLP Cookie Consent – Cookie Banner & Consent Management for GDPR, CCPA & Google Consent Mode для WordPress (slug gdpr-cookie-consent), затрагивающая все версии вплоть до 4.4.1 включительно.
| Ключевые факты |
|---|
| CVE | CVE-2026-75865 |
| Критичность | Критическая — CVSS 3.1 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Слабые места | CWE-862 (Отсутствие авторизации) + CWE-434 (Неограниченная загрузка файлов опасного типа) |
| Затронутые версии | gdpr-cookie-consent ≤ 4.4.1 |
| Исправлено в | 4.4.2 |
| Назначивший CVE | Wordfence |
| Опубликовано | 2026-09-01 |
| Обнаружил | Supakiad S. (m3ez) |
SaaS-«коннекторные» REST-эндпоинты плагина аутентифицируют запросы, делегируя проверку SaaS-приложению вендора, которое валидирует Bearer JWT, — но плагин лишь проверяет, что эндпоинт валидации отвечает HTTP 200. Привязка владельца между JWT и целевым сайтом отсутствует, поэтому любой действительный токен, выданный SaaS (например, с бесплатного аккаунта), принимается.
Затем функция saas_upload_logo() записывает предоставленный атакующим base64-блоб в публичную директорию wp-content/uploads/ под именем файла, указанным атакующим, без какой-либо проверки содержимого или расширения. Хранимый API-токен (master_key), который также защищает эндпоинт, на самом деле не является секретом: собственный маршрут плагина /store-auth перезаписывает его из параметров запроса после той же проверки JWT, поэтому вся цепочка — от неаутентифицированного запроса до выполненного payload в корне веб-сервера — требует лишь URL цели и бесплатный SaaS-аккаунт.
Уязвимость была исправлена в версии 4.4.2 путём полного удаления эндпоинта загрузки и переработки модели доверия коннектора (привязка владельца JWT, hash_equals(), подпись запросов HMAC).
Полный технический анализ: REPORT.md
| Файл | Описание |
|---|---|
REPORT.md | Подробное техническое описание: анализ первопричины с кодом и ссылками на строки, сравнение исправления 4.4.1 → 4.4.2, цепочка эксплуатации, обнаружение и смягчение |
cve_2026_75865.py | PoC-скрипт — сканирует список целей, обнаруживает уязвимые сайты и выполняет полную цепочку (перечисление администратора → перезапись master-key → загрузка payload → проверка) с выводом в реальном времени |
payload.php | Минимальный безвредный payload, используемый по умолчанию: выводит строку-маркер и поддерживает самоудаление (?delete=1) |
git clone https://github.com/ghostpels/CVE-2026-75865.git
cd CVE-2026-75865
pip install requests # colorama опционален (цветные логи)
# 1. Сохраните действительный SaaS JWT (любой аккаунт на app.wplegalpages.com) в jwt.txt
# 2. Создайте список целей и запускайте только против систем, которые вам разрешено тестировать:
python cve_2026_75865.py -l targets.txt -o vuln.txt -t 40 --marker CVE-2026-75865-POC
Проверенные URL-адреса payload добавляются в vuln.txt в реальном времени, по одному на строку, сразу после проверки каждой цели.
| Опция | По умолчанию | Описание |
|---|---|---|
-l, --list | (обязательно) | Список целей, по одному URL на строку |
-o, --output | vuln.txt | Проверенные URL-адреса payload, добавляются в реальном времени |
-t, --threads | 40 | Параллельные рабочие потоки |
--shell | payload.php | Файл payload рядом со скриптом; имя загрузки = его базовое имя |
--filename | — | Пользовательское имя загружаемого файла (сначала пробуется его расширение, затем --exts) |
--exts | php,phtml,php5,php74,php7,php3,php4,phar | Запасные расширения, когда основное заблокировано |
--jwt-file | jwt.txt | SaaS JWT, первая непустая строка |
--marker | — | Строка, которая должна присутствовать в ответе payload, чтобы считаться действительной |
--timeout | 15 | Таймаут на запрос (секунды) |
-k, --insecure | выкл. | Отключить проверку TLS |
-v, --verbose | выкл. | Показывать детали ошибок подключения |
Этот репозиторий опубликован исключительно для образовательных и защитных исследовательских целей. Используйте инструмент только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый данным материалом.