Ad

CVE-2026-80971

HIGH CVSS 3.1: 7,8 EPSS 0.16%
Обновлено 14 сентября 2026
Linux
Параметр Значение
CVSS 7,8 (HIGH)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: ALSA: bcd2000: очистить указатели URB при отключении bcd2000_free_usb_related_resources() освобождает оба URB и оставляет указатели позади: usb_kill_urb (bcd2k->midi_out_urb); usb_kill_urb (bcd2k->midi_in_urb); usb_free_urb (bcd2k->midi_out_urb); usb_free_urb (bcd2k->midi_in_urb); Устройство rawmidi переживет этот вызов. Подпоток, который все еще открыт когда устройство отключено, достигает bcd2000_midi_send() из триггерный путь при закрытии. Эта функция записывает в освобожденный URB, а затем передает его ядру USB: bcd2k->midi_out_urb->transfer_buffer_length = BUFSIZE; ... ret = usb_submit_urb (bcd2k->midi_out_urb, GFP_ATOMIC); usb_kill_urb() также не останавливает последующую отправку, поэтому отправка, В гонках дисконнект может повторно поставить URB в очередь после того, как он был получен.

MIDI_in_urb предоставляется таким же образом: bcd2000_input_complete() повторно отправляет данные. это из обработчика завершения. КАСАН на 7.2.0-rc5 (arm64): ОШИБКА: KASAN: slab-use-after-free в bcd2000_midi_send [snd_bcd2000] Запись размера 4 по адресу ffff00001827d388 с помощью задачи bpoc/168. __asan_store4 bcd2000_midi_send [snd_bcd2000] bcd2000_midi_output_trigger [snd_bcd2000] snd_rawmidi_kernel_write1 close_substream.part.0 Освобожден заданием 168: usb_free_urb bcd2000_disconnect [snd_bcd2000] ОШИБКА: KASAN: slab-use-after-free в usb_submit_urb Чтение размера 8 по адресу ffff00001827d3b8 с помощью задачи bpoc/168. Очистите оба указателя после освобождения и проверьте их на путях, которые могут еще беги.

Отравить URB перед их освобождением: usb_poison_urb() ждет для работающего обработчика завершения и отклоняет любую последующую отправку, поэтому после того, как он возвращается, путь ввода стабилизируется, и только триггер rawmidi путь все еще может достигать bcd2000_midi_send(). Никакого отравления не требуется; тот URB освобождаются на следующей строке. Обнаружено XBOW, проверено Баулом Ли <baul.lee@xbow.com>

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: ALSA: bcd2000: clear the URB pointers on disconnect bcd2000_free_usb_related_resources() frees both URBs and leaves the pointers behind: usb_kill_urb(bcd2k->midi_out_urb); usb_kill_urb(bcd2k->midi_in_urb); usb_free_urb(bcd2k->midi_out_urb); usb_free_urb(bcd2k->midi_in_urb); The rawmidi device outlives that call. A substream that is still open when the device is unplugged reaches bcd2000_midi_send() from the trigger path on close. That function writes to the freed URB and then hands it to the USB core: bcd2k->midi_out_urb->transfer_buffer_length = BUFSIZE; ... ret = usb_submit_urb(bcd2k->midi_out_urb, GFP_ATOMIC); usb_kill_urb() does not stop a later submission either, so a submit that races the disconnect can requeue the URB after it has been reaped. midi_in_urb is exposed the same way: bcd2000_input_complete() resubmits it from the completion handler. KASAN on 7.2.0-rc5 (arm64): BUG: KASAN: slab-use-after-free in bcd2000_midi_send [snd_bcd2000] Write of size 4 at addr ffff00001827d388 by task bpoc/168 __asan_store4 bcd2000_midi_send [snd_bcd2000] bcd2000_midi_output_trigger [snd_bcd2000] snd_rawmidi_kernel_write1 close_substream.part.0 Freed by task 168: usb_free_urb bcd2000_disconnect [snd_bcd2000] BUG: KASAN: slab-use-after-free in usb_submit_urb Read of size 8 at addr ffff00001827d3b8 by task bpoc/168 Clear both pointers after freeing and test them on the paths that can still run. Poison the URBs before freeing them: usb_poison_urb() waits for a running completion handler and rejects any later submission, so after it returns the input path is quiesced and only the rawmidi trigger path can still reach bcd2000_midi_send(). No unpoison is needed; the URBs are freed on the next line. Discovered by XBOW, triaged by Baul Lee <baul.lee@xbow.com>

Характеристики атаки

Способ атаки
Локальный
Нужен локальный доступ
Сложность
Низкая
Легко эксплуатировать
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1