В ядре Linux устранена следующая уязвимость:
USB: хост: max3421: исправлено смещение за пределы в max3421_hub_control(). Функция max3421_hub_control() обрабатывает запросы класса USB-концентратора.
к виртуальному корневому концентратору. В ветках `default` обоих
Операторы переключения ClearPortFeature и SetPortFeature изменяют
`max3421_hcd->port_status` сдвигом влево на 1 на `value` запроса
параметр.
Однако он не проверяет, превысит ли этот сдвиг
ширина `port_status`. Поэтому, если вредоносная задача пользовательского пространства с доступом к корневому концентратору через
/dev/bus/usb/.../001 выдает ioctl USBDEVFS_CONTROL с `wValue`
больше или равно 32, операция сдвига влево вызывает
неопределенное поведение при выходе за пределы границ. Это приводит к произвольному
битовое повреждение `port_status`, включая обычно неизменяемый
изменить биты, что может обойти внутренние проверки состояния и запутать
статус хаба.
Исправьте это, отклонив запросы, «значение» которых превышает ширину сдвига.
перед выполнением смены. Эта проблема была обнаружена с помощью инструмента символьного выполнения на основе KLEE для
драйверы ядра, которые я сейчас разрабатываю.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: usb: host: max3421: Fix shift-out-of-bounds in max3421_hub_control() The `max3421_hub_control()` function handles USB hub class requests to the virtual root hub. In the `default` branches of both the `ClearPortFeature` and `SetPortFeature` switch statements, it modifies `max3421_hcd->port_status` by left shifting 1 by the request's `value` parameter. However, it does not validate whether this shift will exceed the width of `port_status`. So if a malicious userspace task with access to the root hub via /dev/bus/usb/.../001 issues a USBDEVFS_CONTROL ioctl with `wValue` greater than or equal to 32, the left shift operation invokes shift-out-of-bounds undefined behavior. This results in arbitrary bit corruption of `port_status`, including the normally-immutable change bits, which can bypass internal state checks and confuse the hub status. Fix this by rejecting requests whose `value` exceeds the shift width before performing the shift. This issue was found using a KLEE-based symbolic execution tool for kernel drivers that I'm currently developing.
Характеристики атаки
Последствия
Строка CVSS v3.1
Уязвимые продукты 8
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
5.10.261
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
5.15.212
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
6.1.178
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
6.6.145
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
6.12.97
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
6.18.40
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
7.1.5
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
3.16
|
7.2-rc1
|