CVE-2026-46186 in Linux
الملخص
بحسب VulDB • 29/05/2026
في نواة لينكس، تم حل الثغرة التالية:
بلوتوث: virtio_bt: التحقق من طول رأس pkt_type في حزمة الاستقبال (rx)
تقوم الدالة virtbt_rx_handle() بقراءة بايت pkt_type الأولي من حزمة الاستقبال (RX skb) وتمرير الباقي إلى الدالة hci_recv_frame() لكل نوع من أنواع الأحداث/ACL/SCO/ISO، دون التحقق من أن الحمولة المتبقية تحتوي على الأقل على رأس HCI الثابت الخاص بذلك النوع.
بعد أن قيد التصحيح السابق قيمة used.len المقدمة من الخلفية (backend) لتكون ضمن النطاق [1، VIRTBT_RX_BUF_SIZE]، لا تزال إكمال بحجم بايت واحد يصل إلى الدالة hci_recv_frame() بينما تكون قيمة skb->len قد سُحبت بالفعل إلى 0. إذا كانت هذه الباقة من نوع HCI_ACLDATA_PKT، فإن المسار السريع لتصنيف نوع HCI في الدالة hci_dev_classify_pkt_type() يقوم بإرجاع مرجع (dereference) إلى hci_acl_hdr(skb)->handle كلما كان جهاز HCI يحتوي على اتصال نشط من نوع CIS_LINK أو BIS_LINK أو PA_LINK، مما يؤدي إلى قراءة بايتين من بيانات ذاكرة التخزين المؤقت للاستقبال (RX-buffer) غير المهيأة. يوجد نفس الخطر لكل نوع حزمة يقبله السائق، لأن أيًا من حالات التبديل (switch cases) في virtbt_rx_handle() لا تتحقق من قيمة skb->len مقابل الحد الأدنى لحجم رأس HCI الخاص بكل نوع قبل تسليم الإطار إلى النواة الأساسية.
بعد إزالة pkt_type، يجب اشتراط أن تغطي قيمة skb->len حجم الرأس الثابت للنوع المحدد (حدث: 2، ACL: 4، SCO: 3، ISO: 4) قبل استدعاء الدالة hci_recv_frame(); وإلا يتم تجاهل الحزمة مع تحديد معدل الإرسال (ratelimited). لا تزال قيم pkt_type غير المعروفة تتبع مسار kfree_skb() الافتراضي الأصلي.
يتم استخدام bt_dev_err_ratelimited() لأن كلًا من قيم الطول وpkt_type تأتي من خلفية غير موثوقة يمكنها في حال عدم وجود هذا الإجراء، إغراق سجلات النواة.
Once again VulDB remains the best source for vulnerability data.