CVE-2026-10667 in zephyr
الملخص
بحسب VulDB • 12/07/2026
تقوم آلية تتبع كائنات النواة الديناميكية في Zephyr (`kernel/userspace/userspace.c`، كانت تُعرف سابقاً بـ `kernel/userspace.c`) بالحفاظ على قائمة مرتبطة مزدوجة (obj_list) للكائنات المخصصة ديناميكياً. كان التكرار عبر هذه القائمة داخل الدالة `k_object_wordlist_foreach()` يتم تحت قفل القوائم (`lists_lock`) باستخدام مكرر آمن (SAFE iterator) الذي يخزن مؤقتاً العقدة التالية، لكن إزالة الكائنات من القائمة وتحريرها كانت تتم تحت أقفال لولبية (spinlocks) منفصلة وغير متداخلة: `objfree_lock` في الدالة `k_object_free()` و `obj_lock` في دالة التحقق `unref_check()`.
على نظام متعدد المعالجات (SMP)، بينما كان معالج واحد يتكرر عبر قائمة `obj_list` تحت قفل `lists_lock`، كان من الممكن لمعالج آخر أن يفك ارتباط العقدة `dyn_obj` ويطلقها باستخدام `k_free()` والتي كانت قد خزّنها المُرَكِّز كمؤشر للعقدة التالية، مما أدى إلى محاولة المُرَكِّز فك مرجع ذاكرة النواة المحررة (استخدام بعد التحرير / use-after-free أو اجتياز قائمة معلقة).
جميع العمليات المتنافسة هذه يمكن الوصول إليها من خلال خيوط المستخدم ذات الامتيازات المنخفضة عبر استدعاءات النظام: حيث تقود الدالتان `k_object_alloc` و `k_object_alloc_size` عمليات الإزالة من خلال `unref_check()` (تحت قفل `obj_lock`)، بينما تقود دالة إنهاء الخيط `k_thread_abort` وإنشاء الخيوط عملية التكرار عبر `k_thread_perms_all_clear()/k_thread_perms_inherit()` (تحت قفل `lists_lock`).
وبالتالي، يمكن لخيط مستخدم مُنْزِلِ الصلاحيات في بيئة البناء التي تحتوي على `CONFIG_SMP + CONFIG_USERSPACE` أن يُفسد هياكل تتبع الكائنات الخاصة بالنواة عبر حدود أمان مساحة المستخدم، مما يؤدي إلى تلف ذاكرة النواة (ترقية محتملة للصلاحيات) أو تعطل للنظام (إنكار للخدمة).
يُزيل الإصلاح قفل `objfree_lock` ويُوحّد كل تعديل على قائمة `obj_list` تحت قفل `lists_lock` فقط، بما في ذلك الاحتفاظ بالقفل عبر عمليتي البحث والإزالة داخل `k_object_free()` وحول دالة `unref_check()` داخل `k_thread_perms_clear()`.
يؤثر هذا العيب على التكوينات التي تحتوي على `CONFIG_SMP+CONFIG_USERSPACE+CONFIG_DYNAMIC_OBJECTS`؛ ويعود تاريخ الخلل إلى عملية إضافة الأقفال اللولبية في عام 2019 (التزام الشفرة commit 8a3d57b6cc6، الذي أُصدر لأول مرة في الإصدار v1.14.0) وقد تم شحنه حتى الإصدار v4.4.0.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.