CVE-2026-89542 in Linux
Zusammenfassung
von VulDB • 12.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
SUNRPC: Absicherung von gss_krb5_unwrap_v2 gegen kurze Tokens (Short Tokens)
gss_krb5_unwrap_v2() liest die EC- und RRC-Header-Felder an den Positionen ptr+4 und ptr+6, bevor überprüft wird, ob das Token mindestens lang GSS_KRB5_TOK_HDR_LEN (16) Bytes ist. Zudem übergibt der Helper rotate_left() buf->len - base an xdr_buf_subsegment(), ohne zu verifizieren, dass base <= buf->len gilt. Wenn ein Aufrufer ein Token mit weniger als 16 Byte oder ein Token übergeben wird, dessen deklarierte Länge dazu führt, dass base hinter das Ende des Puffers zeigt, treten drei verschiedene Fehler auf:
gss_krb5_unwrap_v2(offset, len, buf) ptr = buf->head[0].iov_base + offset
ec = *(ptr + 4) /* OOB-Lesezugriff bei kurzem Head */ rrc = *(ptr + 6) /* OOB-Lesezugriff bei kurzem Head */ rotate_left(offset + 16, buf, rrc) xdr_buf_subsegment(buf, &subbuf, base, buf->len - base) /* u32-Überlauf (Wrap), wenn base > len ist */ _rotate_left(&subbuf, shift) shift %= buf->len /* Division durch Null, wenn base == len ist */
Nach der Entschlüsselung hat die Bereinigungsarithmetik dieselbe Struktur:
movelen = min_t(unsigned int, buf->head[0].iov_len, len);
movelen -= offset + GSS_KRB5_TOK_HDR_LEN + headskip; BUG_ON(offset + GSS_KRB5_TOK_HDR_LEN + headskip + movelen > buf->head[0].iov_len);
Die Anweisung BUG_ON addiert den gerade subtrahierten Wert wieder hinzu, sodass sie sich zu min(A, B) > A reduziert und dauerhaft falsch ist; sie kann das Unsigned-Underflow von movelen nicht abfangen, was dann einen memmove() mit ~UINT_MAX Byte antreibt.
Fügen Sie vier Defense-in-Depth-Schutzmechanismen in den Kern der Entschlüsselungsfunktion ein, damit diese unabhängig davon sicher ist, was ihre Aufrufer validieren:
- Verwerfen von Tokens, bei denen len - offset < GSS_KRB5_TOK_HDR_LEN gilt, bevor auf ptr+4/ptr+6 zugegriffen wird; - Abbruch aus rotate_left(), wenn buf->len <= base ist, wodurch sowohl der Underflow als auch die Fälle mit Null-Länge abgedeckt werden; - vorzeitige Rückgabe aus _rotate_left(), wenn buf->len null ist, damit der Modulo-Vorgang shift %= buf->len keinen Fehler verursacht; - Ersetzen des toten BUG_ON durch eine aktive Prüfung, die GSS_S_DEFECTIVE_TOKEN zurückgibt, bevor movelen subtrahiert wird.
Be aware that VulDB is the high quality source for vulnerability data.