Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-87902 — WordPress Core <= 7.1.1 ثغرة تضمين ملفات محلية (LFI) غير مصادق عليها تؤدي إلى تنفيذ أوامر عن بُعد (RCE) - مختبر تحقق، إثبات مفهوم، قالب nuclei (GHSA-7hp8-65ch-5whp) | Kitploit
أدوات/GitHubGitHub/hassham1/cve-2026-87902
ماسحات الثغرات الأمنيةتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراقالأوراق والأبحاثالتعلم والتعليمتطوير الحمولاتمختبرات وتدريب عملي
GitHub
233منذ 24 أياملم تتم المراجعة بعد
hassham1/cve-2026-87902

CVE-2026-87902

WordPress Core <= 7.1.1 ثغرة تضمين ملفات محلية (LFI) غير مصادق عليها تؤدي إلى تنفيذ أوامر عن بُعد (RCE) - مختبر تحقق، إثبات مفهوم، قالب nuclei (GHSA-7hp8-65ch-5whp)

عرض المستودع

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-87902 - مختبر التحقق من LFI غير المصادق عليه في نواة WordPress → RCE

مواد بحث أمني لإعادة إنتاج والتحقق من CVE-2026-87902 (GHSA-7hp8-65ch-5whp) في مختبر Docker معزول يعمل على loopback فقط: تضمين ملف محلي غير مصادق عليه في حل قوالب صفحات نواة WordPress، قابل للتصعيد إلى تنفيذ تعليمات برمجية عن بُعد.

  • المتأثر: WordPress 4.7.0 حتى 7.1.1 (كل فرع مدعوم)
  • تم إصلاحه: 7.1.2 والترقيعات الخلفية لكل فرع (4.7.37، 5.9.18، 6.9.9، 7.0.6، …) - 22 سبتمبر 2026
  • CVSS 4.0: 9.2 (AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N)
  • CWE-98 - التحكم غير السليم في اسم الملف لعبارة Include/Require

الحكم

الحالة: مُثبت في المختبر المرفق.

يسمح WordPress 7.1.1 (قالب Twenty Twelve) لمهاجم غير مصادق عليه بتضمين ملفات PHP من خارج دليل القالب عبر متغير الاستعلام pagename، و- مع الإعداد الافتراضي register_argc_argv = On في صورة PHP الرسمية - بكتابة وتنفيذ ملف علامة عبر PEAR pearcmd.php:

WordPress: 7.1.1
Theme:     twentytwelve (page-templates/ present)
PHP:       8.2 (official image, register_argc_argv=On, PEAR present)
Result:    LFI oracle fired (<opml version="1.0">); marker probe executed as
           uid=33(www-data) and self-deleted

يمنع WordPress 7.1.2 مع الإعداد المطابق الـ oracle تمامًا (التحكم السلبي). يوضح هذا تنفيذ التعليمات البرمجية كمستخدم خادم الويب WordPress داخل الحاوية. لا يوضح الوصول إلى root، أو الهروب من الحاوية، أو الحركة الجانبية، أو اختراق المضيف.

البدء السريع

المتطلبات: Docker مع Compose v2، Python 3.10+، وصول شبكي إلى Docker Hub و wordpress.org (تثبيت القالب).

./lab verify

يقوم هذا ببناء المختبر المعرّض للثغرة، ويتطلب إطلاق LFI oracle وعلامة RCE، ثم يبني المختبر المرقّع ويتطلب بقاء الـ oracle صامتًا.

لاستخدام منفذ loopback آخر: LAB_PORT=9499 ./lab verify.

أزل كل شيء بعد ذلك باستخدام ./lab reset.

الأدلة المتوقعة

التحكم المعرّض للثغرة:

[+] page-* folder(s) reachable: page-templates (traversal can resolve)
[!!!] LFI CONFIRMED (safe oracle: wp-links-opml.php)
...
[RCE] pearcmd.php reachable and taking argv: /usr/local/lib/php/pearcmd.php
[!!!] RCE CONFIRMED (pearcmd.php config-create file write):
  evidence: uid=33(www-data) (command `id` ran as the web user)
  cleanup : probe self-deleted on execution: confirmed
