CVE-2026-17050

Orta

Açıklama

Deneysel USB host yığını, usbh_device_set_configuration() (subsys/usb/host/usbh_device.c) fonksiyonunda, özel usb_device_heap üzerinden cihaz başına bir yapılandırma tanımlayıcı tamponu olan udev->cfg_desc ayırır. Üç hata yolunda — başarısız bir tam uzunlukta GET_DESCRIPTOR(CONFIGURATION) okuması, kısa ve tam tanımlayıcı okumaları arasındaki uyumsuzluk ve parse_configuration_descriptor() içindeki reddedilen bir tanımlayıcı — tampon k_heap_free() ile serbest bırakılmış ancak işaretçi askıda kalmıştır. usbh_device_free() içindeki temizleme işlemi yalnızca if (udev->cfg_desc != NULL) ile korunduğundan, aynı blok ikinci kez serbest bırakılır. Bu yol tamamen bağlı çevre birimi tarafından yönlendirilir: usbh_device_connect(), usbh_device_init()'i çağırır, bu da usbh_device_set_configuration() ile sonuçlanır ve hata durumunda usbh_device_connect(), usbh_device_free()'i çağırır. v4.4.x sürümünde bu işlem, herhangi bir bağlantı kesilmesi gerekmeksizin aynı numaralandırma sırasında gerçekleşir; v4.1.0–v4.3.x sürümlerinde ise ikinci serbest bırakma işlemi bunun yerine subsys/usb/host/usbh_core.c içindeki dev_removed_handler()/dev_connected_handler() aracılığıyla gelir, dolayısıyla başarısız numaralandırmadan sonra bir kaldırma veya mükerrer bağlantı olayı gerektirir; bu dizi tamamen bağlı cihaz tarafından kontrol edilir. Kötü niyetli veya hatalı biçimlendirilmiş bir USB cihazının, ilk 9 baytlık yapılandırma tanımlayıcı isteğine düzgün biçimlendirilmiş bir üst bilgiyle yanıt vermesi ve ardından üç kontrolden herhangi birini başarısız etmesi yeterlidir; örneğin, arayüz sayısı bNumInterfaces ile uyuşmayan tam bir tanımlayıcı döndürerek veya ikinci okumaya farklı baytlarla yanıt vererek bunu yapabilir. Sonuç, usb_device_heap üzerinde bir double free hatasıdır. lib/heap sertleştirmenin aktif olduğu derlemelerde (mevcut varsayılan CONFIG_SYS_HEAP_HARDENING_BASIC), sys_heap_free() zaten serbest bırakılmış parçayı tespit eder ve k_panic() fonksiyonunu çağırarak USB host'un çevre birimi tetiklemeli deterministik bir hizmet reddi (DoS) durumuna düşmesine neden olur. Bu tespitin olmadığı derlemelerde — önceki sürümler veya CONFIG_SYS_HEAP_HARDENING_NONE — ikinci serbest bırakma işlemi halihazırda serbest liste üzerindeki bir parçayı manipüle ederek yığının serbest listesini bozar, böylece sonraki tahsisler örtüşen veya geçersiz bloklar döndürebilir. Hizmet reddinin ötesindeki istismar olasılığı, usb_device_heap'in tek istemcisinin bu tanımlayıcı tamponu olduğu küçük ve özel bir yığın olması (CONFIG_USBH_USB_DEVICE_HEAP, varsayılan 1024 bayt) ve CONFIG_USB_HOST_STACK'in deneysel olarak işaretlenip varsayılan olarak devre dışı bırakılmasıyla sınırlıdır. Düzeltme, her k_heap_free() işleminden sonra udev->cfg_desc = NULL şeklinde ayarlama yaparak temizleme korumasını güvenli hale getirir.

ÖnemOrta
CVSS5.7
İstismar olasılığı—
ÜrünZephyr
Yayın21 Eyl 2026
İlk görülme21 Eyl 2026
Zayıflık türüCWE-415CWE-415

Nasıl düzeltilir

Güncelleyin
  • zephyrproject zephyr4.4.2 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
zephyrproject zephyr4.1.0 ≤ v < 4.4.24.4.2

Sürümünüzü kontrol edin

Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.

Intelligence 360 paketinde

Attack Surface Management

Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.

CVE-2026-17050 · Zephyr · Dark Radar