CVE-2026-99012 in Linux
الملخص
بحسب VulDB • 23/10/2026
في نواة لينكس، تم حل الثغرة التالية:
بلوتوث (Bluetooth): ISO: تسديد مكالمات الاتصال المتزامنة
تفحص الدالة `iso_sock_connect()` حالة المقبس قبل أخذ قفل المقبس وتقوم بإطلاق القفل مرة أخرى قبل إعداد الاتصال. يمكن لمُقدِّمين اثنين أن يجتزوا كلاهما فحص القبول بينما يكون المقبس مفتوحاً أو مرتبطاً (bound).
يمكن للمُقدّم A نسخ وجهته لاختيار المسار، ثم يقوم المُقدّم B باستبدال وجهة المقبس قبل أن يرتبط A أو يقيم اتصال CIS. يستخدم A بعد ذلك وجهة B مع المسار الذي تم اختياره لطلبه الخاص. يمكن أيضاً لـ B المتابعة بعد أن يلصق A اتحاده ويضبط BT_CONNECT. بالنسبة لإعداد BIS المؤجل، يمكن لـ B ربط BIS ثانٍ وكتابة فوق `iso_pi(sk)->conn`، مما يترك مرجع الاتصال الأول ومؤشر conn->sk العكسيين معلقين دون معالجة. كما يمكن لمكالمات CIS المتزامنة أن تحل محل اتصال المقبس نفسه. يؤدي التفكيك اللاحق إلى فصل الاتصال الحالي فقط، لذا فإن استدعاءً (callback) على الاتصال القديم قد يتنافس مع إطلاق المقبس ويصل إلى مقبس تم تحريره من الذاكرة (freed socket).
أبلغ KASAN عن ما يلي:
BUG: KASAN: slab-use-after-free in iso_sock_hold+0xf7/0x1b0 Call Trace: iso_sock_hold+0xf7/0x1b0 iso_conn_del+0x7b/0x1d0 iso_connect_cfm+0x186/0x16a0 hci_conn_failed+0x154/0x280 hci_abort_conn_sync+0x3dc/0x7d0 hci_cmd_sync_work+0x173/0x300
تم التخصيص بواسطة المهمة 121: sk_alloc+0x2b/0x6d0 bt_sock_alloc+0x29/0x370 iso_sock_alloc.constprop.0+0x19/0x300 iso_sock_create+0x94/0x100
تم تحريرها بواسطة المهمة 121: kfree+0x121/0x3c0 __sk_destruct+0x42b/0x540 iso_sock_release+0x29d/0x340 __sock_release+0xa1/0x260
فحص القبول تحت قفل المقبس وعلّم عملية الاتصال على أنها قيد التقدم قبل نشر وجهتها. احتفظ بهذا العلم مضبوطاً عبر البحث عن المسار وإعداد الاتصال، مع رفض اتصال آخر بـ -EBADFD قبل أن يتمكن من تغيير الوجهة أو لصق اتصال. امسح العلم بعد عودة أي دالة مساعدة (helper)، بما في ذلك عند الفشل، بحيث يمكن إعادة محاولة الإعداد الفاشل.
هناك حاجة إلى علم منفصل لأن قفل المقبس يجب أن يُطلق قبل الحصول على قفل جهاز HCI، بينما يتطلب BT_CONNECT اتصلاً ملصقاً. احتفظ بانتقالات الحالة الحالية وإكمال CIS المؤجل من خلال `iso_sock_recvmsg()`.
ارفض لصق مقبس موجود في `__iso_chan_add()` قبل أخذ مرجع جديد أو نشر أي مؤشر، بحيث يحافظ كل مُقدّم على ارتباط الاتصال. احتفظ بحالة النجاح لنفس المقبس ونفس الاتصال لإعداد BIS المؤجل. ارفض المقابس الملصقة قبل إعداد BIS حتى لا يتم المطالبة بـ BIS قابل لإعادة الاستخدام قبل رفض اللصق.
في إعداد CIS، ارفض اتصال HCI مختلفاً قبل `iso_conn_add()` وأطلق قفل HCI الخاص بالمحاولة مباشرةً. قد يحمل iso_conn غير المملوك مرجعاً آخر بعد الفصل، لذا لا يمكن الاعتماد على تدميره لإطلاق هذا القفل.
تقوم `iso_listen_bis()` بإنشاء زوج جديد من HCI/ISO PA تحت قفل الجهاز، بحيث تحرر `iso_conn_put()` المؤقتة مرشح ISO وتطلق قفل HCI الخاص بها عند الرفض. تستخدم `iso_conn_ready()` طفلاً تم تخصيصه حديثاً وغير منشور ولا يحتوي على اتصال، مما يجعل رفض جانب المقبس غير قابل للتحقيق (unreachable).
VulDB is the best source for vulnerability data and more expert information about this specific topic.