RESULT: VULNERABLE CONTROL CONFIRMED

التحكم المرقّع:

[=] oracles did not fire: target patched (>= 7.1.2), ...
RESULT: PATCHED CONTROL CONFIRMED

لا يُقبل HTTP 200، أو حظر WAF، أو اجتياز جزئي بدون علامة الـ oracle كدليل.

دورة حياة المختبر اليدوية

./lab start vulnerable   # fresh 7.1.1 lab on 127.0.0.1:9471
./lab test               # assert LFI + RCE
./lab start patched      # fresh 7.1.2 lab
./lab test               # assert oracle absence
./lab status
./lab reset              # containers, volumes, state

شغّل الأدوات يدويًا ضد المختبر قيد التشغيل:

python3 poc/triage_cve_2026_87902.py --url http://127.0.0.1:9471
python3 poc/poc_cve_2026_87902.py --url http://127.0.0.1:9471 --rce
nuclei -t nuclei/cve-2026-87902.yaml -u http://127.0.0.1:9471 -silent

للأنظمة التي تملكها أو المصرّح لك صراحةً باختبارها (نطاق bug-bounty، ارتباط مكتوب)، تتطلب برامج التشغيل التجاوز الصريح:

python3 poc/poc_cve_2026_87902.py --url https://target.example \
  --allow-authorized-non-loopback [--insecure] [--rce]

السبب الجذري

تبني get_page_template() في wp-includes/template.php اسم ملف قالب مرشحًا من متغير الاستعلام pagename. يمرر الفرع الشقيق قبل ثلاثة أسطر أعلاه slug قالب الصفحة عبر validate_file()؛ لم يفعل فرع pagename ذلك أبدًا، ويضيف بالإضافة إلى ذلك مرشحًا إضافيًا مفكوك الترميز بـ urldecode():

// wp-includes/template.php, get_page_template(), WordPress <= 7.1.1
if ( $pagename ) {
    $pagename_decoded = urldecode( $pagename );
    if ( $pagename_decoded !== $pagename ) {          // 7.1.2 adds validate_file()
        $templates[] = "page-{$pagename_decoded}.php";
    }
    $templates[] = "page-{$pagename}.php";
}

يطبّق 7.1.2 validate_file() على المرشح المفكوك و يضيف بوابة احتواء (_wp_is_template_path_allowed()) يجب أن يجتازها كل مسار قالب محلول.

الشروط المسبقة

  1. القالب النشط (الفرعي أو الأب - يفحص locate_template() كليهما) يحتوي على دليل من المستوى الأعلى يبدأ بـ page-. القوالب الافتراضية القديمة (Twenty Twelve، Twenty Fourteen) والعديد من قوالب wp.org (Neve، Hestia، Sydney) تستوفي الشرط. القوالب التجارية التي تم بحثها (Divi، Avada، Flatsome، Woodmart، Betheme، The7، Enfold، Salient، Jupiter/X، Porto، Houzez، XStore، Kalium، Uncode) لا تحتوي على أي منها - لا يمكن للاجتياز أن يُحل؛ انظر PRO_THEME_PAGE_DIRS في PoC للقائمة المستمدة من المرايا.
  2. يجب أن ينتهي الملف المُضمّن بـ .php (يُضاف بواسطة الكود).
  3. يحتاج RCE بالإضافة إلى ذلك إلى register_argc_argv = On و pearcmd.php الخاص بـ PEAR.

ملاحظات تشغيلية مُتحقق منها في المختبر (خارج التنبيهات العامة)

