
سكربت للتحقق مما إذا كانت الأنظمة معرضة للثغرة 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 (انظر أدناه)، وإلغاء تحميلها تلقائيًا عند الخروج.يخزن السكريبت السجلات في دليل فرعي لدليل السكريبت ويزيلها افتراضيًا ما لم يتم استخدام --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استخدم --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).
يستخدم السكريبت أحكامًا تشغيلية بدلاً من نتائج الاستغلال:
تهدف هذه الأحكام إلى دعم تحديد أولويات التصحيح والفرز الدفاعي، وليس لتحل محل التحقق من حالة حزمة البائع.
يقوم السكريبت بمطابقة النواة قيد التشغيل مع نقاط الإصلاح الموثقة من المنبع:
الإجراء الأساسي الموصى به هو تثبيت تحديث النواة المُصلح من البائع وإعادة التشغيل إلى النواة المصححة.[2][3][4] نظرًا لأن الاستغلال يعتمد على سطح هجوم النواة المحلي، يمكن أن يقلل التعزيز الإضافي من التعرض أثناء جدولة التصحيح أو التحقق منه.[5][6]
nf_tables إذا كان النظام لا يتطلب وظائف nftables وتم التحقق من تأثير التغيير التشغيلي.[3][4]CAP_NET_ADMIN، وتقليل عدد الحسابات التي يمكنها معالجة حالة جدار الحماية.[5]تقييد مساحات أسماء المستخدمين غير المميزة:
echo 'kernel.unprivileged_userns_clone=0' > /etc/sysctl.d/99-cve-2026-23111.conf
echo 'user.max_user_namespaces=0' >> /etc/sysctl.d/99-cve-2026-23111.conf
sysctl --load /etc/sysctl.d/99-cve-2026-23111.conf
حظر تحميل وحدة nf_tables عندما يكون آمنًا تشغيليًا:
echo 'install nf_tables /bin/false' > /etc/modprobe.d/disable-nf_tables.conf
rmmod nf_tables 2>/dev/null || true
إذا تم استخدام تخفيف تحميل الوحدة، توصي بعض التوجيهات بإعادة إنشاء initramfs حتى لا يتم تحميل الوحدة المحظورة أثناء الإقلاع المبكر.[4]
توثق أوبونتو قيود AppArmor لمساحات أسماء المستخدمين غير المميزة كطريقة لتقليل سطح الهجوم وليس كبديل كامل لإصلاحات النواة.[6] قد يبدو المضيف أقل تعرضًا في اختبار وقت التشغيل لأن مسار الهجوم محظور محليًا، بينما لا يزال العلاج طويل المدى يتطلب تثبيت حزمة النواة المُصلحة من البائع.[2][6] يتحقق السكريبت من فعالية قيود AppArmor من خلال محاولة استدعاء unshare --user فعلي والتحقق مما إذا كانت CAP_NET_ADMIN داخل مساحة اسم مستخدم+شبكة فعالة.
تدرج Red Hat بشكل صريح منع تحميل وحدة nf_tables كتخفيف لـ CVE-2026-23111 عندما يكون هذا التغيير مناسبًا للبيئة.[3] يكتشف السكريبت هذا التكوين عبر check_modprobe_deny() ويميز بين الرفض الصارم (install nf_tables /bin/false، الذي يمنع التحميل عند الطلب) والقائمة السوداء الضعيفة (التي لا تمنع). على أنظمة عائلة RHEL، يفحص السكريبت أيضًا سجل تغييرات RPM للنواة قيد التشغيل بحثًا عن إدخال backport لـ CVE-2026-23111، مما يتيح حكمًا مؤكدًا من البائع بغض النظر عن رقم الإصدار المنبع.
هذا الـ README والسكريبت المرافق مخصصان للتحقق الدفاعي، والجرد، وتخطيط التخفيف. لا يحلان محل توجيهات البائع، أو التحقق على مستوى الحزمة، أو عمليات إدارة التصحيح القياسية، ولا ينبغي استخدامهما كبديل لتطبيق الإصلاحات الرسمية الموصوفة في النشرات الاستشارية المرتبطة.[2][3][4]
مستودع للتعلم والاختبار والبحث في مفاهيم الأمن السيبراني في بيئات خاضعة للرقابة.
هذا المستودع مخصص للأغراض التعليمية وأبحاث الأمن المصرح بها فقط.
صُمم لمساعدة المستخدمين على التعرف على:
استخدم هذا المستودع فقط في البيئات التي لديك إذن فيها، مثل:
الاستخدام غير المصرح به أو غير القانوني ممنوع تمامًا.
المؤلف والمساهمون غير مسؤولين عن أي ضرر أو سوء استخدام أو مشاكل قانونية أو خسائر ناتجة عن هذا المشروع.
باستخدام هذا المستودع، فإنك توافق على أن:
هذا المشروع مخصص من أجل:
يرجى اتباع ممارسات الإفصاح المسؤولة والامتثال لجميع القوانين المعمول بها.
للإفصاح المسؤول أو التعاون، اتصل بمشرف المستودع عبر GitHub.
unshare -U -n --map-root-user + nft عند تحميل الوحدة، وتسجيل stdout و stderr وسجلات النواة الأخيرة.unshare --user ينشئ بالفعل مساحة اسم وأن CAP_NET_ADMIN فعال بداخلها، لتأكيد ما إذا كانت قيود AppArmor أو SELinux فعالة حقًا.| الخيار | الوصف |
|---|
--allow-load-module | تفويض السكريبت لتحميل nf_tables عبر modprobe إذا لم تكن الوحدة محملة بالفعل. يتيح تشغيل أداة تمرين مسار الالتقاط الكامل nft واختبار فعالية CAP_NET_ADMIN. يتم إلغاء تحميل الوحدة تلقائيًا عند الخروج. يتطلب صلاحيات الجذر. يُرفض إذا كان هناك رفض صارم لـ modprobe قيد التنفيذ بالفعل. استخدم فقط على أنظمة غير إنتاجية أو مخصصة للأدوات. |
--color | تمكين إخراج stdout ملون عندما يدعم الطرفية ذلك. |
--keep-logs | الاحتفاظ بالسجلات والآثار تحت دليل السكريبت بدلاً من حذفها عند الخروج. |
--help | طباعة معلومات الاستخدام والخروج. |
| الحكم | المعنى |
|---|
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 | غير متأثر | ميزة الالتقاط غير موجودة |