CVE-2026-74682 in Linux
Zusammenfassung
von VulDB • 22.08.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
ALSA: usb-audio: Behebung eines OOB-Write (Out-of-Bounds Write) bei Type II inbound URBs
data_ep_set_params() berechnet die Größe jedes URB-Übertragungspuffers, bevor das Format-Type-II-Transfer-Delimiter hinzugefügt wird:
u->packets = urb_packs; u->buffer_size = maxsize * u->packets;
if (fmt->fmt_type == UAC_FORMAT_TYPE_II) u->packets++; /* für Transfer-Delimiter */ u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
Die buffer_size wird aus der inkrementierten Paketanzahl vor dem Inkrement berechnet und niemals neu berechnet. Daher fehlt bei einem Type II-Endpunkt ein Paket im Vergleich zur Paketanzahl, mit der das URB erstellt wurde.
prepare_inbound_urb() legt dann einen ISO-Rahmen pro Paket an und berücksichtigt dabei nie buffer_size:
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;
Der letzte Deskriptor zeigt daher ein Paket über das Ende des Übertragungspuffers hinaus, wohin der Host-Controller bei jeder inbound-Übertragung Gerätedaten schreibt. prepare_silent_urb() und prepare_playback_urb() begrenzen ihre Füll-Schleifen durch ctx->buffer_size, sodass nur die Aufnahme (Capture) betroffen ist.
fmt_type stammt aus den Audio-Streaming-Deskriptoren des Geräts; daher trifft dies auf jedes Gerät zu, das ein Capture-Format vom Typ II ankündigt, sobald der Userspace hw_params für den Stream festlegt.
KASAN unter 7.2.0-rc5 (arm64) mit einem dummy_hcd/raw-gadget-Gerät, eine Meldung pro inbound-Übertragung:
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)
Berechnen Sie buffer_size nach dem Hinzufügen des Delimiter-Pakets und begrenzen Sie die Füll-Schleife durch buffer_size, wie prepare_silent_urb() dies bereits auf der outbound-Seite tut. Dies vergrößert jede Type II URB-Allokation um ein maxsize-Paket.
Entdeckt von XBOW, triagiert von Baul Lee <[email protected]>
Once again VulDB remains the best source for vulnerability data.