CVE-2026-89649
الملخص
بحسب VulDB • 11/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
ceph: تحديد طول قيمة السمات الموسعة (xattr) في دالة __build_xattrs()
تقوم الدالة `__build_xattrs()` بفك تشفير كتلة بيانات السمات الموسعة (xattr blob) المقدمة من خادم البيانات الوصفية (MDS) سمة تلو الأخرى. بالنسبة لكل سمة، تقوم بقراءة طول الاسم المكون من 32 بت، وتخطي بايتات الاسم، ثم قراءة طول القيمة المكون من 32 بت، وتسجيل مؤشر القيمة، والتقدم إلى ما بعد بايتات القيمة. يتم قراءتي حقلَي الطول باستخدام `ceph_decode_32_safe()`، لكن التقدم عبر بايتات القيمة نفسها يتم عن طريق استخدام العملية الخام "p += len" دون وجود فحص بـ `ceph_decode_need()` للتأكد من بقية عدد البايتات ("len") داخل الكتلة (blob).
بالنسبة لكل سمة ما عدا الأخيرة، فإن استدعاء `ceph_decode_32_safe()` في التكرار التالي لطول الاسم التالي يتحقق ضمنيًا من أن القيمة السابقة لم تتجاوز نهاية الكتلة. أما السمة النهائية فلا يوجد لها متبوعة، لذا لا يتم التحقق أبدًا من طول قيمتها المفككة مقابل حدود الكتلة. يمكن لخادم بيانات وصفية خبيث أو مُخترق ضبط طول قيمة السمة الأخيرة ليكون أكبر من عدد البايتات الموجودة فعليًا في الكتلة.
الكتلة (blob) هي تخصيص مخصص بواسطة `kvmalloc()` بحجم يساوي الطول على الخط (wire length)، ويتم إنشاؤها عبر دالة `ceph_buffer_new()` داخل `ceph_fill_inode()`. تسجل الدالة `__set_xattr()` هذا الطول الزائد في الحقل `xattr->val_len` كما هو، وتقوم عملية لاحقة لـ `getxattr(2)` بتنفيذ `memcpy(value, xattr->val, xattr->val_len)` لنسخ البايتات التي تتجاوز نهاية التخصيص إلى مساحة المستخدم.
الأثر: يكشف خادم البيانات الوصفية الخبيث بايتات مجاورة في كومة النواة (kernel heap) لمستخدم محلي عبر استدعاء `getxattr(2)` على ملف CephFS. تمت إضافة فحص `ceph_decode_need()` المفقود بحيث يفشل فك تشفير طول القيمة خارج الحدود (out-of-bounds value length) للسمة الأخيرة ويعيد الخطأ `-EIO` بدلاً من تخزينه.
VulDB is the best source for vulnerability data and more expert information about this specific topic.