
ماسح ضوئي سلبي لثغرات المضيفات بنظام لينكس لـ 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.
يقوم الماسح بتقييم الأدلة بالترتيب التالي.
يحدد الماسح:
يغيّر اكتشاف البيئة تفسير بيانات الحزم وإعادة التشغيل.
على سبيل المثال، يمكن للحاوية رؤية نواة المضيف لكنها لا تستطيع عادةً تحديد حزمة نواة المضيف من نظام ملفات الحاوية.
يبحث الماسح عن إعداد نواة قيد التشغيل في:```text /proc/config.gz /boot/config-$(uname -r) /lib/modules/$(uname -r)/build/.config /usr/lib/modules/$(uname -r)/build/.config
يقوم بتقييم:```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set
Interpretation:
| القيمة | المعنى |
|---|---|
y | FUSE مدمج في النواة. لا يمكن تعطيله عبر القائمة السوداء للوحدات النمطية. |
m | FUSE متاح كوحدة نمطية قابلة للتحميل. |
n |
يفحص الماسح الضوئي:```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo
غياب `/dev/fuse` أو `fusermount3` يقلل من قابلية الاستخدام الفورية من البيئة الحالية، لكنه لا يُثبت أن النواة مُصحَّحة.
### 4. هندسة حجم الصفحة
السجل المفرط الحجم الموثّق هو `4120` بايت.
عندما يكون حجم صفحة المضيف على الأقل `4120` بايت، فإن السجل الموثّق لا يعبر حدود الصفحة. قد يبلغ الماسح أن النظام غير معرّض لهندسة الصفحة الموثّقة.
ينطبق هذا الاستنتاج فقط على السجل الموثّق وسلوك التنفيذ الذي تم تقييمه. وهو ليس بيانًا عامًا بأن جميع مشكلات سلامة الذاكرة في FUSE مستحيلة على الأنظمة ذات الصفحات الأكبر.
### 5. فحص المصدر المثبَّت
عندما يتوفر المصدر المثبَّت، يبحث الماسح عن:```text
fs/fuse/readdir.c
يبحث عن الدالة المتأثرة وما يعادل الحماية الذي يرفض reclen > PAGE_SIZE.
الأدلة المباشرة من المصدر تمنح ثقة أعلى من مقارنة الإصدارات.
يجب أن يطابق المصدر المُفحَص نواة التشغيل الحالية حتى تكون النتيجة موثوقة. قد تمثل أشجار المصادر الخاصة بالتوزيعات الموجودة تحت /usr/src نواةً مثبّتة مختلفة.
يحاول الماسح الضوئي ربط صورة النواة قيد التشغيل بالحزمة المالكة لها باستخدام قاعدة بيانات الحزم الخاصة بالتوزيعة المكتشفة.
تشمل الآليات المحتملة:```text dpkg-query -S rpm -qf pacman -Qo apk info -W
عندما يتم تحديد حزمة، يمكن فحص بيانات سجل التغييرات المحلي بحثًا عن معرف CVE أو عنوان التصحيح.
عدم وجود تطابق في سجل التغييرات ليس دليلاً على وجود ثغرة. لا يدرج المورّدون دائمًا مراجع CVE فردية في سجلات التغييرات المثبتة محليًا.
### 7. مقارنة إصدار المنبع
تتم مقارنة إصدار النواة المُحلَّل مع جدول خط الأساس الثابت للماسح الضوئي.
يُنتج مقارنة الإصدارات نتيجة استدلالية للأسباب التالية:
- نوى المورّدين قد تحتوي على backports؛
- مراجعات إصدار حزم النواة خاصة بالتوزيعة؛
- نوى السحابة، والوقت الفعلي، والمحصّنة، وتمكين الأجهزة قد يكون لها جداول زمنية منفصلة للتصحيحات؛
- يمكن أن تمثل سلسلة الإصدار فرعًا يحتفظ به المورّد بدلاً من إصدار منبع غير معدل.
### 8. بيانات تعريف تحديث الحزم
حيثما يكون مدعومًا، يقوم الماسح الضوئي بتنفيذ استعلامات للقراءة فقط مقابل البيانات الوصفية المحلية الموجودة.
لا يقوم بتحديث المستودعات.
أمثلة:```text
apt list --upgradable
pacman -Qu
dnf --cacheonly --quiet check-upgrade
zypper --no-refresh list-patches --all --cve=CVE-2026-31694
apk version -l <
لا تكون نتيجة عدم توفر تحديث حديثة إلا بقدر حداثة البيانات الوصفية للمستودع المخزنة مؤقتًا.
على مضيف عادي أو جهاز افتراضي، يقارن الماسح الضوئي بين النواة قيد التشغيل والنوى المثبتة المكتشفة، ويتحقق من علامة إعادة التشغيل المستخدمة من قبل أنظمة عائلة Debian.
داخل حاوية أو ضيف WSL، يُعلَّم هذا الفحص على أنه مُتحكَّم به من المضيف بدلاً من مقارنة ملفات الضيف مع نواة المضيف.
يكون ترتيب أسبقية الأدلة تقريبًا كما يلي:
PATCHEDتشير الأدلة المحلية المباشرة إلى أن التصحيح موجود.
أمثلة:
عادةً ما تكون الثقة عالية، ولكن لا يزال يتعين التحقق من تطابق المصدر مع النواة قيد التشغيل.
NOT_EXPOSEDتهيئة النواة قيد التشغيل المكتشفة لديها FUSE معطَّل.
هذه نتيجة تعرُّض، وليست دليلاً على أن مصدر النواة نفسه يحتوي على التصحيح.
NOT_EXPOSED_BY_DOCUMENTED_PAGE_GEOMETRYحجم صفحة الذاكرة كبير بما يكفي لاحتواء السجل الموثق البالغ 4120 بايت دون تجاوز حدود الصفحة.
هذا الحكم يقتصر على هندسة الثغرة الموثقة.
UPSTREAM_BASELINE_SAFEالإصدار قيد التشغيل المُحلَّل يطابق خط أساس مُصلَح معروف من المنبع أو يسبق التنفيذ المتأثر.
يظل التحقق من حزمة البائع هو الأفضل.
POTENTIALLY_VULNERABLEالنواة المُحلَّلة ضمن نطاق متأثر من المنبع، ولم يُعثر على أي دليل محلي مباشر على التصحيح.
تتطلب هذه النتيجة مراجعة نشرة البائع الأمنية لنظام التشغيل قبل إعلان أن النواة المثبتة معرَّضة للخطر.
INCONCLUSIVEلم يتمكن الماسح الضوئي من جمع أدلة كافية.
الأسباب الشائعة:
NOT_APPLICABLEنظام التشغيل الحالي ليس Linux.
| الرمز | المعنى |
|---|---|
0 | دليل على التصحيح، أو خط أساس آمن من المنبع، أو غياب التعرُّض الموثق |
مثال:```bash python3 cve_2026_31694_scanner.py status=$?
case "$status" in 0) echo "No actionable exposure detected by the scanner" ;; 1) echo "Potential exposure detected" ;; 2) echo "Assessment inconclusive" ;; 3) echo "Scanner execution failed" ;; esac
عند تحديد `--no-exit-status`، يُرجع الماسح الضوئي `0` بعد إنشاء التقرير.
---
## مصادر الكشف
يستخدم الماسح الضوئي المصادر المحلية التالية عند توفرها:
| المصدر | المعلومات |
|---|---|
| `/etc/os-release` | هوية التوزيعة |
| `/usr/lib/os-release` | هوية التوزيعة الاحتياطية |
| `/proc/version` | مؤشرات النواة وWSL |
| `/proc/config.gz` | إعدادات النواة قيد التشغيل |
| `/boot/config-*` | إعدادات النواة |
| `/lib/modules/*/build/.config` | إعدادات بناء النواة |
| `/proc/filesystems` | أنظمة الملفات المسجلة |
| `/proc/self/mountinfo` | وحدات تحميل FUSE النشطة |
| `/proc/1/cgroup` | مؤشرات الحاويات |
| `/dev/fuse` | وجود الجهاز وأذوناته |
| `/usr/src/*/fs/fuse/readdir.c` | دليل تصحيح اختياري على مستوى المصدر |
| `/lib/modules` | جرد النواة المثبتة |
| `/usr/lib/modules` | جرد النواة المثبتة |
| `/boot/vmlinuz-*` | جرد النواة المثبتة |
| `/var/run/reboot-required` | مؤشر إعادة التشغيل لعائلة دبيان |
| قاعدة بيانات الحزم | ملكية حزم النواة |
| سجلات تغييرات الحزم | دليل اختياري للترقية الخلفية المحلية |
| ذاكرة تخزين الحزم المؤقتة | دليل اختياري لتوفر التحديث |
---
## دعم التوزيعات
### كشف عائلة التوزيعة
| العائلة | التوزيعات المعترف بها |
|---|---|
| Ubuntu | Ubuntu, Linux Mint, Pop!_OS, elementary OS, Zorin OS |
| Debian | Debian, Kali Linux, Raspbian, Parrot OS |
| Arch | Arch Linux, Manjaro, Garuda Linux, EndeavourOS, CachyOS |
| Fedora | Fedora Linux |
| RHEL | RHEL, CentOS, Rocky Linux, AlmaLinux, Oracle Linux, Amazon Linux |
| SUSE | openSUSE Tumbleweed, openSUSE Leap, SLES, SLED |
| Alpine | Alpine Linux |
| Gentoo | Gentoo Linux |
| Void | Void Linux |
| NixOS | NixOS |
| غير معروف | إرشادات لينكس عامة |
### دعم الاستعلام عن التحديث المحلي
| العائلة | استعلام التحديث للقراءة فقط |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | `dnf check-upgrade` مخزّن مؤقتًا |
| SUSE | قائمة تصحيحات CVE المخزنة مؤقتًا باستخدام `zypper` |
| Alpine | `apk version -l <` |
| Gentoo | غير منفّذ |
| Void | غير منفّذ |
| NixOS | غير منفّذ |
| غير معروف | غير منفّذ |
عدم وجود تحديث مرئي محليًا لا يعني عدم توفر حزمة مصححة. قد تكون بيانات المستودع قديمة أو قد لا تكون التوزيعة قد نشرت حزمة بعد.
---
## توليد التخفيف
يتم تحديد إرشادات التخفيف وفقًا لما يلي:
- عائلة التوزيعة؛
- مدير الحزم؛
- حالة الحاوية أو WSL؛
- إعداد FUSE؛
- توفر `/dev/fuse`؛
- وحدات تحميل FUSE النشطة؛
- حالة إعادة التشغيل؛
- الحكم النهائي.
يقوم الماسح بطباعة الأوامر ولكنه لا ينفذها أبدًا.
### عائلة دبيان وأوبونتو
التسلسل النموذجي المُنشأ:```bash
sudo apt update
sudo apt full-upgrade
sudo reboot
راجع معاملة الحزمة المقترحة قبل الموافقة عليها.
بعد إعادة التشغيل:```bash uname -r python3 cve_2026_31694_scanner.py
### عائلة Arch و Manjaro
التسلسل الناتج النموذجي:```bash
sudo pacman -Syu
sudo reboot
أنظمة عائلة آرتش تتطلب ترقية كاملة للنظام. لا تقم بتحديث قواعد بيانات الحزم باستخدام pacman -Sy ثم تثبيت حزم محددة دون إكمال الترقية.
التسلسل النموذجي المُولَّد:```bash sudo dnf upgrade --refresh sudo systemctl reboot
الأنظمة التي تستخدم `yum` قد تتلقى الأمر `yum` المقابل.
### عائلة SUSE
التسلسل النموذجي المُولَّد:```bash
sudo zypper refresh
sudo zypper patch --cve=CVE-2026-31694
sudo zypper patch --category security
sudo systemctl reboot
قد لا يتوفر التصحيح الخاص بـ CVE كمعاملة منفصلة في كل منتج من منتجات SUSE أو حالة مستودع.
التسلسل الناتج النموذجي:```bash doas apk update doas apk upgrade doas reboot
تعتمد بادئة الامتياز على ما إذا كان الماسح الضوئي يجد `sudo` أو `doas` أو جلسة تعمل بصلاحيات الجذر بالفعل.
### Gentoo Linux
التسلسل النموذجي المُنشأ:```bash
sudo emaint sync -a
sudo emerge --ask --update --deep --newuse @world
يعتمد تثبيت النواة وتفعيلها على سير عمل نواة Gentoo المكوَّن على المضيف.
التسلسل الناتج النموذجي:```bash sudo xbps-install -Suv sudo reboot
### NixOS
التسلسل الناتج النموذجي:```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot
عند عدم إمكانية إكمال التصحيح فورًا، قد يقترح الماسح ضوابط مؤقتة.
تشمل التوصيات المحتملة:
/dev/fuse مؤقتًا؛/dev/fuse من الحاويات غير الموثوقة؛CAP_SYS_ADMIN؛--privileged.يمكن أن تعطّل هذه الضوابط أعباء العمل المشروعة، بما في ذلك:
يجب ألا تحل القيود المؤقتة محل تثبيت نواة مُصححة من البائع.
عادةً ما تشارك الحاويات نواة المضيف.
قد يكتشف الماسح الذي يتم تنفيذه داخل حاوية:
/dev/fuse، حتى عندما يكون المضيف قد فعّل FUSE.لهذا السبب، يضع الماسح الأدلة المعتمدة على المضيف كغير موثوقة ويوجّه المعالجة إلى مضيف الحاوية.
شغّل الماسح مباشرة على المضيف للحصول على تقييم موثوق للحزم وإعادة التشغيل.
تتضمن إرشادات تعزيز أمان الحاويات إزالة:```text --device /dev/fuse --cap-add SYS_ADMIN --privileged
يجب أيضًا مراجعة تكوين Compose المكافئ:```yaml
devices:
- /dev/fuse:/dev/fuse
cap_add:
- SYS_ADMIN
privileged: true
يتم إدارة نواة WSL بواسطة Windows بدلاً من حزمة النواة الخاصة بتوزيعة Linux الضيف.
إرشادات نموذجية مولّدة:```powershell wsl --update wsl --shutdown
شغّل هذه الأوامر من Windows PowerShell، وأعد تشغيل التوزيعة، ثم أعد تشغيل الماسح الضوئي.
تحديث حزم الضيف فقط باستخدام `apt` أو `dnf` أو أي مدير حزم Linux آخر لا يستبدل نواة WSL.
### الأجهزة الافتراضية
عادةً ما تمتلك الآلة الافتراضية نواة الضيف الخاصة بها. تبقى فحوصات الحزم وإعادة التشغيل الخاصة بتوزيعة معينة سارية المفعول داخل الضيف.
يجب تقييم مضيف المُشغِّل الافتراضي بشكل منفصل.
---
## تنسيقات التقارير
### نص
مخرجات النص مخصّصة للاستخدام المباشر في الطرفية.```bash
python3 cve_2026_31694_scanner.py --format text
يحتوي التقرير على:
تحتوي مخرجات JSON على التقرير الكامل المبني على dataclass.```bash
python3 cve_2026_31694_scanner.py
--format json
--output report.json
مثال على تحديد الحقل:```bash
python3 cve_2026_31694_scanner.py --format json --no-exit-status |
python3 -c '
import json
import sys
report = json.load(sys.stdin)
print(report["hostname"])
print(report["verdict"])
print(report["confidence"])
print(report["kernel_release"])
'
مخرجات Markdown مناسبة للسجلات الفنية والتذاكر وتقارير التقييم.```bash
python3 cve_2026_31694_scanner.py
--format markdown
--output report.md
### تقرير التخفيف فقط```bash
python3 cve_2026_31694_scanner.py \
--mitigation-only \
--format markdown
مع تنسيق JSON، يعيد وضع التخفيف فقط كائن التخفيف بدلاً من تقرير المضيف الكامل.
#!/usr/bin/env bash
set -u
report="cve-2026-31694-$(hostname)-$(date +%Y%m%d-%H%M%S).json"
python3 cve_2026_31694_scanner.py
--format json
--output "$report"
status=$?
case "$status" in 0) echo "Assessment completed without a potential-vulnerability verdict" ;; 1) echo "Potential CVE-2026-31694 exposure detected: $report" >&2 ;; 2) echo "Assessment inconclusive: $report" >&2 ;; *) echo "Scanner failure: $report" >&2 ;; esac
exit "$status"
### جمع التقارير دون فشل المهمة```bash
python3 cve_2026_31694_scanner.py \
--format json \
--output /var/tmp/cve-2026-31694.json \
--no-exit-status
30 3 * * * /usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status
هذا يستبدل نفس ملف التقرير. استخدم سكربت غلاف عندما تكون التقارير التاريخية مطلوبة.
### مثال خدمة Systemd```ini
[Unit]
Description=Passive CVE-2026-31694 assessment
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/log
يحتاج الماسح إلى صلاحية قراءة لبيانات kernel وبيانات الحزم. قد تؤدي قيود sandbox الإضافية إلى إخفاء الأدلة وإنتاج تقرير غير حاسم.
لتقييم الأسطول:
لا تتعامل مع الفحص الناتج عن بناء صورة حاوية على أنه تقييمًا لـ kernel المضيف.
POTENTIALLY_VULNERABLEحدد إصدار kernel قيد التشغيل بدقة: ```bash uname -r
حدد التوزيعة والإصدار المثبت: ```bash cat /etc/os-release
راجع حالة CVE لدى بائع التوزيعة لحزمة النواة والنكهة المحددين.
قم بتحديث البيانات الوصفية للحزم.
ثبّت حزمة النواة المُصحّحة المدعومة من البائع.
أعد تشغيل المضيف.
تأكد من أن النواة قيد التشغيل تغيّرت: ```bash uname -r
أعد تشغيل الماسح الضوئي.
INCONCLUSIVEاجمع الأدلة المفقودة:```bash uname -a getconf PAGE_SIZE cat /etc/os-release grep CONFIG_FUSE_FS /boot/config-"$(uname -r)" 2>/dev/null cat /proc/filesystems ls -l /dev/fuse 2>/dev/null findmnt -t fuse,fuseblk,fusectl
ثم تحقق من حزمة النواة الدقيقة وفقًا لإشعار البائع.
### التحقق من إعادة التشغيل
تثبيت حزمة نواة مُصححة لا يغيّر النواة قيد التشغيل حاليًا.
تحقق من كلٍّ من النواة المثبتة والنواة قيد التشغيل، ثم أعد التشغيل حسب الحاجة.
أمثلة:```bash
uname -r
ls -1 /lib/modules
قد توفر أنظمة عائلة Debian أيضًا:```bash test -e /var/run/reboot-required && cat /var/run/reboot-required
### مراجعة اعتماديات FUSE
قبل إلغاء تحميل FUSE أو حظره مؤقتًا:```bash
findmnt -t fuse,fuseblk,fusectl
lsmod | grep '^fuse'
ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'
لا تقم بإلغاء تحميل الوحدة النمطية أثناء تركيب أنظمة ملفات FUSE النشطة.
الماسح لا يقوم عمدًا بتشغيل مسار الكود القابل للاستغلال.
النتيجة POTENTIALLY_VULNERABLE تعني أن الأدلة السلبية المتاحة متوافقة مع التعرض. وهي ليست دليلًا على أن الاستغلال سينجح.
نوى التوزيعات تقوم بشكل متكرر بنقل التصحيحات الأمنية.
قد تكون النسخة المنبعية ذات المظهر الأقدم مصححة بالترقيع.
نشرة البائع وإصدار الحزمة الدقيق هما المرجع المعتمد لنوى التوزيعات المدارة.
شجرة المصدر الموجودة تحت /usr/src قد لا تطابق النواة قيد التشغيل.
يجب التحقق من أدلة ترقيع المصدر مقارنة بـ:```bash uname -r
ومصدر الحزمة أو دليل البناء المستخدم لتلك النواة بالضبط.
### بيانات وصفية قديمة للحزم
لا يقوم الماسح بتحديث المستودعات.
تعتمد فحوصات تحديث الحزم على حالة الذاكرة المؤقتة المحلية الموجودة.
استخدم أوامر التحديث والترقية المولّدة الخاصة بالتوزيعة لاتخاذ قرار حديث بشأن الحزم.
### الحاويات
ترى الحاوية نواة المضيف ولكن عادةً ما يكون لديها بيانات وصفية مختلفة للحزم.
شغّل الماسح على المضيف.
### WSL
لا تحدد حالة حزم الضيف لنظام لينكس حالة تصحيح نواة WSL.
حدّث WSL من ويندوز.
### النوى المخصصة
قد لا تحتوي النوى المخصصة، والمدمجة، ونوى الأجهزة، ونوى المورّدين، والنوى المبنية ذاتيًا على بيانات وصفية للحزم أو سلاسل إصدار يمكن التعرف عليها.
افحص الالتزام (commit) الفعلي للمصدر أو ملاحظات إصدار المورّد.
### الترقيع المباشر
لا يحدد الماسح ما إذا كان إطار عمل الترقيع المباشر قد طبق هذا التصحيح المحدد على النواة قيد التشغيل.
استخدم أدوات الحالة وبيانات النشرات الاستشارية من مورّد الترقيع المباشر.
### حالة الإقلاع الآمن ومحمّل الإقلاع
لا يتحقق الماسح من:
- أي نواة سيختارها محمّل الإقلاع تاليًا؛
- ما إذا كان الإقلاع الآمن يقبل الصورة المثبتة؛
- ما إذا كانت initramfs جديدة قد أُنشئت بشكل صحيح؛
- ما إذا كان الجهاز قد أُعيد تشغيله بنجاح إلى النواة المتوقعة.
### أنظمة الملفات الموزعة ومساحات الأسماء
يقيّم الماسح مساحة اسم العملية الحالية.
قد لا تظهر عمليات التركيب أو الوصول إلى الأجهزة المخفية بواسطة مساحات الأسماء في التقرير.
---
## استكشاف الأخطاء وإصلاحها
### `Kernel configuration could not be determined`
تحقق مما إذا كان أحد هذه الملفات موجودًا:```bash
ls -l /proc/config.gz
ls -l /boot/config-"$(uname -r)"
ls -l /lib/modules/"$(uname -r)"/build/.config
بعض التوزيعات لا تعرض التهيئة الجارية عبر /proc/config.gz.
Running kernel package could not be identifiedالأسباب المحتملة:
تحقّق:```bash uname -r ls -l /boot ls -l /lib/modules/"$(uname -r)"
### استعلام تحديث الحزمة لا يُظهر أي تحديث
قم بتحديث بيانات الحزم الوصفية باستخدام دليل التخفيف المُنشأ، ثم أعد تشغيل الماسح الضوئي.
لا يقوم الماسح الضوئي السلبي بتحديث المستودعات تلقائيًا.
### `POTENTIALLY_VULNERABLE` بعد تثبيت التحديثات
تأكد من أن النواة الجديدة قيد التشغيل:```bash
uname -r
قارنه مع أدلة النواة المثبتة:```bash ls -1 /lib/modules
قد لا يزال إعادة التشغيل مطلوبًا.
تحقق أيضًا من نشرة البائع لأن backport المُصلَح قد لا يتطابق مع خط الأساس لإصدار upstream.
### FUSE مدمج في النواة
عندما يعرض التقرير:```text
CONFIG_FUSE_FS=y
modprobe -r fuse وحظر الوحدات (module blacklisting) لا يمكنهما تعطيل FUSE.
استخدم نواة معدّلة (patched kernel) أو نواة مبنية دون دعم FUSE.
قد يحتاج الماسح الضوئي إلى صلاحية قراءة لـ:```text /proc /boot /lib/modules /usr/lib/modules /usr/src package database directories package cache directories
اضبط تقوية الخدمة بحيث تظل هذه المسارات قابلة للقراءة.
---
## تخطيط الملفات
تخطيط المشروع الموصى به:```text
cve-2026-31694-scanner/
├── README.md
└── cve_2026_31694_scanner.py
التخطيط الموصى به للتثبيت:```text /opt/security/cve-2026-31694/ ├── README.md └── cve_2026_31694_scanner.py
مثال:```bash
sudo install -d -m 0755 /opt/security/cve-2026-31694
sudo install -m 0755 \
cve_2026_31694_scanner.py \
/opt/security/cve-2026-31694/
sudo install -m 0644 \
README.md \
/opt/security/cve-2026-31694/
Aung Myat Thu [w01f]
| الخيار | الوصف |
|---|
--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 | عرض مساعدة الأمر. |
| FUSE معطّل في التكوين المكتشف. |
| unknown | لا يتوفر مصدر تكوين قابل للقراءة. |
1| قد يكون معرَّضًا للخطر |
2 | غير حاسم |
3 | خطأ في الماسح الضوئي أو في توليد التقرير |