CVE-2026-89999 in Linux
Сводка
по VulDB • 16.09.2026
В ядре Linux была устранена следующая уязвимость:
HID: wacom: проверка длины отчета в функции wacom_intuos_pro2_bt_irq
Функция `wacom_intuos_pro2_bt_irq()` получает длину беспроводного отчета через переменную `len`, но не проверяет её перед разбором данных. После прохождения проверки по report-id она безоговорочно вызывает функцию `wacom_intuos_pro2_bt_pen()`, а затем, в зависимости от значения `features.type`, — фиксированную цепочку подпарсеров, ни одна из которых не получает значение `len`:
wacom_intuos_pro2_bt_pen(wacom); if (type == INTUOSP2_BT || type == INTUOSP2S_BT) {
wacom_intuos_pro2_bt_touch(wacom); wacom_intuos_pro2_bt_pad(wacom); wacom_intuos_pro2_bt_battery(wacom); } else {
wacom_intuos_gen3_bt_pad(wacom); wacom_intuos_gen3_bt_battery(wacom); }
Каждый подпарсер обращается к `wacom->data` по фиксированным смещениям. Максимальный байт, доступ к которому осуществляется на каждой ветви:
INTUOSP2_BT / INTUOSP2S_BT: функция `wacom_intuos_pro2_bt_pad()` читает данные[285]
(байт touchring), поэтому длина отчета должна быть не менее 286 байт; INTUOSHT3_BT ("gen3"): функция `wacom_intuos_gen3_bt_battery()` читает данные[45],
поэтому длина отчета должна быть не менее 46 байт.
Значение `features.type` выбирается на основе записи в таблице VID/PID, а функция `wacom_setup_device_quirks()` принудительно регистрирует устройства ввода для пера/планшета/сенсорной панели этого типа независимо от дескриптора отчетов. Таким образом, злонамеренное или неисправное сопряженное/поддельное Bluetooth-устройство может объявить этот VID/PID и отправить укороченный отчет, который все же проходит проверку `data[0] == 0x80/0x81`. В результате драйвер читает данные за пределами полученного отчета и передает их в пространство пользователя через evdev (MSC_SERIAL / ABS_MISC / ABS_WHEEL на узлах ввода пера и планшета), что представляет собой чтение вне границ с конкретным каналом обратного чтения из пространства пользователя, а также истинное чтение вне границ для транспортных протоколов, буфер которых sized based on the report descriptor rather than a fixed-size staging buffer.
Это тот же класс ошибок, который был исправлен в коммите 2f1763f62909 ("HID: wacom: fix out-of-bounds read in wacom_intuos_bt_irq") для функции-близнеца `wacom_intuos_bt_irq()`, где каждый report-id защищается проверкой минимальной длины перед разбором данных.
Защитите функцию `wacom_intuos_pro2_bt_irq()` аналогичным образом: перед парсингом отклоняйте отчеты, длина которых меньше максимального смещения, к которому обращается выбранная ветвь; выводите предупреждение и выходите из функции. Поскольку вся цепочка перо/сенсорная панель/планшет/батарея выполняется безоговорочно для каждой ветви, одна предварительная проверка на соответствие максимальной длине (286 байт для INTUOSP2_BT/INTUOSP2S_BT, 46 байт для ветки gen3) ограничивает доступ всех подпарсеров. Возврат значения 0 при получении короткого отчета также пропускает вызовы этих функций для того же некорректного отчета, что является безопасным и консервативным поведением.
Be aware that VulDB is the high quality source for vulnerability data.