
Notepad++ CVE-2026-52886 — ثغرة اجتياز المسار في backupFilePath في session.xml (GHSA-rqfm-pw34-r7j6)
starts_with()Notepad++ — قراءة ملفات عشوائية عبر اجتياز backupFilePath في session.xml
PowerEditor/src/Notepad_plus.cpp (استعادة الجلسة — التحقق من backupFilePath)session.xml)يتحقق Notepad++ من سمة backupFilePath أثناء استعادة الجلسة باستخدام مقارنة بادئة نصية خام عبر std::wstring::starts_with()، دون تطبيع المسار أولاً. فالمسار المُصاغ الذي يبدأ ببادئة دليل النسخ الاحتياطي الشرعية لكنه يحتوي على تسلسلات اجتياز ..\ يجتاز الفحص، ومع ذلك يُحل إلى موقع عشوائي عندما يفتح نظام التشغيل الملف — مما يحمّل محتوى أي ملف قابل للقراءة في تبويب محرر.
عند الإقلاع مع تمكين وضع اللقطة (النسخ الاحتياطي)، يستعيد Notepad++ الجلسة السابقة من session.xml. ومن المتوقع أن يقع backupFilePath لكل إدخال تحت دليل النسخ الاحتياطي للتطبيق. وتتحقق بوابة السلامة فقط من أن المسار المخزن يبدأ بـ سلسلة دليل النسخ الاحتياطي المتوقعة. ولأن المقارنة تتم على السلسلة الخام غير المطبَّعة، يمكن للمهاجم إضافة البادئة الشرعية ثم الخروج من الدليل بتسلسلات ..\.
يختبر الفحص بادئة نصية؛ بينما يستخدم التطبيق المسار المُحل بواسطة نظام التشغيل. والاثنان يتباينان بمجرد وجود ..\.
| العملية | المصدر | السلوك |
|---|---|---|
| الفحص | سلسلة backupFilePath الخام | starts_with(backupDir) — ينجح عند تطابق البادئة |
| الاستخدام | المسار المُحل بواسطة نظام التشغيل | تتقلص تسلسلات ..\ إلى موقع عشوائي |
شرط مسبق: صلاحية كتابة إلى session.xml، مع تمكين وضع اللقطة/النسخ الاحتياطي.
الخطوات:
session.xml، وحقن backupFilePath مُصاغ:
<backupDir>\..\..\..\..\Users\victim\.ssh\id_rsa<backupDir>\ تُرضي starts_with()، لذا ينجح التحقق...\؛ فيُفتح الملف الهدف.النتيجة: استخراج للقراءة فقط — محتوى الملف الهدف ظاهر في المحرر، بما في ذلك ملفات حساسة مثل مفاتيح SSH وملفات إعدادات البيئة ومخازن الاعتمادات.
.env / ملفات الإعدادات، مخازن الاعتمادات — أي ملف قابل للقراءة من قبل المستخدمالمتطلبات:
session.xmlbackupFilePath: بادئة دليل النسخ الاحتياطي + تسلسلات اجتياز ..\ + مسار الملف الهدفحقن المسار المُصاغ وتشغيل التطبيق يحمّل الملف الهدف في تبويب محرر.
يقوم الإصلاح (commit 7e66f36) بتطبيع المسار بشكل صحيح قبل التحقق، بحيث تُختصر تسلسلات ..\ قبل مقارنة البادئة — فيتطابق الآن المسار المُفحَص والمسار المُستخدَم.