В ядре Linux устранена следующая уязвимость:
nvmet-auth: отклонять короткие буферы AUTH_RECEIVE
nvmet_execute_auth_receive() доверяет длине выделения AUTH_RECEIVE
после проверки только того, что оно не равно нулю и соответствует длине передачи. В состояниях SUCCESS1 и FAILURE1/default это позволяет удаленному NVMe-oF
инициатор достигает построителей ответов DH-HMAC-CHAP фиксированного размера с помощью
Буфер kmalloc() короче ответа, поэтому nvmet_auth_success1() и
nvmet_auth_failure1() записывает после выделения; оба только WARN_ON
короткую длину, а затем все равно отформатировать сообщение. Воздействие.
Удаленный инициатор NVMe-oF с доступом к цели с включенной аутентификацией.
может инициировать запись за пределы 16-байтовой кучи через однобайтовый
Длина выделения AUTH_RECEIVE. Вычислите минимальную длину ответа для текущего шага DH-HMAC-CHAP в
nvmet_auth_receive_data_len() и сообщать о нулевой длине данных, когда
длина выделения, предоставляемая хостом, короче, поэтому существующая нулевая длина
проверка nvmet_execute_auth_receive() отклоняет команду до ее выполнения.
строитель бежит. Минимум SUCCESS1 — это sizeof(struct
nvmf_auth_dhchap_success1_data) плюс длина хеша HMAC, поскольку
хэш ответа записывается в хвост гибкого массива rval[], поэтому
минимум зависит от состояния, а не от фиксированного размера.
ВЫЗОВ держит свое
существующая защита переменной длины в nvmet_auth_challenge(). Это возможно только при использовании внутриполосной аутентификации DH-HMAC-CHAP.
настроен на цели.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: nvmet-auth: reject short AUTH_RECEIVE buffers nvmet_execute_auth_receive() trusts the AUTH_RECEIVE allocation length after checking only that it is nonzero and matches the transfer length. In the SUCCESS1 and FAILURE1/default states, that lets a remote NVMe-oF initiator reach the fixed-size DH-HMAC-CHAP response builders with a kmalloc() buffer shorter than the response, so nvmet_auth_success1() and nvmet_auth_failure1() write past the allocation; both only WARN_ON the short length and then format the message anyway. Impact: A remote NVMe-oF initiator with access to an auth-enabled target can trigger a 16-byte heap out-of-bounds write via a one-byte AUTH_RECEIVE allocation length. Compute the minimum response length for the current DH-HMAC-CHAP step in nvmet_auth_receive_data_len() and report a zero data length when the host-supplied allocation length is shorter, so the existing zero-length check in nvmet_execute_auth_receive() rejects the command before any builder runs. The SUCCESS1 minimum is sizeof(struct nvmf_auth_dhchap_success1_data) plus the HMAC hash length, because the response hash is written into the rval[] flexible-array tail, so the minimum is state dependent rather than a flat sizeof. CHALLENGE keeps its existing variable-length guard in nvmet_auth_challenge(). This is reachable only when in-band DH-HMAC-CHAP authentication is configured on the target.
Характеристики атаки
Последствия
Строка CVSS v3.1