
إعادة إنتاج CVE: cve-2026-63030_60137-wordpress_rce_reproduction
المكتشف: Searchlight Cyber (عبر GPT-5.6 Sol)
الخطورة: حرجة — CVSS 9.8 (CVE-2026-63030)، CVSS 9.1 (CVE-2026-60137)
الحالة: مُستغَلّة بنشاط — مضافة إلى CISA KEV
الاسم المستعار: "wp2shell"
هذه سلسلة تنفيذ أكواد عن بُعد لا تتطلب مصادقة في نواة WordPress، وتتكون من ثغرتي CVE:
| CVE | المكوّن | النوع | CWE |
|---|---|---|---|
| CVE-2026-63030 | نقطة نهاية الدفعة في WP REST API | الخلط في التوجيه / تجاوز ضوابط الوصول | CWE-436 |
| CVE-2026-60137 | معامل author__not_in في WP_Query | حقن SQL | CWE-89 |
كل ثغرة على حدة خطيرة؛ لكنها مجتمعة تسمح لمهاجم غير مصادق بتنفيذ PHP عشوائي على الهدف ونشر webshells.
توفر واجهة برمجة تطبيقات WordPress REST نقطة نهاية دفعة على المسار /wp-json/wp/v2/batch. بسبب خلل في معالجة التوجيه (أُدخل في إعادة كتابة middleware التوجيه في WP 6.9)، لا يتحقق معالج الدفعة بشكل صحيح من أن الطلبات الفرعية الداخلية في الدفعة ترث فحوصات المصادقة والصلاحيات الخاصة بالطلب الخارجي. يمكن للمهاجم صياغة حمولة دفعة (payload) بحيث:
wp/v2/users, wp/v2/plugins) دون فحوصات الصلاحيات المطلوبة.WP_REST_Server::dispatch() لتمرير معاملات مسار مزورة إلى المعالجات الداخلية.يؤدي هذا إلى تجاوز جميع حواجز المصادقة لعمليات القراءة وبعض عمليات الكتابة عند دمجه مع تهريب المعاملات (parameter smuggling).
author__not_inيستقبل صنف WP_Query معامل author__not_in الهدف منه استبعاد المنشورات التي تحمل معرّفات مؤلفين محددة. يؤدي خطأ في التحويل القسري للأنواع (type-coercion) في دالة WP_Query::get_posts() (أُدخل في إعادة هيكلة تعقيم الاستعلامات في WP 6.9) إلى إدراج قيم author__not_in مباشرة في جملة WHERE في SQL دون ربط صحيح للمعاملات (parameterisation) عند تقديمها كمصفوفة ترابطية مصممة خصيصًا.
يحدث الحقن في جملة SQL المُولَّدة post_author IN (...). عبر تداخل مصفوفات تحتوي أجزاء SQL خام، يمكن للمهاجم الخروج من جملة IN وتنفيذ تعليمات UNION / INTO OUTFILE عشوائية — شريطة أن يملك مستخدم قاعدة البيانات صلاحية FILE.
Attacker (unauthenticated)
│
├─ POST /wp-json/wp/v2/batch
│ └─ CVE-2026-63030: Bypass auth, invoke internal query API
│ └─ CVE-2026-60137: Inject SQL via author__not_in
│ └─ UNION SELECT ... INTO OUTFILE 'webshell.php'
│ └─ Webshell deployed to web root
│ └─ RCE achieved
تشكّل نقطة نهاية الدفعة الناقل؛ بينما يشكّل حقن SQL توصيل الحمولة.
| نطاق الإصدار | السلسلة الكاملة |
|---|---|
| WordPress 6.9.0 – 6.9.4 | ✅ كلتا الثغرتين موجودتان |
| WordPress 7.0.0 – 7.0.1 | ✅ كلتا الثغرتين موجودتان |
| WordPress ≤ 6.8.x | CVE-2026-63030 فقط (حقن SQL غير قابل للاستغلال) |
تم توفير التصحيحات في WordPress 6.9.5 و7.0.2 (صدر كلاهما بتاريخ 2026-07-16).
/wp-json/wp/v2/batch يُرجع 200 (وليس 403/404).--target (انظر أدناه)./wp-content/webshell.php?cmd=id.python exploit.py --target https://target.example.com --action deploy-webshell
python exploit.py --target https://target.example.com --action exec --command "id"
python exploit.py --target https://target.example.com --action exec --command "uname -a"
POST /wp-json/wp/v2/batch عند جدار حماية تطبيقات الويب (WAF) أو الخادم الوكيل العكسي.FILE من مستخدم MySQL الخاص بـ WordPress.define('DISALLOW_FILE_EDIT', true); و define('DISALLOW_FILE_MODS', true);..php غير متوقعة داخل wp-content/.author__not_in في سجلات الطلبات.