Katalog CVE

CVE-2026-89969

KrytyczneCVSS 9.8
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Streszczenie

W jądrze Linux funkcja nvmet_tcp_try_recv_pdu() oblicza pozostałą długość ładunku PDU bez sprawdzenia, czy nie przekracza ona rozmiaru bufora queue->pdu. Gdy wynegocjowany jest digest nagłówka, zduplikowany pakiet ICReq powoduje zapis 4 bajtów poza końcem 128-bajtowego bufora, nadpisując pola queue->hdr_digest i queue->data_digest danymi kontrolowanymi przez atakującego.

Ocena ryzyka

Zdalny, nieuwierzytelniony atakujący może uszkodzić pamięć jądra przylegającą do bufora odbioru, co może prowadzić do wykonania kodu lub paniki systemu. Dotyczy serwerów NVMe over TCP target.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę odrzucającą PDU o zadeklarowanej długości przekraczającej rozmiar queue->pdu. Ogranicz dostęp do portu NVMe/TCP do zaufanych klientów.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

In the Linux kernel, the following vulnerability has been resolved: nvmet-tcp: fix out-of-bounds write when receiving an over-long PDU nvmet_tcp_try_recv_pdu() reads a PDU header into the fixed 128-byte queue->pdu union, then computes the remaining payload length as queue->left = hdr->hlen - queue->offset + hdgst; and reads that many more bytes into &queue->pdu + queue->offset, without ever bounding the result against sizeof(queue->pdu). A struct nvme_tcp_icreq_pdu is itself 128 bytes, exactly the size of the union. Once a header digest has been negotiated (hdgst = 4), a second ICReq passes the hlen == nvmet_tcp_pdu_size() check but yields queue->left = 128 - 8 + 4 = 124, so bytes 8..132 are written into the 128-byte buffer -- 4 bytes past its end, over queue->hdr_digest and queue->data_digest. Those bytes are attacker-controlled (an ICReq carries no digest), and the duplicate ICReq is only rejected later, after the overflow. A remote unauthenticated host can thus corrupt kernel memory adjacent to the receive buffer. Reject any PDU whose declared length would read past the end of queue->pdu before the second recv.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS