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

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

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
12منذ 8س 55دلم تتم المراجعة بعد
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:

root@kitploit:~
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 (تثبيت القالب).

root@kitploit:~
./lab verify

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

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

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

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

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

root@kitploit:~
[+] 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

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

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

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

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

root@kitploit:~
./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

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

root@kitploit:~
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، ارتباط مكتوب)، تتطلب برامج التشغيل التجاوز الصريح:

root@kitploit:~
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():

root@kitploit:~
// 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أُعيد إنتاج التحكم السلبي المرقّع

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

root@kitploit:~
.
├── .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.

حدود التحقق

الادعاءالحالة
LFI غير مصادق عليه خارج دليل القالبمُثبت (7.1.1، 6.5.3، 5.9.17)
RCE عبر pearcmd.php config-create كمستخدم الويبمُثبت (مختبر 7.1.1)
الحذف الذاتي للمسبار / لا آثار دائمةمُثبت
التحكم السلبي المرقّع (7.1.2)مُثبت
كل إصدار متأثر وسيط تم اختبارهغير مختبر
متغيرات تجاوز WAF ضد WAFs تجارية حيةمستمدة من المختبر، غير مختبرة ضد WAF
صلاحية root / الهروب من الحاوية / اختراق المضيفغير مُدّعى

المراجع

  • GHSA-7hp8-65ch-5whp
  • Patchstack: WordPress 7.1.2 security release - unauthenticated LFI to RCE
  • Hadrian: CVE-2026-87902 working PoC - independent reconstruction (يؤكد متطلبات مرساة page_id والترميز المزدوج؛ مصدر oracle المقارن بجسم فارغ wp-content/index.php، المُضمّن هنا كخيار احتياطي للمواقع المُحصّنة)
  • dinosn: cve-2026-87902-wordpress-lfi-lab (مختبر مستقل يصل إلى نفس أشكال الطلبات؛ مصدر تحكم السببية للهدف غير الموجود المطبّق الآن على كل إصابة oracle)
  • إعلان إصدار WordPress 7.1.2
  • مدخل NVD

تم الإبلاغ عن الثغرة بواسطة Robert Ressl. هذا المستودع تحليل وأدوات طرف ثالث مستقلة.

الترخيص

MIT - انظر LICENSE.

حدود السلامة

شغّل هذا المستودع فقط على الأنظمة التي تملكها أو المصرّح لك صراحةً باختبارها. يرفض مشغّل المختبر المتغيرات غير vulnerable/patched، وترفض برامج Python أهداف غير loopback إلا إذا تم توفير --allow-authorized-non-loopback، ومنفذ Compose مرتبط بـ 127.0.0.1.

انظر SECURITY.md لمعالجة الإفصاح. لا يتضمن هذا المستودع أهداف إنتاج، أو بيانات عملاء، أو رموز وصول، أو أدلة من أنظمة حقيقية.

بشكل ملموس:

  • ينشر Docker WordPress على 127.0.0.1 فقط.
  • وضع PoC الافتراضي هو LFI oracle غير ضار: يتضمن wp-links-opml.php، ملف نواة قياسي يطبع مستند OPML.
  • --rce اختياري ويكتب مسبار علامة بلا علامات اقتباس، ذاتي الحذف (<?=id,unlink(__FILE__)?>) عبر تقنية pearcmd.php config-create الموثقة علنًا؛ يزيل المسبار نفسه عند تنفيذه الواحد ويتحقق PoC من الحذف. لا shells، ولا callbacks، ولا استمرارية.
  • يعيد المختبر التزويد من صور رسمية نقية عند كل start؛ لا أدوات تتبع على الهدف.
  • الطلبات أحادية المضيف، متسلسلة، ومحدودة المعدل. لا مسح جماعي.
تنزيل الأداة