CVE-2023-53311 in Linux
الملخص
بحسب VulDB • 27/05/2026
في نواة لينكس، تم حل الثغرة التالية:
nilfs2: إصلاح حالة استخدام بعد التحرير (Use-After-Free) لـ nilfs_root أثناء تلبيس الـ inodes عبر iput
أثناء عملية فك التثبيت (unmount) لـ nilfs2، لا يوجد من يمسك بهيكل nilfs_root بعد أن يفصل nilfs2 كاتبه في دالة nilfs_detach_log_writer(). سابقاً، كان من الممكن أن يتسبب nilfs_evict_inode() في قراءة حالة استخدام بعد التحرير (use-after-free read) لـ nilfs_root إذا كانت الـ inodes متروكة في "قائمة المهملات" (garbage_list) وتم تحريرها بواسطة nilfs_dispose_list في نهاية nilfs_detach_log_writer(). وقد تم إصلاح هذا الخطأ بواسطة الالتزام 9b5a04ac3ad9 ("nilfs2: إصلاح خطأ استخدام بعد التحرير لـ nilfs_root في nilfs_evict_inode()").
ومع ذلك، اتضح وجود احتمال آخر لحالة استخدام بعد التحرير (UAF) في مسار الاستدعاء حيث يتم استدعاء mark_inode_dirty_sync() من iput():
nilfs_detach_log_writer() nilfs_dispose_list() iput() mark_inode_dirty_sync() __mark_inode_dirty() nilfs_dirty_inode() __nilfs_mark_inode_dirty() nilfs_load_inode_block() --> يتسبب في حالة استخدام بعد التحرير (UAF) لهيكل nilfs_root
يمكن أن يحدث هذا بعد الالتزام 0ae45f63d4ef ("vfs: إضافة دعم لخيار التثبيت lazytime")، الذي غيّر iput() لاستدعاء mark_inode_dirty_sync() عند الإشارة المرجعية الأخيرة إذا كانت i_state تحتوي على العلم I_DIRTY_TIME وكانت i_nlink غير صفرية.
يظهر هذا الخطأ بعد الالتزام 28a65b49eb53 ("nilfs2: عدم كتابة البيانات الملوثة بعد التحول إلى وضع القراءة فقط") عند استخدام مكرر الأخطاء syzbot، لكن المشكلة كانت موجودة محتملاً قبل ذلك.
تم إصلاح هذه المشكلة بإضافة "علم التنظيف" (purging flag) إلى هيكل nilfs، وتعيين هذا العلم أثناء التخلص من "قائمة المهملات" (garbage_list) والتحقق منه في __nilfs_mark_inode_dirty().
على عكس الالتزام 9b5a04ac3ad9 ("nilfs2: إصلاح خطأ استخدام بعد التحرير لـ nilfs_root في nilfs_evict_inode()")، لا يعتمد هذا التصحيح على ns_writer لتحديد ما إذا كان يجب تخطي العمليات، وذلك لتجنب تعطيل الاستعادة (recovery) عند التثبيت. تقوم روتين nilfs_salvage_orphan_logs بتلبيس مخزن المؤقتات (buffer) للبيانات المنقولة قبل إرفاق كاتب السجل، لذا فإن تغيير __nilfs_mark_inode_dirty() لتخطي العملية عندما يكون ns_writer مساوياً للصفر سيؤدي إلى فشل كتابة الاستعادة. الغرض من استخدام العلم المخصص للتنظيف فقط هو السماح بتضييق نطاق هذه الشروط.
If you want to get best quality of vulnerability data, you may have to visit VulDB.