В ядре Linux устранена следующая уязвимость:
ksmbd: проверьте размер составного запроса перед чтением StructureSize2. Когда ksmbd проверяет составной (связанный) запрос SMB2,
ksmbd_smb2_check_message() читает pdu->StructureSize2 без предварительного
проверка того, что составной элемент достаточно велик, чтобы вместить его.
StructureSize2 — это 2-байтовое поле со смещением 64.
(__SMB2_HEADER_STRUCTURE_SIZE) от начала каждого элемента. Логика составного обхода гарантирует только то, что полный 64-байтовый SMB2
заголовок присутствует для завершающего элемента: когда NextCommand равен 0, len
уменьшено до количества байт, оставшихся после next_smb2_rcv_hdr_off.
А
удаленный клиент может создать составной запрос, последний элемент которого имеет ровно
64 байта, поэтому 2-байтовый StructureSize2, прочитанный со смещением 64, расширяется на один байт.
мимо приемного буфера, что приводит к чтению за пределами допустимого диапазона. ОШИБКА: KASAN: плита выходит за границы в ksmbd_smb2_check_message (fs/smb/server/smb2misc.c:402)
Чтение размера 2 по адресу ffff888012ae31ac с помощью задачи kworker/0:1/14. Адрес ошибки расположен на 172 байта внутри выделенной 173-байтовой области.
Рабочая очередь: ksmbd-io handle_ksmbd_work
Отслеживание вызова:
...
kasan_report (mm/kasan/report.c:595)
ksmbd_smb2_check_message (fs/smb/server/smb2misc.c:402)
handle_ksmbd_work (fs/smb/server/server.c:119)
process_one_work (ядро/workqueue.c:3314)
рабочий_поток (ядро/workqueue.c:3397)
kthread (ядро/kthread.c:436)
ret_from_fork (arch/x86/kernel/process.c:158)
ret_from_fork_asm (arch/x86/entry/entry_64.S:245)
Отклонить любой составной элемент, который слишком мал для хранения StructureSize2.
прежде чем разыменовать его.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ksmbd: validate compound request size before reading StructureSize2 When ksmbd validates a compound (chained) SMB2 request, ksmbd_smb2_check_message() reads pdu->StructureSize2 without first checking that the compound element is large enough to contain it. StructureSize2 is a 2-byte field at offset 64 (__SMB2_HEADER_STRUCTURE_SIZE) from the start of each element. The compound-walking logic only guarantees that a full 64-byte SMB2 header is present for the trailing element: when NextCommand is 0, len is reduced to the number of bytes remaining after next_smb2_rcv_hdr_off. A remote client can craft a compound request whose last element has exactly 64 bytes, so the 2-byte StructureSize2 read at offset 64 extends one byte past the receive buffer, producing a slab-out-of-bounds read. BUG: KASAN: slab-out-of-bounds in ksmbd_smb2_check_message (fs/smb/server/smb2misc.c:402) Read of size 2 at addr ffff888012ae31ac by task kworker/0:1/14 The buggy address is located 172 bytes inside of allocated 173-byte region Workqueue: ksmbd-io handle_ksmbd_work Call Trace: ... kasan_report (mm/kasan/report.c:595) ksmbd_smb2_check_message (fs/smb/server/smb2misc.c:402) handle_ksmbd_work (fs/smb/server/server.c:119) process_one_work (kernel/workqueue.c:3314) worker_thread (kernel/workqueue.c:3397) kthread (kernel/kthread.c:436) ret_from_fork (arch/x86/kernel/process.c:158) ret_from_fork_asm (arch/x86/entry/entry_64.S:245) Reject any compound element that is too small to hold StructureSize2 before dereferencing it.
Характеристики атаки
Последствия
Строка CVSS v3.1
Уязвимые продукты 5
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
6.6.148
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
6.12.101
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
6.18.42
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
7.1.6
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
7.2-rc4
|