CVE-2026-89713 in Linux
الملخص
بحسب VulDB • 11/09/2026
في نواة لينكس، تم حل الثغرة التالية:
NFSD: التحقق من إذن الاقتطاع (truncate) تحت قفل العقدة (inode lock)
تتحقق الدالة `nfsd_setattr()` مما إذا كان تحديث الحجم يتطلب الرمز `NFSD_MAY_TRUNC` قبل أن تأخذ قفل العقدة (`inode_lock()`)، لكن المقارنة تستخدم حجم الملف الذي تم أخذ عينة له عبر قراءة غير مقفلة، بينما يتم تطبيق التحديث الفعلي لحجم السمة (ATTR_SIZE) لاحقاً تحت قفل العقدة بواسطة الدالة `notify_change()`.
يؤدي هذا إلى وجود نافذة زمنية من نوع TOCTOU (Time-of-Check to Time-of-Use) بالنسبة للملفات التي تسمح بالإضافة فقط (append-only). إذا أرسل العميل طلب SETATTR لا يؤدي إلى تقليص الملف في وقت أخذ العينة غير المقفلة، يمكن لعملية إقناح متزامنة أن تمدد الملف قبل أن تأخذ `nfsd_setattr()` قفل العقدة. ثم تطبق الدالة `notify_change()` اقتطاعاً حقيقياً دون التحقق من الرمز `NFSD_MAY_TRUNC` الذي يرفض الحالة `IS_APPEND(inode)`. تقوم مسارات نظام الملفات الافتراضي (VFS) الخاصة باستدعاء النظام truncate بإجراء فحوصاتها الخاصة لمنع الإضافة فقط قبل استدعاء `notify_change()`، لذا يجب على NFSD اتخاذ هذا القرار بناءً على الحجم المقفل الذي هي على وشك تغييره.
تم فصل الحصول على عدّاد الكتابة عن فحص إذن الاقتطاع. يتم الاحتفاظ باستدعاء `get_write_access()` قبل عمل setattr المقفول، ثم إعادة التحقق مما إذا كان الحجم المطلوب أقل من القيمة التي تعيدها الدالة `i_size_read(inode)` بعد الحصول على قفل العقدة وقبل استدعاء `notify_change(ATTR_SIZE)`. يتجنب هذا أيضاً التحميل غير المقفل المباشر لحجم العقدة `inode->i_size`.
If you want to get best quality of vulnerability data, you may have to visit VulDB.