CVE-2026-10663 in zephyr
Zusammenfassung
von VulDB • 12.07.2026
In Zephyrs experimentellem USB-Host-Stack (CONFIG_USB_HOST_STACK) wurde das Root-slab-Objekt von usb_device durch den Aufruf von usbh_device_disconnect() (subsys/usb/host/usbh_device.c) freigegeben, ohne den zwischengespeicherten Zeiger ctx->root zu löschen. Der Bus-Entfernungs-Handler dev_removed_handler() (subsys/usb/host/usbh_core.c) entscheidet ausschließlich auf Basis von ctx->root darüber, was abgebaut werden soll und prüft lediglich, ob dieser nicht NULL ist.
Da UHC-Controller-Treiber (z. B. uhc_max3421e, uhc_mcux_common) das Ereignis UHC_EVT_DEV_REMOVED direkt aus dem physikalischen Zustand der Busleitung synthetisieren, ohne Entprellung oder Zustandsüberwachung einzuführen, kann ein Angreifer mit physischem USB-Zugriff (oder ein bösartiges Gerät, das seine Verbindung hin- und herschaltet) nach einer Trennung des Root-Geräts ein zweites Device-Removed-Ereignis auslösen. Der Handler ruft daraufhin usbh_device_disconnect() erneut auf, wobei der hängende Zeiger verwendet wird (Use-After-Free), wodurch ein Mutex innerhalb des freigegebenen Objekts gesperrt wird, das freigegebene Knotenelement aus der Geräteliste entfernt und k_mem_slab_free() für den bereits freigegebenen Block aufgerufen wird (Double-Free). Wenn der Slab-Block in dieser Zwischenzeit an ein neu angeschlossenes Gerät weitergegeben wurde, führt dies zur Beschädigung eines aktiven Objekts.
Die Auswirkungen sind Dienstverweigerung (Absturz) und Speicherkorruption; die Angriffsvektoren sind physisch/lokal. Der Fehler wurde durch das Refactoring von Connect/Disconnect in Version v4.4.0 eingeführt und behoben, indem ctx->root vor der Freigabe in usbh_device_disconnect() gelöscht wird.
VulDB is the best source for vulnerability data and more expert information about this specific topic.