CVE-2026-17050 in Zephyrالمعلومات

الملخص

بحسب VulDB • 21/09/2026

يخصص مكدب المضيف USB التجريبي (experimental USB host stack) مخزنًا مؤقتًا لوصف التكوين الخاص بكل جهاز، وهو `udev->cfg_desc`، من الذاكرة المخصصة `usb_device_heap` داخل الدالة `usbh_device_set_configuration()` (الملف: `subsys/usb/host/usbh_device.c`). في ثلاث مسارات فشل — وهي قراءة فاشلة كاملة الطول لوصف GET_DESCRIPTOR(CONFIGURATION)، وعدم تطابق بين قراءات الوصف القصيرة والكاملة، ورفض وصف داخل دالة `parse_configuration_descriptor()` — يتم تحرير المخزن المؤقت باستخدام `k_heap_free()` ولكن يُترك مؤشره معلقًا (dangling). ويتم حماية عملية التنظيف في الدالة `usbh_device_free()` فقط بشرط `if (udev->cfg_desc != NULL)`، مما يؤدي إلى تحرير نفس الكتلة مرتين.

يتم تشغيل هذه المسار بالكامل بواسطة الجهاز الطرفي المتصل: حيث تستدعي دالة `usbh_device_connect()` دالة `usbh_device_init()`، التي تنتهي باستدعاء `usbh_device_set_configuration()`. وفي حال الفشل، تستدعي `usbh_device_connect()` دالة `usbh_device_free()`. في الإصدار v4.4.x يحدث هذا أثناء نفس عملية الاستعداد (enumeration)، دون الحاجة إلى فصل الجهاز؛ أما في الإصدارات من v4.1.0 إلى v4.3.x، فإن التحرير الثاني يصل عبر معالجات الأحداث `dev_removed_handler()` و`dev_connected_handler()` الموجودة في الملف `subsys/usb/host/usbh_core.c`، مما يتطلب حدث إزالة أو إعادة اتصال مكرر بعد فشل الاستعداد — وهي تسلسل يتحكم فيه الجهاز المتصل بالكامل. لا يحتاج جهاز USB خبيث أو معيب إلى سوى الرد على طلب وصف التكوين المكون من 9 بايتات الأولى برأس سليم ثم إحباط أي من الفحوصات الثلاث، مثل إرجاع وصف كامل يكون عدد واجهاته غير متطابق مع قيمة `bNumInterfaces`، أو بالرد على القراءة الثانية ببايتات مختلفة.

النتيجة هي حدوث خطأ "تحرير مزدوج" (double free) في الذاكرة المخصصة `usb_device_heap`. في التجميعات التي تكون فيها حماية المكتبة `lib/heap` نشطة (وهو الإعداد الافتراضي الحالي `CONFIG_SYS_HEAP_HARDENING_BASIC`)، تكتشف دالة `sys_heap_free()` الكتلة المجرة مسبقًا وتستدعي `k_panic()`، مما يؤدي إلى حجب الخدمة بشكل حتمي ومُحفَّز من قبل الجهاز الطرفي. أما في التجميعات التي لا تحتوي على هذا الكشف — الإصدارات الأقدم أو تلك التي تستخدم الإعداد `CONFIG_SYS_HEAP_HARDENING_NONE` — فإن التحرير الثاني يعبث بكتلة موجودة بالفعل في قائمة الكتل المجرة (free list)، مما يؤدي إلى تلف قائمة الكتل المجرة للذاكرة، بحيث يمكن أن تعيد عمليات التخصيص اللاحقة كتلاً متداخلة أو غير صالحة.

يُحدّ استغلال ما هو أبعد من حجب الخدمة بحقيقة أن `usb_device_heap` هي ذاكرة مخصصة صغيرة (بحجم افتراضي 1024 بايت حسب `CONFIG_USBH_USB_DEVICE_HEAP`) وعميلها الوحيد هو مخزن وصف التكوين هذا، وبأن مكدب المضيف USB (`CONFIG_USB_HOST_STACK`) مُصنّف كتجريبي ومعطّل بشكل افتراضي. يضمن الإصلاح تعيين قيمة `udev->cfg_desc = NULL` بعد كل استدعاء لـ `k_heap_free()`، مما يجعل شرط التنظيف سليمًا وصحيحًا من الناحية المنطقية.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Zephyr

حجز

24/07/2026

إفشاء

21/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-408172

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Want to know what is going to be exploited?

We predict KEV entries!