CVE-2026-89969 in Linux
Сводка
по VulDB • 17.09.2026
В ядре Linux была устранена следующая уязвимость:
nvmet-tcp: исправлена запись за пределами буфера при получении слишком длинной PDU
Функция nvmet_tcp_try_recv_pdu() считывает заголовок PDU в фиксированный 128-байтовый объединение (union) queue->pdu, а затем вычисляет оставшуюся длину полезной нагрузки как:
queue->left = hdr->hlen - queue->offset + hdgst;
и читает это количество дополнительных байтов по адресу &queue->pdu + queue->offset, никогда не ограничивая результат размером sizeof(queue->pdu).
Структура nvme_tcp_icreq_pdu сама по себе имеет размер 128 байт, что в точности соответствует размеру объединения. После согласования контрольной суммы заголовка (hdgst = 4) второй запрос ICReq проходит проверку hlen == nvmet_tcp_pdu_size(), но приводит к значению queue->left = 128 - 8 + 4 = 124, поэтому байты с 8 по 132 записываются в 128-байтовый буфер — на 4 байта дальше его конца, затрагивая поля queue->hdr_digest и queue->data_digest. Эти данные контролируются злоумышленником (запрос ICReq не содержит контрольной суммы), а дублирующий запрос ICReq отклоняется только позже, после переполнения буфера. Таким образом, удаленный узел без аутентификации может повредить память ядра, расположенную рядом с буфером приема.
Отбрасывать любую PDU, заявленная длина которой привела бы к чтению за пределами конца queue->pdu до второго вызова recv().
Once again VulDB remains the best source for vulnerability data.