
مجموعة أدوات WordPress CVE-2026-87902 LFI-to-RCE مع سلسلة استغلال مسلّحة (PEAR RCE، webshell، إنشاء حساب مسؤول، جمع البيانات) ونسخة SafeChecker غير تدخلية ومدقّق مخاطر.

للاستخدام الأخلاقي فقط – اختبار أمني مصرح به
يوفر هذا المستودع أدوات لمتخصصي الأمن المصرح لهم، والفرق الزرقاء، ومختبري الاختراق فقط.
الوصول غير المصرح به إلى أنظمة الحاسوب غير قانوني بموجب CFAA (الولايات المتحدة)، وقانون إساءة استخدام الحاسوب (المملكة المتحدة)، وTCK 243/244 (تركيا)، وقوانين مماثلة في جميع أنحاء العالم.
CVE‑2026‑87902 هي ثغرة حرجة من نوع اجتياز المسار وتضمين الملفات المحلية (LFI) غير المصادق عليها في نواة WordPress (الإصدارات 4.7.0 حتى 7.1.1) تسمح لمهاجم غير مصادق عليه بتضمين ملفات .php محلية عشوائية عبر معامل الاستعلام pagename، وفي ظروف خادم محددة التصعيد إلى تنفيذ التعليمات البرمجية عن بُعد (RCE) عبر تسلسل ملف PEAR pearcmd.php. درجة CVSS: 9.2 (حرجة). تم الإفصاح عنها بواسطة Robert Ressl عبر برنامج HackerOne الخاص بـ WordPress في يوليو 2026. تم تصحيحها في 7.1.2 في 22 سبتمبر 2026، مع ترقيعات رجعية وصولاً إلى 4.7.
تؤثر الثغرة على كل إصدار WordPress منذ 2016 — عقد من الإصدارات التي اجتازت مراجعة الكود دون اكتشاف. السبب الجذري هو استدعاء تحقق واحد مفقود في أحد أكثر مسارات الكود استخداماً في نظام إدارة المحتوى.
حل القالب غير المعقم – يبني get_page_template() في wp-includes/template.php مرشحات القوالب من متغير الاستعلام pagename. يطبق مسار كود مجاور في نفس الدالة validate_file() لحظر تسلسلات ../، لكن فرع $pagename لا يستدعيها. أي اجتياز في pagename يمر دون فحص.
تجاوز الاجتياز المزدوج الترميز – يطبق WordPress sanitize_title_for_query() على pagename، والتي تستبدل النقاط الحرفية (.) بشرطات لمنع الاجتياز. لكن الدالة تعمل على مدخلات مفكوكة الترميز بالفعل ولا تفك الترميز بشكل متكرر. يرسل المهاجم %252e%252e%252f؛ يفك خادم الويب ترميزه مرة واحدة إلى %2e%2e%2f؛ لا يرى المعقم نقاطاً حرفية ويمرره؛ ثم يستدعي get_page_template() الدالة urldecode() مرة أخرى داخل الدالة، منتجاً ../.
شرط دليل القالب المسبق – يجب أن يحتوي القالب النشط على دليل من المستوى الأعلى يبدأ اسمه بـ page- (مثل page-templates/). ثم يهرب اسم الملف المُنشأ page-{pagename}.php من جذر القالب عبر الاجتياز. القوالب الافتراضية الأقدم (Twenty Twelve، Twenty Fourteen) والقوالب الشائعة من طرف ثالث (Neve، Hestia، Sydney) تشحن هذا الدليل. القوالب الفرعية الموروثة من هذه القوالب الأم تحقق الشرط المسبق أيضاً.
مصب LFI في locate_template() – يُمرر مسار المرشح إلى locate_template()، التي تبحث في أدلة القوالب. لأن الاجتياز يُحل إلى ملف خارج تلك الأدلة، والدالة تتحقق فقط من file_exists()، يتم تضمين أي ملف .php قابل للقراءة بـ صلاحيات خادم الويب الكاملة. هذا يجعل LFI غير مشروط على أي موقع غير مرقع يستوفي شرط القالب المسبق — بما في ذلك wp-config.php مع بيانات اعتماد قاعدة البيانات وأملاح المصادقة.
تصعيد RCE عبر PEAR pearcmd.php – يأتي PEAR مع العديد من تثبيتات PHP. عادةً ما يكون pearcmd.php الخاص به لواجهة سطر الأوامر فقط، لكن عندما يكون register_argc_argv=On، يملأ PHP $_SERVER['argv'] من سلسلة استعلام URL. يضمّن المهاجم pearcmd.php عبر LFI، ويمرر config-create كوسيطة، ويوفر كود PHP بالإضافة إلى مسار إخراج (/tmp/shell.php). يكتب PEAR كود المهاجم على القرص؛ تضمين ثانٍ ينفذه.
مسار استغلال ثانٍ – طلب يجمع بين name (slug الصفحة الأمامية)، وpage_id (معرف صفحة المقالات)، وpreview=true، وحمولة pagename يحوّل WP_Query إلى فرع post_name الخاص به، والذي لا يعيد كتابة pagename أبداً عبر sanitize_title_for_query(). هذا يسمح بـ نقاط حرفية في الاجتياز. يتطلب قالباً بدون single.php.
متطلبات تكوين الخادم – يعتمد RCE على شرطين شائعين في عمليات النشر الحقيقية: وجود/قراءة pearcmd.php (شائع في الاستضافة المشتركة، وcPanel، وصور PHP Docker الرسمية)، وregister_argc_argv=On (الافتراضي في PHP أقل من 8.5). غيّر PHP 8.5 الافتراضي إلى Off. على خادم PHP 8.5+ حديث بدون PEAR، يتوقف الاستغلال عند LFI.
الترقيع – يضيف WordPress 7.1.2 طبقتين من الدفاع: (أ) استدعاء validate_file() المفقود في فرع pagename، و(ب) دالة جديدة _wp_is_template_path_allowed() تستدعيها locate_template() لـ كل قالب يتم حله. ترفض الدالة المسارات التي تحتوي على ..، ثم تحل المسار الحقيقي عبر realpath() وتتحقق من أنه يقع داخل أحد أدلة القوالب المسموح بها. هذا الدفاع المتعمق يغلق المصب، وليس مجرد مسار واحد إليه.
استغلال نشط في البرية – لوحظت أولى الطلبات الخبيثة بعد 5 ساعات من إصدار الترقيع (17:44 UTC، 22 سبتمبر 2026). تضاعف حجم الحركة عشرة أضعاف خلال اليوم التالي. لوحظت ثلاث مراحل: استطلاع config-show → اكتشاف الملفات الأساسية → تسليح config-create. تضمنت أسماء ملفات الحمولة wp-pear-rce-flag.php، وpoc87902.php، وluci_*.php، وzeta_*.php، مكتوبة إلى /tmp و/var/tmp. عناوين IP المهاجمة: 169.58.48.193، و169.58.48.195، و2001:df1:e8c0::106b.
التأثير – تنفيذ التعليمات البرمجية بصلاحيات خادم الويب. استيلاء كامل على الموقع، وسرقة بيانات اعتماد wp-config.php، وتسريب البيانات، وتثبيت webshell، وإنشاء مستخدم مسؤول، وreverse shell، وهجمات سلسلة التوريد عبر إضافات/قوالب معدلة، والحركة الجانبية إلى الخدمات المتصلة. تعكس درجة CVSS 9.2 القابلية للاستغلال عبر الشبكة، وعدم المصادقة، والتأثير العالي على السرية/السلامة/التوافر. يعكس التعقيد العالي للهجوم شروط القالب والخادم المسبقة، لكن في الاستضافة المشتركة النموذجية غالباً ما تتحقق هذه الشروط.
page-* في القالب النشط، واضبط register_argc_argv=Off في php.ini، واحظر الاجتياز المزدوج الترميز في معامل pagename على مستوى WAF.| الأداة | الغرض | المستخدم المستهدف |
|---|---|---|
exploit.py | مجموعة أدوات الفريق الأحمر الكاملة مع كشف LFI، وسلسلة PEAR RCE، وإنشاء مستخدم مسؤول، وتثبيت webshell، وreverse shell، والمسح الجماعي، ووضع التخفي، وتدوير الوكيل، وسلسلة الهجوم الكاملة. | الفرق الحمراء / مختبري الاختراق المصرح لهم (أخلاقي فقط) |
safecheck.py | فاحص ثغرات غير تدخلي يكتشف إصدار WordPress، ويتحقق من التعرض، ويقيّم المخاطر دون تضمين أي ملف أو تنفيذ أي حمولة. ينشئ تقارير JSON. | الفرق الزرقاء / مدققو الأمن |