Saltar al contenido
DUPIN
ALERTAS · EN VIVO
Contacto

VULNERABILIDADDetectada 09 NOV · 20:27

CVE-2026-90587 Desreferencia de puntero NULL en el stack USB host de Zephyr con dispositivos de cero configuraciones

usbh_device_init() rechaza un dispositivo cuyo descriptor indica bNumConfigurations == 0, pero solo registra el error y salta a la limpieza sin fijar el código de retorno, que sigue en 0. La función devuelve éxito sin haber llamado a usbh_device_set_configuration(), único lugar donde se asigna udev-cfg_desc, que queda NULL. usbh_device_connect() interpreta el retorno como enumeración exitosa y usbh_class_probe_device() recorre descriptores desde udev-cfg_desc, por lo que usbh_desc_get_next_function() pasa el…

4.6MEDIA

CVSS 3.1

  • Probabilidad de explotaciónSin dato
  • Explotada activamenteNo confirmada
  • Exploit públicoNo conocido

Afectados

  • zephyrproject zephyr

    desde 4.4.0 hasta antes de 4.5.0

Qué hacer

  1. Verificá si usás zephyr y en qué versión.
  2. Actualizá a la versión corregida que indique el fabricante en su aviso o aplicá su mitigación.
  3. Revisá registros y accesos de los sistemas expuestos para descartar un uso previo.

Calculadora CVSS

CVSS 3.1 · 4.6 MEDIA

CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

  • Vector de ataqueFísico
  • Complejidad del ataqueBaja
  • Privilegios requeridosNinguno
  • Interacción del usuarioNinguna
  • AlcanceSin cambio
  • ConfidencialidadNinguna
  • IntegridadNinguna
  • DisponibilidadAlta

Descripción original

usbh_device_init() in subsys/usb/host/usbh_device.c rejects a device whose device descriptor advertises bNumConfigurations == 0, but it only logs the error and jumps to the cleanup label without setting the return code. At that point the local err is still 0 from the preceding successful descriptor read, so the function returns success while having skipped usbh_device_set_configuration() — the only place udev->cfg_desc is allocated. The device structure is zero-initialised by usbh_device_alloc(), so udev->cfg_desc remains NULL. usbh_device_connect() treats the zero return as a successful enumeration and calls usbh_class_probe_device(), which starts its descriptor walk from udev->cfg_desc. usbh_desc_get_next_function() passes that NULL pointer to usbh_desc_is_valid(), whose only guard compares the caller-supplied size, so head->bLength is read through a NULL pointer. The condition is triggered entirely by the attached peripheral: attaching a USB device (or any USB gadget emulating one) that reports bNumConfigurations = 0 reaches the defect directly from the UHC_EVT_DEV_CONNECTED_FS/_HS event handler in subsys/usb/host/usbh_core.c, with no authentication and no user interaction beyond the physical attachment. On targets where page zero is unmapped or CONFIG_NULL_POINTER_EXCEPTION_DETECTION is enabled this raises a fatal exception in the USB host thread, denying service to the host. Where address zero is readable, the descriptor walker instead parses low memory as a descriptor chain and can dispatch a class probe() with attacker-influenced values, causing further out-of-bounds reads through the still-NULL udev->cfg_desc in usbh_desc_get_iface(). No attacker-controlled write was identified, so the impact is availability plus a bounded out-of-bounds read. Note that CONFIG_USB_HOST_STACK is marked experimental.

Referencias (2)

Resumen traducido automáticamente de la descripción original. Fuente: Nureq Monitor. Cómo funciona.

DUPIN · CONTACTO

Contanos tu caso

El mensaje ya va armado: podés cambiarlo.

También podés escribir a [email protected]. Usamos tus datos solo para responderte.