CVE-2026-17050
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Eksperymentalny stos hostów USB przydziela bufor deskryptora konfiguracji dla każdego urządzenia, udev->cfg_desc, z dedykowanego usb_device_heap w usbh_device_set_configuration() (subsys/usb/host/usbh_device.c). W przypadku trzech ścieżek niepowodzeń — nieudanego odczytu pełnej długości GET_DESCRIPTOR(CONFIGURATION), niezgodności między odczytami krótkiego i pełnego deskryptora oraz odrzuconego deskryptora w parse_configuration_descriptor() — bufor został zwolniony za pomocą k_heap_free(), ale wskaźnik pozostał zwisający. Czyszczenie w usbh_device_free() jest chronione tylko przez if (udev->cfg_desc != NULL), więc zwalnia ten sam blok po raz drugi.
Ścieżka jest w całości sterowana przez podłączone urządzenie peryferyjne: ush_device_connect() wywołuje ush_device_init(), która kończy się na usbh_device_set_configuration(), a w przypadku niepowodzenia ush_device_connect() wywołuje usbh_device_free(). W wersji 4.4.x dzieje się to podczas tego samego wyliczenia, bez konieczności odłączania; w wersjach 4.1.0–4.3.x drugie wolne miejsce pojawia się za pośrednictwem dev_removed_handler()/dev_connected_handler() w subsys/usb/host/usbh_core.c, więc wymaga zdarzenia usunięcia lub zduplikowanego połączenia po nieudanym wyliczeniu — sekwencja w pełni kontrolowana przez podłączone urządzenie. Złośliwe lub źle sformatowane urządzenie USB musi jedynie odpowiedzieć na pierwsze 9-bajtowe żądanie deskryptora konfiguracji za pomocą prawidłowo sformułowanego nagłówka, a następnie nie przejść żadnej z trzech kontroli, na przykład zwracając pełny deskryptor, którego liczba interfejsów nie jest zgodna z bNumInterfaces, lub odpowiadając na drugi odczyt innymi bajtami.
Rezultatem jest podwójne wolne miejsce na usb_device_heap. W kompilacjach, w których aktywne jest wzmacnianie bibliotek/sterty (bieżące ustawienie domyślne CONFIG_SYS_HEAP_HARDENING_BASIC), sys_heap_free() wykrywa już wolną porcję i wywołuje k_panic(), dając deterministyczną, wyzwalaną przez urządzenia peryferyjne odmowę usługi hosta USB. W kompilacjach bez tego wykrywania — wcześniejszych wydaniach lub CONFIG_SYS_HEAP_HARDENING_NONE — drugi free manipuluje fragmentem znajdującym się już na liście wolnych, uszkadzając listę wolnych sterty, tak że późniejsze alokacje mogą zwracać nakładające się lub nieprawidłowe bloki.
Eksploatacja wykraczająca poza odmowę usługi jest ograniczona faktem, że usb_device_heap to mała dedykowana sterta (CONFIG_USBH_USB_DEVICE_HEAP, domyślnie 1024 bajty), której jedynym klientem jest ten bufor deskryptora, oraz CONFIG_USB_HOST_STACK oznaczony jako eksperymentalny i domyślnie wyłączony. Poprawka ustawia udev->cfg_desc = NULL po każdej k_heap_free(), powodując dźwięk strażnika czyszczenia.
>_ Słabości (CWE)
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org