
CVE-2026-23491 - يحتوي InvoicePlane على ثغرة Path Traversal بدون مصادقة في Guest Controller
| الحقل | التفاصيل |
|---|---|
| معرّف CVE | CVE-2026-23491 |
| درجة الخطورة | حرجة |
| الاستشارة الأمنية | عرض الاستشارة |
| اكتُشفت بواسطة | Lukasz Rybak |
توجد ثغرة اجتياز المسار في طريقة get_file الخاصة بوحدة تحكم Get في وحدة Guest ضمن InvoicePlane إصدار v1.6.3. تسمح الثغرة للمهاجمين غير المصادَق عليهم بقراءة ملفات عشوائية على الخادم من خلال التلاعب باسم ملف الإدخال. يؤدي هذا إلى كشف معلومات حساسة، بما في ذلك ملفات الإعدادات التي تحتوي على بيانات اعتماد قاعدة البيانات.
تقع الثغرة في ملف application/modules/guest/controllers/Get.php، وتحديدًا داخل دالة get_file.
تستقبل الدالة معامل $filename مباشرةً من عنوان URL. وهي تنفذ urldecode($filename) لكنها لا تعقّم المُدخلات ضد تسلسلات اجتياز الدليل (مثل ../). يتم بعد ذلك دمج اسم الملف الناتج مع دليل أساسي ($this->targetPath، الذي يشير إلى uploads/customer_files/) وتمريره إلى دالة readfile().
مقتطف الكود القابل للاستغلال:
public function get_file($filename): void
{
$filename = urldecode($filename);
if ( ! file_exists($this->targetPath . $filename)) {
$ref = isset($_SERVER['HTTP_REFERER']) ? ', Referer:' . $_SERVER['HTTP_REFERER'] : '';
$this->respond_message(404, 'upload_error_file_not_found', $this->targetPath . $filename . $ref);
}
// ... headers setting content type and disposition ...
readfile($this->targetPath . $filename);
}
نظرًا لأن $filename يتحكم فيه المستخدم ولا يخضع لأي فحص، يمكن للمهاجم توفير سلسلة نصية مثل ../../ipconfig.php للخروج من الدليل المقصود.
يوضح أمر cURL التالي كيفية قراءة ملف ipconfig.php (الذي يقع على بُعد دليلين من الدليل الافتراضي uploads/customer_files/):
curl http://localhost/index.php/guest/get/get_file/..%2f..%2fipconfig.php
المخرجات المتوقعة:
يستجيب الخادم بمحتوى ملف ipconfig.php، والذي يتضمن متغيرات بيئة حساسة مثل DB_PASSWORD وENCRYPTION_KEY.
يمكن للمهاجمين قراءة إعدادات التطبيق والكود المصدري، وربما ملفات أخرى على النظام قابلة للقراءة من قبل مستخدم خادم الويب.
تم الإفصاح عن هذا CVE بشكل مسؤول وفقًا لممارسات الإفصاح المنسق عن الثغرات الأمنية. المعلومات الواردة هنا لأغراض تعليمية ودفاعية فقط.