
ماسح ضوئي سلبي لثغرات المضيفات بنظام لينكس لـ CVE-2026-31694: يفحص النواة قيد التشغيل، وإعدادات FUSE، والبيانات الوصفية للحزم، وأدلة التصحيح، ثم يولّد إرشادات تخفيف مخصصة.
أداة تقييم مضيف لينكس سلبية لـ CVE-2026-31694، وهي كتابة خارج الحدود في ذاكرة التخزين المؤقت لـ readdir الخاصة بـ FUSE في نواة لينكس.
يقوم الماسح بتقييم النواة قيد التشغيل، والتعرض لـ FUSE، وبيانات الحزم المحلية، وأدلة مصدر النواة، وبيئة التنفيذ، وعائلة نظام التشغيل. عندما يحتمل تأثر المضيف، فإنه يُنتج دليل تخفيف مخصص للتوزيعة المكتشفة.
المؤلف: Aung Myat Thu [w01f]
cve_2026_31694_scanner.py هي أداة تقييم ثغرات محلية وغير استغلالية.
إنها لا تؤكد وجود الثغرة عن طريق تشغيل مسار كود FUSE المتأثر. بدلاً من ذلك، تجمع بين عدة مؤشرات سلبية:
CONFIG_FUSE_FS؛/dev/fuse ووصول المستخدم الحالي إليه؛النتيجة هي تقييم للتعرض، وليست إثباتًا قائمًا على الاستغلال.
CVE-2026-31694 تؤثر على ذاكرة التخزين المؤقت لـ readdir الخاصة بـ FUSE في نواة لينكس.
يقوم المنطق المعيب بحساب الحجم المُسلسل لإدخال دليل من طول اسم يتحكم فيه الخادم، ثم ينسخ السجل إلى صفحة واحدة من صفحات ذاكرة التخزين المؤقت. يمكن لإدخال دليل بطول اسم 4095 أن ينتج حجمًا مُسلسلًا يبلغ 4120 بايتًا.
على نظام يستخدم صفحات بحجم 4096 بايت، يتجاوز هذا السجل الصفحة الواحدة بمقدار 24 بايتًا.
يرفض التصحيح من المنبع سجلات الدليل التي لا يمكن احتواؤها داخل صفحة واحدة قبل حدوث نسخة ذاكرة التخزين المؤقت.
fs/fuse/readdir.c fuse_add_dirent_to_cache()
### بيانات خط الأساس للماسح الضوئي
يحتوي الماسح الضوئي على خطوط الأساس المستقرة الثابتة التالية من المنبع:
| سلسلة النواة | خط الأساس المثبّت |
|---|---:|
| 5.10 | 5.10.258 |
| 5.15 | 5.15.209 |
| 6.1 | 6.1.175 |
| 6.6 | 6.6.136 |
| 6.12 | 6.12.84 |
| 6.18 | 6.18.25 |
| 7.0 | 7.0.2 |
| Mainline | 7.1 أو أحدث |
تُستخدم هذه الإصدارات كمدخل تقييم واحد. ولا تُعتبر المصدر الوحيد للحقيقة لأن موزّعي التوزيعات قد ينقلون التصحيح مع الإبقاء على رقم إصدار أقدم من المنبع.
---
## نموذج الأمان
صُمم الماسح الضوئي لتجنب استدعاء العملية المعرضة للخطر.
### لا يقوم الماسح الضوئي بـ:
- تثبيت نظام ملفات FUSE؛
- فتح أو التواصل مع `/dev/fuse`؛
- تشغيل خادم FUSE؛
- إرسال سجلات أدلة مصمّمة؛
- تخصيص ذاكرة لاختبار توزيع الصفحات؛
- تهيئة مخصِّصات النواة؛
- تعديل `/etc/passwd`؛
- تغيير إعدادات النواة؛
- تحميل أو إلغاء تحميل وحدات النواة؛
- تعديل صلاحيات `/dev/fuse`؛
- تثبيت الحزم أو إزالتها؛
- إعادة تشغيل النظام؛
- محاولة تصعيد الامتيازات.
### قد يقوم الماسح الضوئي بـ:
- قراءة الملفات تحت `/proc` و`/boot` و`/lib/modules` و`/usr/lib/modules` و`/usr/src` وأدلة بيانات الحزم الوصفية؛
- تنفيذ استعلامات حزم محدودة للقراءة فقط؛
- فحص عمليات التثبيت النشطة وتسجيل أنظمة الملفات؛
- كتابة تقرير فقط عند توفير `--output` صراحةً؛
- طباعة أوامر التخفيف لمراجعة المسؤول.
أوامر التخفيف هي مخرجات توثيقية. ولا يتم تنفيذها أبدًا تلقائيًا.
---
## الميزات
### تحديد المضيف والنواة
- يقرأ `platform.release()` ويحلل إصدار النواة بنمط المنبع.
- يقرأ `/etc/os-release` أو `/usr/lib/os-release`.
- يكتشف بنية وحدة المعالجة المركزية وحجم صفحة الذاكرة.
- يحدد ما إذا كانت النواة المفحوصة تابعة لنظام التشغيل الحالي.
### تقييم التعرض لـ FUSE
- يقرأ `CONFIG_FUSE_FS` من مصادر إعدادات النواة المتاحة.
- يكتشف دعم FUSE المدمج وإعدادات الوحدات القابلة للتحميل.
- يقرأ `/proc/filesystems`.
- يتحقق من بيانات `/dev/fuse` الوصفية وصلاحية القراءة/الكتابة للمستخدم الحالي.
- يحدد موقع `fusermount3` أو `fusermount`.
- يحلل عمليات تثبيت FUSE النشطة من `/proc/self/mountinfo`.
### أدلة التصحيح
- يقارن الإصدار الجاري مع خطوط الأساس المثبتة من المنبع.
- يبحث في شيفرة النواة المثبتة عن حارس السجل المفرط الحجم.
- يفحص سجلات التغييرات المحلية لحزم RPM أو Debian بحثًا عن:
- `CVE-2026-31694`;
- عنوان التصحيح من المنبع.
### حالة الحزمة وإعادة التشغيل
- يحاول تحديد الحزمة المالكة للنواة الجارية.
- يستعلم عن بيانات مدير الحزم المحلية دون تحديث المستودعات.
- يكتشف نواة مثبتة أحدث عندما تكون بيئة المضيف موثوقة.
- يتحقق من `/var/run/reboot-required` حيثما ينطبق ذلك.
### الوعي بالبيئة
- يكتشف الحاويات المتوافقة مع Docker.
- يكتشف الحاويات المتوافقة مع Podman.
- يكتشف مجموعات cgroups المتعلقة بالحاويات.
- يكتشف WSL.
- يكتشف الأجهزة الافتراضية باستخدام `systemd-detect-virt` عند توفره.
### إعداد التقارير
- مخرجات نصية قابلة للقراءة البشرية.
- مخرجات JSON قابلة للقراءة آليًا.
- مخرجات تقرير Markdown.
- مخرجات التخفيف فقط.
- إخراج ملف اختياري.
- رموز خروج ذات معنى للعملية.
---
## المتطلبات
### مطلوب
- لينكس لتقييم النواة.
- بايثون 3.9 أو أحدث.
- وصول للقراءة إلى بيانات النظام الوصفية العادية.
يستخدم الماسح الضوئي مكتبة بايثون القياسية فقط.
### أوامر اختيارية
يتم جمع أدلة إضافية عند توفر الأدوات التالية:
| الأداة | الغرض |
|---|---|
| `dpkg-query` | اكتشاف ملكية حزمة النواة وسجل التغييرات في Debian/Ubuntu |
| `rpm` | فحص ملكية الحزم وسجل التغييرات في Fedora/RHEL/SUSE |
| `pacman` | بيانات حزمة النواة والتحديثات لعائلة Arch |
| `apt` | استعلام التحديثات المخزنة لعائلة Debian |
| `dnf` أو `dnf5` | استعلام التحديثات المخزنة في Fedora/RHEL |
| `zypper` | استعلام تصحيحات CVE المخزنة في SUSE |
| `apk` | استعلام حزم/تحديثات Alpine |
| `systemd-detect-virt` | اكتشاف الحاويات والأجهزة الافتراضية |
ليست هناك حاجة لامتيازات الجذر لإجراء الفحص العادي.
قد تكون بعض الأدلة غير متاحة لحساب غير مميز بسبب صلاحيات الملفات الخاصة بالنظام.
---
## التثبيت
ضع الماسح الضوئي في دليل عمل:```bash
chmod +x cve_2026_31694_scanner.py
قم بتشغيله مباشرة:```bash ./cve_2026_31694_scanner.py
أو استدعِه باستخدام Python:```bash
python3 cve_2026_31694_scanner.py
لا يتطلب تثبيت حزمة بايثون.
python3 cve_2026_31694_scanner.py
### مخرجات JSON```bash
python3 cve_2026_31694_scanner.py --format json
الاسم المستعار للتوافق أدناه يُنتج نفس التنسيق:```bash python3 cve_2026_31694_scanner.py --json
### تقرير Markdown```bash
python3 cve_2026_31694_scanner.py --format markdown
python3 cve_2026_31694_scanner.py
--format markdown
--output cve-2026-31694-report.md
### طباعة إرشادات المعالجة فقط```bash
python3 cve_2026_31694_scanner.py --mitigation-only
python3 cve_2026_31694_scanner.py --no-package-query
### أعد النجاح دائمًا بعد الإبلاغ```bash
python3 cve_2026_31694_scanner.py --no-exit-status
This option is useful when collecting reports without allowing vulnerability status to fail an orchestration job.
| الخيار | الوصف |
|---|---|
--format text | مخرجات طرفية قابلة للقراءة البشرية. هذا هو الافتراضي. |
--format json | تقرير كامل منظم بصيغة JSON. |
--format markdown | تقرير Markdown تقني. |
--json | اسم مستعار لـ --format json. |
--output PATH | كتابة التقرير إلى ملف بدلاً من المخرجات القياسية. |
--mitigation-only | إرجاع قسم التخفيف (mitigation) المُنشأ فقط. |
--no-package-query | تخطّي استعلامات التحديث الخاصة بمدير الحزم المحلي. |
--no-exit-status | الخروج دائمًا بالحالة 0 بعد إنشاء المخرجات. |
-h, --help | عرض مساعدة الأمر. |