CVE-2026-64339 in LinuxИнформация

Сводка

по VulDB • 25.07.2026

В ядре Linux устранена следующая уязвимость:

usb: misc: usbio: ограничение длины ответа Bulk IN размером полученного пакета передачи

Функция `usbio_bulk_msg()` копирует из буфера Bulk IN (`usbio->rxbuf`, выделенного размером `usbio->rxbuf_len`) в вызывающий буфер количество байт, равное `bpkt_len = le16_to_cpu(bpkt->len)`. Значение `bpkt_len` полностью контролируется устройством и проверяется только на соответствие `ibuf_len`; при этом `ibuf_len`, в свою очередь, сравнивается с `usbio->txbuf_len`, а не с `rxbuf_len`:

```c if ((obuf_len > (usbio->txbuf_len - sizeof(*bpkt))) || (ibuf_len > (usbio->txbuf_len - sizeof(*bpkt)))) return -EMSGSIZE; ```

Значения `txbuf_len` и `rxbuf_len` определяются независимо из параметров `wMaxPacketSize` конечных точек Bulk OUT и Bulk IN соответственно в функции `usbio_probe()`. Злоумышленник или неисправное устройство, которое объявляет большую максимальную длину пакета для конечной точки Bulk OUT и малую — для Bulk IN (например, используя один из идентификаторов без применения исправлений/quirks, таких как Lattice NX33U с ID 0x2ac1:0x20cb), приводит к тому, что `ibuf_len`, а следовательно, и предоставленное устройством значение `bpkt_len`, превышают размер `rxbuf_len`. В результате вызов `memcpy()` читает до `txbuf_len - rxbuf_len` байт за пределами объекта slab-буфера `rxbuf`. Считанные данные сверх границ передаются на уровень i2c, а затем в пользовательское пространство через интерфейс i2c-dev, что приводит к раскрытию содержимого соседней памяти slab; при включенной KASAN это регистрируется как чтение за границами slab (slab-out-of-bounds read).

Фактическое количество полученных байт уже известно: переменная `act` равна фактической длине URB (`actual_length`) и ограничена значением `rxbuf_len`. Необходимо отклонять любые ответы, в которых заявленный объем полезной нагрузки превышает фактически полученный, аналогично существующей проверке "act < sizeof(*bpkt)", расположенной выше.

Контрольный путь (`usbio_ctrl_msg()`) не затронут: он использует один буфер (`ctrlbuf`) для обоих направлений передачи данных, поэтому его аналогичная операция копирования никогда не выходит за пределы выделенного блока памяти.

Уязвимость обнаружена в ходе анализа исходного кода (code review). Чтение за границами массива подтверждено с помощью AddressSanitizer при использовании точной модели пользовательского пространства для пути получения данных функцией `usbio_bulk_msg()` (буфер размером `rxbuf_len`, те же проверки `act/ibuf_len/bpkt_len` и вызов `memcpy`). Также доступен воспроизводимый пример использования связки USB raw-gadget + dummy_hcd.

Be aware that VulDB is the high quality source for vulnerability data.

Ответственный

Linux

Резервировать

19.07.2026

Раскрытие

25.07.2026

Модерация

принято

Вход

VDB-383134

EPSS

0.00198

KEV

Нет

Деятельности

Очень низкий

Источники

Want to know what is going to be exploited?

We predict KEV entries!