Katalog CVE

CVE-2026-89551

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

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.17%

Percentyl 6 - wyżej niż 6% wszystkich znanych CVE

Streszczenie

W jądrze Linux funkcja xdr_buf_trim() nie ogranicza odejmowania od buf->len, co przy wartości buf->len mniejszej niż suma iov_lens prowadzi do niedomiaru (underflow) i zawinięcia do wartości bliskiej UINT_MAX. Stan ten jest osiągalny przez gss_krb5_unwrap_v2(), a zawinięta wartość propaguje się do wszystkich niższych dekoderów XDR.

Ocena ryzyka

Może prowadzić do błędnego przetwarzania danych XDR, potencjalnie umożliwiając zdalne wykonanie kodu lub ujawnienie informacji. Wymaga jednak specjalnie spreparowanych pakietów RPC GSS/Kerberos.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę, która ogranicza odejmowanie tak, aby buf->len nie spadało poniżej zera. Sprawdź systemy korzystające z NFS/RPC z Kerberos.

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: SUNRPC: xdr_buf_trim: clamp buf->len to avoid underflow xdr_buf_trim() trims `len` bytes from the tail of an xdr_buf by walking the tail, pages, and head iovecs. Each per-section step uses min_t() so it never removes more bytes than that section holds, but the final accounting at the fix_len label subtracts the total bytes actually consumed from buf->len without any clamp: fix_len: buf->len -= (len - trim); When the caller has set buf->len to a value smaller than the sum of the iov_lens, (len - trim) can exceed buf->len and the unsigned subtraction wraps to near UINT_MAX. gss_krb5_unwrap_v2() reaches xdr_buf_trim() in exactly that state: buf->head[0].iov_len -= GSS_KRB5_TOK_HDR_LEN + headskip; buf->len = len - (GSS_KRB5_TOK_HDR_LEN + headskip); xdr_buf_trim(buf, ec + GSS_KRB5_TOK_HDR_LEN + tailskip); buf->len is a small wire-derived value while the iov_lens are at page scale, so the per-section loops legitimately consume far more bytes than buf->len records. The wrapped buf->len then propagates as the authoritative stream bound into every downstream XDR decoder. Fix by clamping the decrement so buf->len bottoms out at zero: buf->len -= min_t(unsigned int, buf->len, len - trim); On the normal path where the iov_lens sum to buf->len, (len - trim) is always <= buf->len and the result is identical to before. No callers change behavior outside the underflow case.

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