
كاشف إثبات المفهوم (PoC) ومُدقِّق آمن لسلسلة ثغرات WP2Shell في ووردبريس: CVE-2026-63030 (التباس توجيه الدُفعات في REST) + CVE-2026-60137 (حقن SQL عبر author__not_in). للاختبارات الأمنية المصرح بها فقط.
تغطية CVE: CVE-2026-63030 وCVE-2026-60137 الاستخدام المقصود: اختبار أمني مصرّح به، وتحقق دفاعي، ومختبرات localhost مؤقتة قابلة للتخلص فقط
WP2Shell هي سلسلة ثغرات في نواة ووردبريس تجمع بين خطأ ارتباك مسار الدُفعات في REST API قبل المصادقة (CVE-2026-63030) وبدائية حقن SQL في WP_Query عبر author__not_in (CVE-2026-60137). يوفر هذا المستودع ماسحًا ضوئيًا وإثبات صحة آمنًا بلغة Python حتى يتمكن المدافعون من تحديد تثبيتات ووردبريس المتأثرة، وتأكيد السلوك القابل للاستغلال في مختبر معزول، والتحقق من المعالجة — دون الحاجة إلى استخراج بيانات أو تحقيق تنفيذ أكواد.
يقوم هذا المشروع بتحديد تثبيتات ووردبريس والتحقق من بدائيتَي الثغرات المرتبطتين بسلسلة ثغرات WP2Shell في نواة ووردبريس:
WP_Query::author__not_in، مما قد يؤدي إلى حقن SQL عندما تصل مدخلات يتحكم بها المهاجم إلى المعامل.عندما يتوفر كلا الشرطين، قد يصل طلب غير مصادق إلى بناء SQL القابل للاستغلال عبر نقطة نهاية الدُفعات في REST API. تصف النشرات العامة الأثر المشترك بأنه قد يؤدي إلى تنفيذ أكواد عن بُعد.
يجب استخدام هذا المستودع فقط على أنظمة تملكها أو صرّح لك صراحةً باختبارها. يُفضَّل استخدام مختبر Docker أو جهاز افتراضي معزول مرتبط بـ 127.0.0.1.
يحتوي ملف المصدر الحالي على وظائف تغيّر الحالة، بما في ذلك محاولات استخراج بيانات قاعدة البيانات، ومحاولات كتابة ملفات، وسير عمل المصادقة، وإنشاء مسؤول، ورفع إضافات، وتنفيذ أوامر.
يمكن أن تفقد إصدارات ووردبريس المتأثرة المحاذاة بين المصفوفات الداخلية المستخدمة لتتبع:
عندما يتم قبول عضو دفعة مشوّه في مصفوفة داخلية واحدة دون أخرى، يمكن أن ترتبط الطلبات اللاحقة بمعالج خاطئ. وبالتالي قد يتم التحقق من الطلب كمسار واحد ولكن تنفيذه باستخدام استدعاء مسار آخر.
الأثر الأمني:
author__not_inلا يقوم تطبيق WP_Query المتأثر بتطبيع author__not_in بشكل متسق قبل استخدامه لبناء شرط NOT IN (...) في SQL.
يتوقع المعامل عادةً قائمة من معرّفات المؤلفين الصحيحة. إذا وصلت سلسلة نصية قياسية إلى بناء الاستعلام القابل للاستغلال دون تحقق مخطط REST المطلوب، فقد تبقى بنية SQL غير آمنة داخل استعلام قاعدة البيانات.
الأثر الأمني:
| فرع ووردبريس | المتأثر | الإصدار المُصحَّح |
|---|---|---|
| 6.8.x | CVE-2026-60137 فقط: 6.8.0–6.8.5 | 6.8.6 |
| 6.9.x | كلتا الثغرتين: 6.9.0–6.9.4 | 6.9.5 |
| 7.0.x | كلتا الثغرتين: 7.0.0–7.0.1 | 7.0.2 |
| 7.1 إصدار تجريبي | Beta 1 متأثر | Beta 2 |
| أقدم من 6.8 | غير متأثر بهاتين الثغرتين | N/A |
أصدر ووردبريس إصلاحات في 17 يوليو 2026، وفعّل التحديثات التلقائية الإجبارية للتثبيتات المتأثرة بسبب شدة الخطورة.
Unauthenticated client | v WordPress REST batch endpoint | v Malformed batch member creates request/handler misalignment | v Later request is validated against one route but dispatched using another route's handler | v Scalar author_exclude reaches WP_Query as author__not_in | v Unsafe value reaches SQL NOT IN (...) construction | v Blind SQL timing or Boolean oracle | v Potential database compromise | v Potential application-level compromise and RCE
يجب أن يتوقف المكتشف بعد تأكيد بدائيات الالتباس في التوجيه وحقن SQL. لا يحتاج إلى استخراج البيانات أو تنفيذ الأوامر لإثبات أن التثبيت المتأثر معرّض للخطر.
---
## سير عمل الاكتشاف
### المرحلة 1 — تطبيع الهدف
تقوم الأداة بما يلي:
1. تضيف مخطط `http` أو `https` افتراضيًا إذا كان مفقودًا.
2. تطبّع مسار تثبيت ووردبريس.
3. ترفض مخططات URL غير المدعومة وبيانات الاعتماد المضمّنة.
4. تطبّق سياسات إعادة التوجيه والوكيل وTLS والمهلة الزمنية.
### المرحلة 2 — تحديد ووردبريس
يفحص الماسح بحثًا عن:
- مراجع `wp-content/`.
- مراجع `wp-includes/`.
- بيانات ووردبريس الوصفية للمولّد.
- روابط اكتشاف REST API.
- بنية فهرس REST الخاصة بووردبريس.
- مساحة الاسم `wp/v2`.
- بصمات اختيارية للتغذية و`readme.html`.
### المرحلة 3 — تحديد الإصدار
يمكن أن تأتي أدلة الإصدار من:
- بيانات وصفية للمولّد في HTML.
- بيانات وصفية للمولّد في التغذية.
- سلاسل استعلام أصول نواة ووردبريس.
- ترويسات HTTP الخاصة بالمولّد.
- `readme.html`.
- ملف `wp-includes/version.php` محلي.
يتم تقييم الأدلة والتوفيق بينها. مؤشرات الإصدار البعيد المتعارضة تخفض مستوى الثقة.
### المرحلة 4 — التحقق من تعرض مسار الدفعة
يحاول الماسح اكتشاف `/batch/v1` عبر:```text
/?rest_route=/
/wp-json/
يمكن الوصول إلى المسار باستخدام أيٍّ من:```text /?rest_route=/batch/v1 /wp-json/batch/v1
### المرحلة 5 — استكشاف آمن لالتباس المسار
يحتوي الاستكشاف الآمن على:
1. مسار داخلي مشوّه عمدًا.
2. طلب إلى معرّف منشور غير صالح مع طلب `GET` عام متداخل غير ضار.
3. طلب `/batch/v1` لاحق.
يعيد الخادم القابل للاستغلال استجابة `207 Multi-Status` خارجية تتم فيها معالجة طلب المنشور غير الصالح كطلب دفعي متداخل.
يُبلِغ المكتشف:```text
route-confusion-observed
عندما يرى:
parse_path_failed المتوقعة.207.responses متداخلة تُظهر أن الطلب الداخلي غير الضار تم تنفيذه.ينبغي أن يرسل مُتحقِّق SQLi غير تدميري طلبات مقترنة لا تختلف إلا في شرط منطقي ثابت:```text False control -> no deliberate database delay True test -> deliberate database delay
يجب أن يقوم المُدقِّق بما يلي:
- قبول استجابة HTTP الخارجية المتوقعة `207`.
- تحليل كلٍّ من أغلفة الدفعات الخارجية والمتداخلة.
- التحقق من علامات الطلبات المشوّهة.
- التأكد من أن الطلب المتداخل الحامل لحقن SQL أعاد استجابة صالحة.
- جمع عدّة عينات صحيحة وخاطئة.
- عشوائية ترتيب العينات أو تداخله.
- مقارنة الوسيطات بدلاً من طلب واحد.
- الإبلاغ عن القياسات غير الكافية كـ `inconclusive`.
فجوة قابلة للتكرار بين العينات الصحيحة والخاطئة تؤكد أن الإدخال الذي يتحكم به المهاجم وصل إلى تقييم SQL. لا يلزم تحديد أو استخراج أي محتويات من قاعدة البيانات.
---
## المتطلبات
- بايثون 3.9 أو أحدث.
- لا يتطلب السكربت المرفق أي حزم بايثون تابعة لجهات خارجية.
- وصول شبكي إلى تثبيت ووردبريس المصرح به.
- للاختبار المحلي:
- بيئة مختبرية مؤقتة لـ WordPress 7.0.1 أو 6.9.4.
- حاوية قاعدة بيانات أو قاعدة بيانات اختبار مخصصة.
- خدمة الويب المرتبطة بـ `127.0.0.1`.
- لا بيانات اعتماد إنتاجية أو بيانات.
تحقق من بايثون:```bash
python3 --version
التحقق الاختياري من بناء الجملة:```bash python3 -m py_compile WP2Shell_CVE-2026-63030_POC.py
---
## التثبيت
أعد تسمية السكربت المرفق إلى اسم ملف يمكن التنبؤ به:```bash
mv 'poc(1).py' WP2Shell_CVE-2026-63030_POC.py
chmod +x WP2Shell_CVE-2026-63030_POC.py
Display global help:```bash python3 WP2Shell_CVE-2026-63030_POC.py --help
اعرض الإصدار:```bash
python3 WP2Shell_CVE-2026-63030_POC.py --version