CVE-2026-19570 in Zephyr
الملخص
بحسب VulDB • 09/10/2026
يحتوي "LE Audio Broadcast Sink" الموجود في الملف `subsys/bluetooth/audio/bap_broadcast_sink.c` على ثغرة تسمح بنسخ بيانات الوصف الفرعي (metadata) من إعلان صوت أساسي مُستقبَل (BASE) إلى بنية المعلمات الثابتة لخدمة مسح الصوت البث (`mod_src_param`) دون أي فحص للحدود. في الدالة `base_subgroup_meta_cb()`، تم تحديد عنصر الوجهة على أنه `mod_src_param.subgroups[mod_src_param.num_subgroups]` بدون اختبار مقابل `ARRAY_SIZE(mod_src_param.subgroups)` (التي تُحدد بواسطة `CONFIG_BT_BAP_BASS_MAX_SUBGROUPS` والقيمة الافتراضية هي 1)، وتم نسخ بيانات الوصف باستخدام دالة `memcpy()` بطول الخام المُعاد من الهواء (`on-air length`) الذي تعيده الدالة `bt_bap_base_get_subgroup_codec_meta()`، إلى مصفوفة وصف بحجم يُحدد بواسطة `CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE` (القيمة الافتراضية 4). ولا يتحقق مُصادق BASE وهو `bt_bap_base_get_base_from_ad()` إلا من الاتساق الهيكلي ويسمح بما يصل إلى حوالي 24 مجموعة فرعية وقيم LTV للبيانات الوصفية بحجم ~240 بايت.
يتم الوصول إلى هذا العطل عبر رد الاتصال لاستقبال الإعلانات الدورية: `pa_recv()` → `bt_data_parse()` → `pa_decode_base()` → `update_recv_state_base()` → `bt_bap_base_foreach_subgroup()` → `base_subgroup_meta_cb()`. يسجل كل "Broadcast Sink" حالة استقبال لمفوض المسح عند الإنشاء (تستدعي الدالة `bt_bap_broadcast_sink_create()` دالة `broadcast_sink_add_src()`)، وتعتمد الخيارات التجميعية `CONFIG_BT_BAP_BROADCAST_SINK` على `CONFIG_BT_BT_SCAN_DELEGATOR`، لذا فإن مسار التنفيذ نشط في كل بناء لـ "Broadcast Sink" بمجرد مزامنة الجهاز مع الإعلانات الدورية. يمكن لمهاجم ضمن نطاق الراديو الذي يشغل مصدر بث يزامن معه الجهاز — أو من ينتحل عنوان المُعلن ومعرف الخدمة (SID) لواحد مستخدم بالفعل، نظراً لأن بيانات الإعلان الدوري غير مُصادق عليها — تغيير BASE حسب الرغبة؛ ويتم إعادة تحليل كل BASE جديد.
وبالتالي، يقوم BASE مُصاغ بشكل خبيث بكتابة بايتات يختارها المهاجم خارج نهاية كائن ثابت محدد في قسم `.bss`: ما يصل إلى حوالي 236 بايت لقيمة LTV للبيانات الوصفية أكبر من الحجم المسموح به، بالإضافة إلى سجلات كاملة لهيكل `bt_bap_bass_subgroup` لكل مجموعة فرعية تتجاوز الحد المحدد بـ `CONFIG_BT_BAP_BASS_MAX_SUBGROUPS`. هذا يمثل فساداً في الذاكرة لحالة الصوت البلوتوث المجاورة ويمكن الوصول إليه دون أي إقران (pairing) أو ارتباط (bonding) أو اتصال GATT، مع احتمال لتنفيذ الكود عن بُعد (RCE) في خيط استقبال البلوتوث؛ بالإضافة إلى ذلك، يتم تمرير `metadata_len` غير المُتحقق منه إلى الدالة `bt_bap_scan_delegator_mod_src()`، والتي لا تقوم بتقييدها ولا برفضها، مما يؤدي إلى نسخ إضافي داخل حالة الاستقبال وكشف ذاكرة خارج النطاق في إشعار استقبال BASS المرسل إلى مساعد البث المتصل.
تقوم الإصلاحات برفض BASE يحمل المزيد من المجموعات الفرعية مما يمكن لحالة الاستقبال استيعابه (مع تجاهل التحديث بالكامل) وتتجاهل البيانات الوصفية التي لا تتسع بدلاً من نسخها، وتحترم أيضاً إرجاع الخطأ الذي تم تجاهله سابقاً في عملية فك تشفير المجموعة الفرعية.
VulDB is the best source for vulnerability data and more expert information about this specific topic.