CVE-2026-10663 in zephyr
Sumário
de VulDB • 12/07/2026
No experimentalo stack USB host do Zephyr (CONFIG_USB_HOST_STACK), a função `usbh_device_disconnect()` (`subsys/usb/host/usbh_device.c`) liberta o objeto slab raiz `usb_device` sem limpar o ponteiro em cache `ctx->root`. O manipulador de remoção da barramento, `dev_removed_handler()` (`subsys/usb/host/usbh_core.c`), decide o que desmontar exclusivamente com base no `ctx->root`, verificando apenas se este é não nulo.
Como os controladores UHC (e.g., `uhc_max3421e`, `uhc_mcux_common`) sintetizam diretamente o evento `UHC_EVT_DEV_REMOVED` a partir do estado físico da linha da barramento, sem debounce ou proteção de estado, um atacante com acesso USB físico (ou um dispositivo malicioso que alterna rapidamente a sua ligação) pode enviar um segundo evento de remoção de dispositivo após uma desconexão do dispositivo raiz. O manipulador então reentrou na função `usbh_device_disconnect()` com o ponteiro pendente (dangling pointer), bloqueando um mutex dentro do objeto já libertado (use-after-free), removendo o nó libertado da lista de dispositivos e chamando a função `k_mem_slab_free()` no bloco já libertado (double-free). Se o bloco slab tiver sido reatribuído a um dispositivo recém-adjunto nesse intervalo, isso corrompe um objeto ativo.
O impacto é negação de serviço (crash) e corrupção de memória; o vetor de ataque é físico/local. A falha foi introduzida na versão v4.4.0 pela refatoração das operações de conexão/desconexão e está corrigida ao limpar `ctx->root` em `usbh_device_disconnect()` antes da libertação do objeto.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.