
اكتشاف وتنظيف اختراق WordPress عبر wp2shell (CVE-2026-63030) — قابل للتشغيل على دفعات، للقراءة فقط افتراضيًا
اكتشف ونظّف اختراقات wp2shell (CVE‑2026‑63030) عبر موقع ووردبريس واحد أو العديد منها.
wp2shell هي ثغرة تنفيذ التعليمات البرمجية عن بُعد قبل المصادقة (pre-authentication remote-code-execution) التي تم إصلاحها في ووردبريس 7.0.2 / 6.9.5 / 6.8.6 (2026‑07‑17). ظهر إثبات مفهوم (PoC) عام خلال يوم واحد، وتبع ذلك استغلال جماعي خلال ~48 ساعة. الترقيع يسدّ الثغرة — لكن الموقع الذي تم استغلاله قبل ترقيعه مخترق بالفعل، والتحديث لا يزيل أدوات الثبات التي زرعها المهاجم.
هذه الأداة تجد وتزيل أدوات الثبات تلك. إنها سكربت Bash واحد خفيف الاعتماديات، يعمل للقراءة فقط افتراضيًا ويمكنه فحص آلاف المواقع في تمريرة واحدة.
⚠️ هذه أداة دفاعية. لا تحتوي على أي كود استغلال. التقط لقطة (snapshot) للموقع قبل تشغيل
--clean.
بعد مرحلة ما بعد الاستغلال، عادةً ما يترك wp2shell أثرين للثبات، وكلاهما تجده هذه الأداة:
user_login = wpsvc_<hex> / wp2_<hex> / w2s_<hex>، أو بريد إلكتروني على نطاق مهاجم (@wp2shell.*، @shellcode.*، @wordpress-svc.internal، @wordpress-noreply.net، @x.lol)، مع دور administrator. (ملاحظة: @system.local هو بريد إلكتروني شرعي بديل لمدير الموقع على بعض الاستضافات المدارة — وهو عن قصد غير معامل كمؤشر خطر (IOC).)wp-content/plugins/<plausible-name>-<6hex>/<same>.php: ملف PHP صغير (~1.3 كيلوبايت) بترويسة Author: WordPress.org Community مزيفة، ومحمي خلف رمز توكن، ويعرض واجهة ?c=<command>.كما تكتشف الحالة العامة: أي ملف PHP صغير تحت wp-content/ يوجّه $_GET['c'] إلى حوض تنفيذ أوامر/تقييم (command/eval sink).
curl -fsSLO https://raw.githubusercontent.com/InstaWP/wp2shell-scan/main/wp2shell-scan.sh
chmod +x wp2shell-scan.sh
يتطلب bash وfind وgrep وعميل mysql/mariadb. يُستخدم WP‑CLI عند توفره (لحذف مستخدم أنظف) لكنه غير مطلوب — فكشف الويب شيل لا يحتاج إلى قاعدة بيانات إطلاقًا.
# افحص موقعًا واحدًا (للقراءة فقط)
./wp2shell-scan.sh --path /var/www/example.com
# افحص كل تثبيت ووردبريس تحت مجلد أساسي (فحص جماعي)
./wp2shell-scan.sh --base /var/www
./wp2shell-scan.sh --base /home # استضافة مشتركة
# اكتشاف تلقائي للتخطيطات الشائعة (/var/www/*, /home/*/public_html, ...)
./wp2shell-scan.sh
# بصيغة قابلة للقراءة آليًا
./wp2shell-scan.sh --base /var/www --json > report.json
# تنظيف — عزل + إزالة البوابات الخلفية، تدوير أملاح wp-config (تسجيل خروج الجميع)
./wp2shell-scan.sh --base /var/www --clean --yes
# فحص نسخة احتياطية / لقطة / تفريغ قالب قبل استعادته (انظر التحذير أدناه)
./wp2shell-scan.sh --sql /path/to/backup.sql
تُنقل الأصول المزالة إلى دليل عزل (quarantine) (وليس حذفها نهائيًا) حتى تحتفظ بالأدلة. كود الخروج هو 1 عند وجود اختراق (فحص) أو عند التنظيف (تنظيف)، و0 عندما يكون الموقع نظيفًا — وهو أمر مفيد لـ cron/CI.
[COMPROMISED] /var/www/example.com — 2 backdoor admin(s), 2 webshell(s)
admin: ID=41 wpsvc_2e1487df8abb <[email protected]> (2026-07-19 06:41:48)
webshell: .../wp-content/plugins/security-headers-manager-8d1d21/security-headers-manager-8d1d21.php
[clean] /var/www/other-site.com
----------------------------------------------------------------
scanned=812 clean=811 compromised=1 cleaned=0
تنظيف موقع مباشر لا ينظّف نسخك الاحتياطية. النسخة الاحتياطية أو اللقطة أو لقطة قالب/نموذج أولي (blueprint) الملتقطة بينما كان الموقع مخترقًا لا تزال تحتوي على حساب المدير الخاص بالمهاجم — واستعادتها (أو توفير موقع جديد منها) يعيد الاختراق فورًا. تعلمنا هذا بالطريقة الصعبة: بعد تنظيف كل موقع مباشر متأثر، استمرت مواقع جديدة بالظهور ومعها البوابة الخلفية لأنها كانت تُوفَّر من لقطة قالب مسموم.
افحص التفريغ (dump) قبل استعادته:
./wp2shell-scan.sh --sql /path/to/backup.sql
./wp2shell-scan.sh --sql backup1.sql --sql backup2.sql.gz # قابل للتكرار، يدعم .gz
كود الخروج هو 1 إذا كان أي تفريغ مسمومًا. إذا كان كذلك: لا تستعده — نظّف الموقع المباشر أولًا، ثم التقط نسخة احتياطية جديدة، واحذف/استبدل أي لقطة أو قالب أُنشئ خلال نافذة تعرضك للخطر.
يزيل --clean المدير والويب شيل ويدوّر الأملاح (salts). يجب عليك أيضًا:
wp core verify-checksums).?c=./wp-json/batch/v1، ?rest_route=/batch/v1، بما في ذلك المشفَّر بـ %2f). ضعه في الأصل (origin) إذا كان CDN قد يمرر مسار REST.المديرون المارقون:
SELECT u.ID,u.user_login,u.user_email,u.user_registered
FROM wp_users u JOIN wp_usermeta m ON u.ID=m.user_id
WHERE m.meta_key='wp_capabilities' AND m.meta_value LIKE '%administrator%'
ORDER BY u.user_registered DESC;
إضافات الويب شيل:
find wp-content/plugins -maxdepth 1 -type d -regextype posix-extended -regex '.*-[0-9a-f]{6}$'
grep -rl "\$_GET\['c'\]" wp-content/plugins/
اطّلع على CLEANUP-WITH-CLAUDE.md للحصول على موجه جاهز للصق يوجّه Claude Code (أو أي وكيل برمجة قادر) خلال نفس عملية الكشف والتنظيف على موقع واحد، مع تأكيد بشري قبل كل خطوة تدميرية.
MIT — انظر LICENSE. يُقدَّم كما هو، دون أي ضمان. بُني واختُبر في معركة حقيقية خلال حادثة مباشرة بواسطة فريق InstaWP.