В ядре Linux устранена следующая уязвимость:
smb: клиент: исправлена утечка UAF и буфера в cifs_check_trans2() для некорректного вторичного T2. Когда получен действительный основной ответ TRANSACT2 (mid->resp_buf
set, middle->multiRsp true), и последующий вторичный ответ вызывает
cifs_check_trans2(), чтобы вернуть false — либо потому, что заголовок SMB
недействителен (неправильный формат != 0) или потому, что check2ndT2() отклоняет PDU --
handle_mid() перезаписывает Mid->resp_buf новым буфером (утечка
основной буфер) и, поскольку установлен Mid->multiRsp, пропускает
сервер->smallbuf/bigbuf NULL-выход. Когда пользовательский поток освобождается
Mid->resp_buf, server->smallbuf или server->bigbuf остается висящим; тот
поток demux повторно использует его для следующего пакета, что приводит к использованию после освобождения.
Объедините оба условия раннего выхода и, когда Mid->multiRsp уже
установить, отменить ожидающую транзакцию: установить multiEnd, вызвать
dequeue_mid() с уродливым=true и возвращает true, чтобы handle_mid() завершился
не касаясь Mid->resp_buf или указателей буфера сервера.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: smb: client: fix UAF and buffer leak in cifs_check_trans2() for malformed secondary T2 When a valid primary TRANSACT2 response has been received (mid->resp_buf set, mid->multiRsp true) and a subsequent secondary response causes cifs_check_trans2() to return false -- either because the SMB header is invalid (malformed != 0) or because check2ndT2() rejects the PDU -- handle_mid() overwrites mid->resp_buf with the new buffer (leaking the primary buffer) and, because mid->multiRsp is set, skips the server->smallbuf/bigbuf NULL-out. When the user thread frees mid->resp_buf, server->smallbuf or server->bigbuf is left dangling; the demux thread reuses it for the next packet, resulting in a use-after-free. Combine both early-exit conditions and, when mid->multiRsp is already set, abort the pending transaction inline: set multiEnd, call dequeue_mid() with malformed=true, and return true so handle_mid() exits without touching mid->resp_buf or the server buffer pointers.
Характеристики атаки
Последствия
Строка CVSS v3.1