
Неаутентифицированное повышение привилегий в WordPress WAWP (Automation Web Platform) ≤ 4.8.6 через публичную регистрацию по REST и несанитизированные wawp_custom_fields → admin. Python PoC для проверки/эксплуатации (PoCbit).
Python 3 PoC для CVE-2026-14281 в плагине WordPress Automation Web Platform (automation-web-platform — WAWP / Notifications & OTP for WooCommerce).
Указан на PoCbit — каталог сообщества: https://pocbit.org/pocs/
При запуске PoC выводится заголовок PoCbit; строки JSONL содержат pocbit, pocbit_catalog и pocbit_page.
| Платформа | Плагин WordPress |
| Компонент | Automation Web Platform (WAWP) |
| Уязвимые версии | ≤ 4.8.6 |
| Исправлено в | > 4.8.6 (обновитесь до последней стабильной версии) |
| CVSS 3.1 | 9.8 Critical (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Аутентификация | Не требуется |
| Вектор | Публичный REST POST /wp-json/wawp/v1/signup/signup |
Обработчик REST для регистрации (public_permissions_check) принимает wawp_custom_fields, сопоставляет его с custom_fields_data и после wp_insert_user() записывает каждый ключ через update_user_meta() без списка разрешённых полей. Злоумышленники могут установить wp_capabilities и wp_user_level, чтобы получить права администратора.
Соответствующий код (4.8.6): includes/api/class-wawp-rest-settings-api.php (/signup/(?P<op>…)), includes/auth-services/class-wawp-otp-service.php (wawp_custom_fields → custom_fields_data), includes/auth-services/class-wawp-signup.php (finish_registration_logic).
Когда OTP при регистрации включён, первый вызов signup может остановиться на otp_verify (запрос отправлен), и регистрация завершается только после OTP — полная цепочка неаутентифицированного получения прав администратора может потребовать отключённого OTP или отдельного обхода OTP. В этом случае PoC сообщает otp_required.
pip install -r requirements.txt
Python 3.8+.
# Version + REST surface + optional live signup probe (creates a throwaway user if OTP off)
python poc.py -u https://target.example --mode check
# Register admin-capable user (authorized targets only)
python poc.py -u https://target.example --mode exploit --verify
# Mass scan
python poc.py --list targets.example.txt --mode check --threads 20 --quiet
# JSON to stdout (single target)
python poc.py -u https://target.example --mode check 2>nul
| Файл | Значение |
|---|---|
cve_2026_14281_results.jsonl | Полный JSON по каждой цели |
hits.txt | Хосты-кандидаты (check) или url|email|password (exploit) |
candidates.jsonl | Сводка режима check |
body="/wp-content/plugins/automation-web-platform/"
body="/wp-json/wawp/"
Используйте только в системах, которыми вы владеете или на тестирование которых у вас есть явное разрешение.
| Статус | Значение |
|---|
exploit_confirmed_probe | Проверочная регистрация завершена (OTP выключен); путь инъекции метаданных активен |
vulnerable_otp_blocks_signup | Плагин/версия + REST в порядке; шаг OTP блокирует одношаговую регистрацию |
vulnerable_rest_signup | Уязвимая версия; REST доступен (проверка не дала результата) |
patched | Версия > 4.8.6 |
no_plugin | Плагин не обнаружен |