В USB Gadget, подсистеме ядра Linux, предоставляющей программный интерфейс для создания клиентских USB-устройств и программной симуляции USB-устройств, выявлена уязвимость (CVE-2021-39685), которая может привести к утечке информации из ядра, краху или выполнению произвольного кода на уровне ядра. Атака производится непривилегированным локальным пользователем через манипуляции с различными классами устройств, реализованными на базе API USB Gadget, такими, как rndis, hid, uac1, uac1_legacy и uac2.
Проблема устранена в опубликованных на днях обновлениях ядра Linux 5.15.8, 5.10.85, 5.4.165, 4.19.221, 4.14.258, 4.9.293 и 4.4.295. В дистрибутивах проблема пока остаётся неисправленной (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch). Для демонстрации уязвимости подготовлен прототип эксплоита.
Проблема вызвана переполнением буфера в обработчиках запросов на передачу данных в gadget-драйверах rndis, hid, uac1, uac1_legacy и uac2. В результате эксплуатации уязвимости непривилегированный атакующий может получить доступ к памяти ядра через отправку специального управляющего запроса со значением поля wLength, превышающим размер статического буфера, для которого всегда выделяется 4096 байт (USB_COMP_EP0_BUFSIZ). В ходе атаки можно из непривилегированного процесса в пространстве пользователя прочитать или записать до 65 КБ данных в память ядра.