
إثبات مفهوم بلغة Python للثغرة CVE-2026-93300، وهي حقن SQL غير مُصادَق عليه في إضافة EventON Subscriber لـ WordPress؛ يحدد معالج AJAX ويستخرج بيانات قاعدة البيانات عبر أوراكل زمنية.
إثبات مفهوم بلغة Python لـ CVE-2026-93300: حقن SQL غير مصادق عليه عبر المعامل email في إضافة WordPress EventON - Subscriber (Wordfence، CVSS 7.5 عالي).
| CVE | CVE-2026-93300 |
| الإضافة | EventON - Subscriber (eventon-subscriber) |
| المتأثرة | جميع الإصدارات ≤ 1.4.5 |
| الإصدار المُصلح | لا يوجد منشور (حتى 2026-10) |
| المتجه | POST /wp-admin/admin-ajax.php، action=evosub_new_subscriber، المعامل email |
| المصادقة | لا شيء (غير مصادق عليه) |
| CWE | CWE-89 حقن SQL |
معالج AJAX لنموذج الاشتراك (evosub_new_subscriber، المسجل بـ wp_ajax_nopriv_، ويمكن الوصول إليه من نموذج الواجهة الأمامية العام في assets/evosub_script.js) يبني استعلام SQL موجود باستخدام قيمة email المقدمة من المستخدم دون $wpdb->prepare() / تهريب مناسب. تصل القيمة إلى الاستعلام دون تهريب، لذا يمكن للمهاجم الخروج من حرف السلسلة النصية وإلحاق/تعديل الاستعلام لقراءة بيانات عشوائية من قاعدة البيانات.
التعبير النمطي (regex) للبريد الإلكتروني في جانب العميل في evosub_script.js هو فحص التنسيق الوحيد في المتصفح؛ ولا يوفر أي حماية من جانب الخادم.
# 1. Detect only (fingerprint handler, find working injection oracle)
python3 cve_2026_93300.py --url https://target.example --mode check
# 2. Dump wp_users (login / email / password hash)
python3 cve_2026_93300.py --url https://target.example --mode users --prefix wp_
# 3. Extract any scalar query result
python3 cve_2026_93300.py --url https://target.example --mode sql \
--sql "SELECT option_value FROM wp_options WHERE option_name='admin_email'"
| الخيار | الافتراضي | الوصف |
|---|---|---|
--mode | check | check / users / sql |
--action | evosub_new_subscriber | إجراء AJAX المراد اختباره |
--param | email | المعامل المُحقَن |
--prefix | wp_ | بادئة جداول WordPress |
--sql | — | استعلام SELECT قياسي لـ --mode sql |
--delay | 2.0 | ثواني SLEEP() لـ oracle المعتمد على الوقت |
--timeout | 25 | مهلة HTTP |
--max-id | 15 | أعلى معرّف مستخدم للمسح |
--proxy / --insecure / --ua | — | وكيل HTTP / تخطي التحقق من TLS / UA مخصص |
action=evosub_new_subscriber مع إجراء غير مسجّل (0 / HTTP 400) للتأكد من وجود المعالج وأنه نشط.'، "، \) → إذا انعكست أخطاء SQL (WP_DEBUG)، يُستخدم oracle قائم على الأخطاء (الأسرع، طلب واحد لكل بت)؛SLEEP() → oracle union-time (تقييم واحد لكل فحص، دون إبطاء لكل صف)؛;SELECT SLEEP(...)) → oracle stacked-time إذا كان المشغّل يسمح بالاستعلامات المتعددة؛OR/AND/paren/concat SLEEP) → oracle template-time كخيار احتياطي.1=1 → صحيح و1=0 → خطأ (متكررًا) قبل بدء الاستخراج، مما يرشّح النتائج الإيجابية الكاذبة الناتجة عن أهداف بطيئة/غير مستقرة.LENGTH() وASCII(SUBSTRING(...)) (7 طلبات لكل حرف).ينتهي --mode check باستخراج تحقّقي لـ user_login@USER() لإثبات الوصول إلى البيانات.
poc*@example.invalid في نوع المنشور evo-subscriber؛ وهي مرئية ضمن Events → All Subscribers ويمكن نقلها إلى المهملات.email من جهة الخادم باستخدام مرشّح صارم، فستتصرف جميع الفحوصات بشكل متطابق وستُبلغ الأداة عن غير مصاب / المدخلات مُتحقَّق منها.admin-ajax.php معطّل (خطأ فادح في خط الأساس) تُبلَّغ على أنها غير سليمة ويُجهَض التعامل معها.SELECT (سياق INSERT/UPDATE) تُكتشَف لكن قد لا يتوفر لها oracle وقت فعّال.--delay ≥ 1.0 على الأهداف الحقيقية؛ فالتأخيرات الصغيرة جدًا تُنتج نتائج سلبية كاذبة على الروابط عالية الكمون.email (وجميع مدخلات الطلب) باستخدام $wpdb->prepare() / esc_sql()؛ وتحقق باستخدام is_email() من جهة الخادم.admin-ajax.php غير المصادَق عليها التي تحتوي قيمة email فيها على محارف SQL الوصفية ('، "، \، --، ;، UNION).لأغراض الاختبار الأمني المصرّح به والأغراض التعليمية فقط. الوصول غير المصرّح به إلى أنظمة الحاسوب غير قانوني. أنت مسؤول عن الامتثال لجميع القوانين المعمول بها.