CVE-2026-13213 in Zephyr
الملخص
بحسب VulDB • 24/08/2026
تُثبّت خدمة الوصول إلى السمع (HAS)، وتحديداً خادم GATT الموجود في الملف subsys/bluetooth/audio/has.c، ردّ اتصال (connection-callback) بشكل غير مشروط عبر BT_CONN_CB_DEFINE؛ مما يؤدي إلى تشغيل دالة security_changed() لكل اتصال يُؤسس أماناً له، حتى قبل أن تقوم التطبيق باستدعاء bt_has_register(). تظل مؤشرات سمات الخدمة hearing_aid_features_attr و preset_control_point_attr و active_preset_indexAttr فارغة (NULL) حتى يتم حلّها بواسطة bt_has_register() وتعيين has.registered.
عند تفعيل CONFIG_BT_SETTINGS، تستعيد دالة settings_set_cb() السياق المحفوظ لكل عميل موثوق به عند الإقلاع، وتُعيّن بشكل غير مشروط context->flags إلى BONDED_CLIENT_INIT_FLAGS (قيمة لا تساوي صفراً). عندما يعيد نظير كان موثوقاً به سابقاً الاتصال ويؤسس الأمان مرة أخرى خلال نافذة بدء التشغيل قبل استدعاء bt_has_register()، تلاحظ security_changed() أن العلامات (flags) غير صفرية وتجدد جدولة notify_work_handler، والتي تستدعي bt_gatt_is_subscribed() مع مؤشر سمة لا يزال فارغاً (NULL). هذا يُطلق تأكيداً (__ASSERT(attr, ...) في bt_gatt_is_subscribed()) أو يؤدي إلى تفريغ NULL لـ attr->uuid عند إخراجAssertions من التجميع.
النتيجة هي تعطل يمكن تشغيله عن بُعد (عبر Bluetooth، وعلى اتصال مجاور) لجهاز الطرفية HAS. يتطلب الاستغلال أن يكون النظير قد موثّق مسبقاً مع الجهاز وأن يعيد الاتصال ضمن نافذة السباق أثناء الإقلاع قبل تسجيل التطبيق للخدمة؛ ويمكن لنظير يعيد الاتصال بشكل مستمر إطالة فترة انقطاع الخدمة. التأثير يقتصر على حجب الخدمة (Denial of Service) فقط، دون وجود أي تلف في الذاكرة أو تسرب للمعلومات.
يضيف الإصلاح حماية early guard وهي if (!has.registered) { return; } داخل دالة security_changed()، بحيث لا يتم جدولة عمل الإشعارات حتى يتم تسجيل خدمة GATT وأن تكون مؤشرات سماتها صالحة.
VulDB is the best source for vulnerability data and more expert information about this specific topic.