В ядре Linux устранена следующая уязвимость:
ksmbd: отклонять списки DACL меньшего размера перед анализом ACE.
parse_dacl() ограничивает количество ACE, контролируемое злоумышленником, путем его сравнения
с количеством минимальных элементов управления доступом, соответствующих размеру DACL. Размер DACL
поле имеет размер 16 бит, но из выражения вычитается sizeof(struct smb_acl). Поскольку sizeof() не имеет знака, размер DACL меньше заголовка ACL.
переполняется до большого размера size_t.
Вредоносный клиент может достичь этого с помощью:
SMB2_SET_INFO (InfoType=SMB2_O_INFO_SECURITY)
-> smb2_set_info_sec()
-> set_info_sec()
-> parse_sec_desc()
-> parse_dacl()
-> init_acl_state(..., 0xffff)
-> init_acl_state(..., 0xffff)
-> kmalloc_objs(..., 0xffff)
Таким образом, неверный дескриптор безопасности может заставить num_aces пройти защиту.
и управлять большими временными состояниями ACL и распределением массивов указателей. Отклонять списки DACL, меньшие, чем struct smb_acl, перед выполнением вычитания.
поэтому проверка количества ACE не может быть пропущена при переполнении.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ksmbd: reject undersized DACLs before parsing ACEs parse_dacl() limits the attacker-controlled ACE count by comparing it with the number of minimal ACEs that fit in the DACL size. The DACL size field is 16 bits, but the expression subtracts sizeof(struct smb_acl). Because sizeof() is unsigned, a DACL size smaller than the ACL header underflows to a large size_t. A malicious client can reach this with: SMB2_SET_INFO (InfoType=SMB2_O_INFO_SECURITY) -> smb2_set_info_sec() -> set_info_sec() -> parse_sec_desc() -> parse_dacl() -> init_acl_state(..., 0xffff) -> init_acl_state(..., 0xffff) -> kmalloc_objs(..., 0xffff) Thus a malformed security descriptor can make num_aces pass the guard and drive large temporary ACL state and pointer-array allocations. Reject DACLs smaller than struct smb_acl before doing the subtraction, so the ACE count check cannot be bypassed by the underflow.
Характеристики атаки
Последствия
Строка CVSS v3.1