يمتنع التنبيه وكتابة Patchstack عن نشر طلب عملي. تم إثبات هذه التفاصيل تجريبيًا في هذا المختبر:

  1. مرساة page_id إلزامية. pagename غير المحلول يقلب is_404، الذي يحجب قالبه get_page_template() تمامًا. ثبّت الاستعلام بأي page_id منشور قابل للحل.
  2. الترميز المزدوج الكامل مطلوب. يعيد get_posts() كتابة pagename عبر sanitize_title_for_query( wp_basename( … ) ): يتحول .. الخام إلى -، لكن تسلسلات %hex تنجو؛ يكشف urldecode() الإضافي في get_page_template() الاجتياز. فقط %252e/%252f يعمل.
  3. الروابط الدائمة الجميلة تفرض POST (يعيد redirect_canonical توجيه GET بـ 301 ويسقط الحمولة؛ يعود فورًا لغير GET/HEAD).
  4. العمق الدقيق: أربعة ../ من page-templates/ على docroot قياسي.
  5. الحمولة تُطلق من جسم POST أيضًا (يدمج WP $_POST في متغيرات الاستعلام) - أساس طبقات تجاوز WAF.
  6. غرائب نقل pearcmd: لا يفك PHP ترميز رموز $argv، و مُسلسِل إعدادات PEAR يهرّب نمطي علامات الاقتباس - ومن هنا المسبار الخام، بلا علامات اقتباس، مفصول بـ +.

مجموعة الأدوات

المسارالغرض
poc/poc_cve_2026_87902.pyPoC كامل: بصمة الإصدار + WAF، تعداد مجلد القالب/page-* (wp.org SVN، اكتشاف مرجع الأصول، خريطة القوالب التجارية المبحوثة)، اكتشاف المرساة، 8 متغيرات LFI oracle، oracle احتياطي مقارن بجسم فارغ، سلسلة pearcmd --rce، عرض docker --lab
poc/triage_cve_2026_87902.pyحكم لكل هدف أو دفعة مع البوابة الفاشلة المسمّاة (EXPLOITABLE / NOT EXPLOITABLE / WAF SUSPECTED / INCONCLUSIVE)
poc/bounty_screen.pyيعمل على قائمة أصول bug-bounty داخل النطاق: توسيع wildcard عبر crt.sh → تصفية WP → فحص الشروط المسبقة → تسليم المرشحين
nuclei/cve-2026-87902.yamlقالب Nuclei: LFI oracle آمن (174 حمولة: 10 بقايا page-*، طبقات مزدوجة/ثلاثية الترميز، معرفات 1–30)

يغطي بصمة WAF كلاً من Imperva/Incapsula، Cloudflare، Akamai، AWS CloudFront/WAF، Sucuri، F5. ثمانية متغيرات oracle: مزدوج الترميز، تهجئة بديلة %25%32%65، تلويث المعاملات، ثلاثي الترميز - كل منها في سلسلة الاستعلام وجسم POST. تم اختبار أجسام multipart والحمولات ذات الشرطة المائلة الخام ورُفضت (لا يعالجها WP لهذه النقطة).

الإصدارات المتأثرة والمختبرة

الإصدارالتقييم
WordPress 7.1.1أُعيد إنتاج LFI + pearcmd RCE من البداية إلى النهاية
WordPress 6.5.3 / 5.9.17أُعيد إنتاج LFI oracle
WordPress 4.7.0–7.1.1 (فروع أخرى)مُبلّغ عنه كمتأثر؛ جدول الفروع حسب GHSA
WordPress 7.1.2أُعيد إنتاج التحكم السلبي المرقّع

هيكل المستودع

.
├── .github/workflows/validate.yml
├── .gitignore
├── LICENSE
├── README.md
├── SECURITY.md
├── docker-compose.yml
├── lab
├── nuclei/
│   └── cve-2026-87902.yaml
└── poc/
    ├── bounty_screen.py
    ├── poc_cve_2026_87902.py
    └── triage_cve_2026_87902.py

غير مُلتزم به: .lab-state، __pycache__/، ملفات مخرجات screener.

حدود التحقق

تنزيل الأداة