Podatność w podsystemie nvmet-tcp jądra Linux polega na nieprawidłowej propagacji błędów z funkcji nvmet_tcp_build_pdu_iovec(), co prowadzi do użycia niezainicjowanego iteratora wiadomości. Jest to krytyczna luka (CVSS 9.8) umożliwiająca atakującemu sieciowe oddziaływanie na system bez uwierzytelnienia.
▸ Pokaż oryginał (EN)
In the Linux kernel, the following vulnerability has been resolved: nvmet-tcp: propagate nvmet_tcp_build_pdu_iovec() errors to its callers Currently, when nvmet_tcp_build_pdu_iovec() detects an out-of-bounds PDU length or offset, it triggers nvmet_tcp_fatal_error(cmd->queue) and returns early. However, because the function returns void, the callers are entirely unaware that a fatal error has occurred and that the cmd->recv_msg.msg_iter was left uninitialized. Callers such as nvmet_tcp_handle_h2c_data_pdu() proceed to blindly overwrite the queue state with queue->rcv_state = NVMET_TCP_RECV_DATA Consequently, the socket receiving loop may attempt to read incoming network data into the uninitialized iterator. Fix this by shifting the error handling responsibility to the callers.
Funkcja nvmet_tcp_build_pdu_iovec() wykrywa nieprawidłową długość lub offset PDU i wywołuje nvmet_tcp_fatal_error(), jednak zwraca typ void — nie informuje wywołujących o wystąpieniu błędu. Funkcje wywołujące, takie jak nvmet_tcp_handle_h2c_data_pdu(), kontynuują działanie i nadpisują stan kolejki (queue->rcv_state = NVMET_TCP_RECV_DATA), mimo że iterator wiadomości cmd->recv_msg.msg_iter pozostał niezainicjowany. W konsekwencji pętla odbioru danych przez gniazdo może próbować zapisywać przychodzące dane sieciowe do niezainicjowanego obszaru pamięci.
Atakujący zdalnie, bez uwierzytelnienia, może doprowadzić do uszkodzenia pamięci jądra, potencjalnie osiągając naruszenie poufności, integralności oraz dostępności systemu (RCE lub crash jądra).
Należy zastosować patche dostępne w referencjach producenta (commity: 046fa5c72d15, 3df42a854686, c2a11441538b, d7c8f95f599b, ea8e356acb16 w repozytoriach stable jądra Linux). Zaleca się aktualizację do wersji jądra zawierającej poprawkę zgodnie ze wskazaniami dystrybucji.
Jądro Linux z włączonym podsystemem nvmet-tcp; szczegółowe wersje wskazane w referencjach producenta (commitach stabilnych gałęzi kernela).
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H