
سكربت للتحقق مما إذا كانت الأنظمة معرضة للثغرة cve-2026-23111
CVE-2026-23111 هي ثغرة في نواة لينكس في nf_tables يمكن استغلالها لتصعيد الامتيازات محليًا بواسطة مستخدم غير ممتاز على الأنظمة التي تتوفر فيها مساحات أسماء المستخدمين و nftables.[1][2] النشرات الاستشارية من البائعين والحكومات تصفها كمشكلة محلية تؤثر على توزيعات لينكس وتؤكد على التصحيح كإصلاح أساسي.[3][4]
يحتوي هذا المستودع على سكريبت تحقق دفاعي مصمم للمساعدة في تقييم ما إذا كان المضيف يعرض الشروط التقنية المرتبطة بهذه الثغرة دون توفير استغلال لتصعيد الامتيازات. يتحقق من ظروف النواة ووقت التشغيل ذات الصلة، ويحمل وحدة nf_tables اختياريًا للاختبار الوظيفي الكامل، ويحاول مسار تحقق غير ممتاز باستخدام unshare و nft، ويجمع سجلات تشخيصية محلية، ويصنف المضيف إلى أحكام تشغيلية مثل آمن على الأرجح، محظور بواسطة سياسة محلية، أو مسار مكشوف متاح.[1][5]
وفقًا لـ NVD، فإن CVE-2026-23111 هي ثغرة في nf_tables بنواة لينكس تم حلها كإصلاح لخطأ منطقي في netfilter ويمكن استغلالها لتصعيد الامتيازات محليًا من مستخدم غير ممتاز عبر مساحات أسماء المستخدمين و nftables على التكوينات المتأثرة.[1] تصف نشرة أوبونتو الأمنية نفس مسار الاستغلال عالي المستوى وتتتبع حالات الحزم المتأثرة والثابتة حسب الإصدار.[2]
صرحت ريد هات أن مستخدمًا محليًا منخفض الامتيازات قد يستغل المشكلة لإحداث رفض الخدمة أو ربما تحقيق تصعيد الامتيازات، وتوثق مسار تخفيف يعتمد على منع تحميل وحدة nf_tables عندما يكون ذلك مقبولًا تشغيليًا.[3] كما تشير التوجيهات الوطنية من المركز الكندي للأمن السيبراني المؤسسات المتأثرة إلى تحديثات البائعين وتذكر إعادة إنشاء initramfs عند استخدام إجراءات منع تحميل الوحدة.[4]
السكريبت مخصص لتقييم التعرض الدفاعي، وليس للاستغلال. وهو مصمم لـ:
CONFIG_USER_NS و CONFIG_NF_TABLES موجودين على ما يبدو.[1]kernel.unprivileged_userns_clone و user.max_user_namespaces لتقدير ما إذا كانت مساحات أسماء المستخدمين غير المميزة متاحة.install nf_tables /bin/false) أو قائمة سوداء ضعيفة لوحدة nf_tables./proc/kallsyms للرمز الضعيف (nft_map_catchall_activate) مقابل الرمز بعد التصحيح (nft_catchall_set_activate) قبل أي تفاعل مع الوحدة.nf_tables اختياريًا عبر modprobe عند تحديد --allow-load-module (انظر أدناه)، وإلغاء تحميلها تلقائيًا عند الخروج.unshare -U -n --map-root-user + nft عند تحميل الوحدة، وتسجيل stdout و stderr وسجلات النواة الأخيرة.unshare --user ينشئ بالفعل مساحة اسم وأن CAP_NET_ADMIN فعال بداخلها، لتأكيد ما إذا كانت قيود AppArmor أو SELinux فعالة حقًا.يخزن السكريبت السجلات في دليل فرعي لدليل السكريبت ويزيلها افتراضيًا ما لم يتم استخدام --keep-logs.
افتراضيًا، لا يقوم السكريبت أبدًا بتحميل nf_tables. إذا لم تكن الوحدة محملة بالفعل عند بدء السكريبت، يتم تخطي جميع اختبارات nft الوظيفية ويتم اشتقاق الحكم فقط من إصدار النواة، بصمة kallsyms، تكوين modprobe، سجل تغييرات RPM، وأدلة sysctl/LSM.
هذا الإعداد الافتراضي المحافظ يتجنب توسيع سطح الهجوم عن غير قصد على المضيفين الإنتاجيين. لتمكين الاختبار الوظيفي الكامل على نظام خاضع للرقابة أو مخصص للأدوات، استخدم --allow-load-module كجذر (انظر أدناه).
# الافتراضي — لا تحميل وحدة، حكم يعتمد فقط على أدلة السياسة
./check_cve_2026_23111.sh
./check_cve_2026_23111.sh --color
./check_cve_2026_23111.sh --keep-logs
./check_cve_2026_23111.sh --color --keep-logs
# اختبار وظيفي كامل — تحميل (وإلغاء تحميل) nf_tables، يتطلب صلاحيات الجذر
sudo ./check_cve_2026_23111.sh --allow-load-module
sudo ./check_cve_2026_23111.sh --allow-load-module --color --keep-logs
| الخيار | الوصف |
|---|---|
--allow-load-module | تفويض السكريبت لتحميل nf_tables عبر modprobe إذا لم تكن الوحدة محملة بالفعل. يتيح تشغيل أداة تمرين مسار الالتقاط الكامل nft واختبار فعالية CAP_NET_ADMIN. يتم إلغاء تحميل الوحدة تلقائيًا عند الخروج. يتطلب صلاحيات الجذر. يُرفض إذا كان هناك رفض صارم لـ modprobe قيد التنفيذ بالفعل. استخدم فقط على أنظمة غير إنتاجية أو مخصصة للأدوات. |
--color | تمكين إخراج stdout ملون عندما يدعم الطرفية ذلك. |
--keep-logs | الاحتفاظ بالسجلات والآثار تحت دليل السكريبت بدلاً من حذفها عند الخروج. |
--help | طباعة معلومات الاستخدام والخروج. |
--allow-load-moduleاستخدم --allow-load-module عندما تحتاج إلى أعلى حكم موثوق على جهاز افتراضي معزول أو غير إنتاجي أو مبني لغرض الاختبار. السيناريوهات النموذجية:
لا تستخدم --allow-load-module على المضيفين الإنتاجيين حيث يتم حظر nf_tables عن قصد أو حيث سيؤدي تحميلها إلى انتهاك سياسة التعزيز.
--allow-load-moduleقبل محاولة تحميل الوحدة، يفرض السكريبت الفحوصات التالية وينهي التشغيل بخطأ إذا فشل أي منها:
install nf_tables /bin/false) في /etc/modprobe.d/.modprobe متاحًا على النظام.إذا تم تحميل الوحدة بنجاح بواسطة السكريبت، يتم استدعاء modprobe -r nf_tables عند الخروج عبر مصيدة cleanup()، بغض النظر عن كيفية إنهاء السكريبت (نجاح، خطأ، أو CTRL+C).
يستخدم السكريبت أحكامًا تشغيلية بدلاً من نتائج الاستغلال:
| الحكم | المعنى |
|---|---|
not-affected | إصدار النواة أقل من 5.13؛ ميزة عنصر الالتقاط لم تُقدم بعد ومسار الشفرة الضعيفة غير موجود. |
likely-patched-vendor-confirmed | تم العثور على CVE-2026-23111 في سجل تغييرات RPM لنواة البائع، مما يؤكد وجود backport للإصلاح بغض النظر عن الإصدار المنبع. |
likely-patched-upstream-confirmed | إصدار النواة ضمن النطاق المُصلح المنبع و اختبار nft الوظيفي أعاد قيمة غير صفرية بدون إشارة نواة — أقوى دليل ثابت + ديناميكي على حالة آمنة. |
likely-patched-upstream | إصدار النواة ضمن نطاق مُصلح منبع ولكن لم يتم تشغيل الاختبار الوظيفي (الوحدة غائبة، أو غير حاسمة). يجب التحقق من حالة نشرة البائع الاستشارية. |
likely-safe-or-patched | لم يتم تأكيد أي مسار قابل للاستغلال بواسطة السكريبت؛ السبب غامض بين نواة مُصلحة، أو غياب الشفرة الضعيفة، أو حظر محلي ضمني. |
blocked-by-local-policy | يبدو أن المسار المختبر محظور بواسطة AppArmor، SELinux، قيود مساحة اسم المستخدم، أو رفض modprobe.[6] الحظر السياسي ليس بديلاً عن إصلاح البائع. |
exposed-path-available | المضيف يعرض مسار userns + nftables متوافق مع متطلبات الاستغلال الموثقة.[1][5] |
strong-signal-lab-confirmation | تمت ملاحظة إشارة سجل نواة متوافقة مع تلف الذاكرة المرتبط بـ nf_tables. تأكد فقط في مختبر مخصص للأدوات قابل للاستبدال. |
prerequisites-missing | أدوات التشخيص المطلوبة (unshare، nft) مفقودة؛ لم يكتمل أي تحقق وقت تشغيل ذي معنى. |
تهدف هذه الأحكام إلى دعم تحديد أولويات التصحيح والفرز الدفاعي، وليس لتحل محل التحقق من حالة حزمة البائع.
يقوم السكريبت بمطابقة النواة قيد التشغيل مع نقاط الإصلاح الموثقة من المنبع:
| الفرع | ثابت في | الالتزام المنبع |
|---|---|---|
| 6.13.x+ | ≥ 6.13.1 | f41c5d1 |
| 6.12.x | ≥ 6.12.12 | 8c760ba |
| 6.6.x | ≥ 6.6.75 | b9b6573 |
| 6.1.x | ≥ 6.1.128 | 8b68a45 |
| 6.2–6.5, 6.7–6.11 | منتهي الدعم منبعًا | backport من التوزيعة فقط |
| 5.15.x | يعتمد على التوزيعة | أمازون لينكس: ALAS2KERNEL-5.15-2026-098 |
| 5.10.x | يعتمد على التوزيعة | أمازون لينكس 2: معلق حتى مارس 2026 |
| 5.4.x | يعتمد على التوزيعة | أمازون لينكس 2: معلق حتى مارس 2026 |
| 5.13–5.14 | منتهي الدعم منبعًا | backport من التوزيعة فقط |
| < 5.13 | غير متأثر | ميزة الالتقاط غير موجودة |