CVE-2026-74682 in Linux
Resumen
por VulDB • 2026-08-23
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ALSA: usb-audio: corrección de una escritura fuera de límites (OOB) en URB entrantes de Tipo II
`data_ep_set_params()` calcula el tamaño del búfer de transferencia de cada URB antes de añadir el delimitador de transferencia Format Type II:
```c u->packets = urb_packs; u->buffer_size = maxsize * u->packets;
if (fmt->fmt_type == UAC_FORMAT_TYPE_II) u->packets++; /* para el delimitador de transferencia */ u->urb = usb_alloc_urb(u->packets, GFP_KERNEL); ```
`buffer_size` se calcula a partir del conteo de paquetes previo al incremento y nunca se vuelve a calcular; por lo tanto, en un endpoint de Tipo II, el búfer tiene un paquete menos que la cantidad de paquetes con la que se construye el URB.
A continuación, `prepare_inbound_urb()` distribuye un marco ISO (iso frame) por cada paquete sin consultar jamás `buffer_size`:
```c offs = 0; for (i = 0; i < urb_ctx->packets; i++) {
urb->iso_frame_desc[i].offset = offs;
urb->iso_frame_desc[i].length = ep->curpacksize;
offs += ep->curpacksize; }
urb->transfer_buffer_length = offs; urb->number_of_packets = urb_ctx->packets; ```
Por lo tanto, el último descriptor apunta un paquete más allá del final del búfer de transferencia, donde el controlador host escribe los datos del dispositivo en cada transferencia entrante. `prepare_silent_urb()` y `prepare_playback_urb()` limitan sus bucles de llenado mediante `ctx->buffer_size`, por lo que solo la captura se ve afectada.
`fmt_type` proviene de los descriptores de transmisión de audio del dispositivo, por lo que cualquier dispositivo que anuncie un formato de captura Tipo II sufrirá este problema cuando el espacio de usuario establezca `hw_params` en el flujo.
KASAN en 7.2.0-rc5 (arm64) con un dispositivo dummy_hcd/raw-gadget, un informe por cada transferencia entrante:
``` BUG: KASAN: slab-out-of-bounds in dummy_timer Write of size 64 at addr ffff0000186171c0 by task cons02/166 __asan_memcpy dummy_timer hrtimer_run_softirq Allocated by task 166: usb_alloc_coherent snd_usb_endpoint_set_params The buggy address is located 0 bytes to the right of allocated 64-byte region [ffff000018617180, ffff0000186171c0)
```
Calcule `buffer_size` después de haber contabilizado el paquete delimitador y limite el bucle de llenado mediante `buffer_size`, tal como ya hace `prepare_silent_urb()` en el lado saliente. Esto incrementa cada asignación de URB Tipo II en un paquete de tamaño máximo (`maxsize`).
Descubierto por XBOW, triage realizado por Baul Lee <[email protected]>
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.