В ядре Linux устранена следующая уязвимость:
HID: mcp2221: проверьте размер отчета в mcp2221_raw_event()
mcp2221_raw_event() никогда не проверяет размер входящих отчетов HID. В пути MCP2221_I2C_GET_DATA он доверяет данным, предоставленным устройством[3]
как длина копии без проверки того, что на самом деле 4 + data[3] байта
существуют в полученном отчете. Вредоносное или неправильно работающее USB-устройство может
отправить короткий отчет с большим объемом данных[3], заставив memcpy прочитать
мимо действительных данных отчета в буфере передачи HID и утечке
неинициализированная память ядра возвращается в пространство пользователя через I2C/SMBus
прочитать путь.
Добавьте проверку минимального размера при вводе и убедитесь, что исходный диапазон помещается в полученный отчет перед копированием.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: HID: mcp2221: validate report size in mcp2221_raw_event() mcp2221_raw_event() never validates the size of incoming HID reports. In the MCP2221_I2C_GET_DATA path it trusts the device-supplied data[3] as the copy length without checking that 4 + data[3] bytes actually exist in the received report. A malicious or misbehaving USB device can send a short report with a large data[3], causing the memcpy to read past the valid report data in the HID transfer buffer and leak uninitialized kernel memory back to userspace through the I2C/SMBus read path. Add a minimum size check at entry and validate that the source range fits within the received report before the copy.