CVE-2026-89550

SUNRPC: svcauth_gss: enforce krb5 token minimum length

State
Published
Severity
9.8 Critical
Published
Sep 11, 2026
Updated
Oct 30, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

SUNRPC: svcauth_gss: enforce krb5 token minimum length

svcauth_gss_unwrap_priv() validates only an upper bound on the wire-supplied opaque length before handing the buffer to gss_unwrap():

if (len > xdr_stream_remaining(xdr)) goto unwrap_failed; offset = xdr_stream_pos(xdr); ... maj_stat = gss_unwrap(ctx, offset, offset + len, buf);

The wire value `len` flows unchanged as the upper bound into the krb5 unwrap path, so a len in [0, 16] passes this check and is handed to gss_unwrap(). For a krb5 v2 context that lands in gss_krb5_unwrap_v2(), which reads the 16-byte RFC 4121 token header fields at ptr+4 and ptr+6 and then calls rotate_left() before any integrity check. With a sub-header length the header reads run past the token, and _rotate_left()'s `shift %= buf->len` path can divide by zero when buf->len has been driven to zero by the truncated token. A header-only token (len == 16) is equally invalid: with a non-zero RRC field and the opaque blob ending at the XDR buffer boundary, rotate_left() builds a zero-length subbuffer, reaching the same division.

Reject the token at the server entry point before it reaches the krb5 unwrap core. A valid sealed RFC 4121 token must contain the 16-byte header plus at least some encrypted payload.

Fix by adding a minimum-length check immediately after the existing upper-bound check:

if (len <= GSS_KRB5_TOK_HDR_LEN) goto unwrap_failed;

Scores

CVSSScoreVectorSource
3.19.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 7c9fdcfb1b64c47ed618c103b617af3f86e1239c to before 2188232509f1559cb8fcb0c9a4b1e04317fa0f15Affected
  • 7c9fdcfb1b64c47ed618c103b617af3f86e1239c to before 0ea5b0c7f212c2772d32c2b88287b89a9cdf6eddAffected
  • 7c9fdcfb1b64c47ed618c103b617af3f86e1239c to before dd6afc6cab8c5d387d1ed2f069562ef7bdadd651Affected
  • 7c9fdcfb1b64c47ed618c103b617af3f86e1239c to before de942dd8c2c8358bcad04ce44271954c48924423Affected
  • 7c9fdcfb1b64c47ed618c103b617af3f86e1239c to before 2eed1e6a976a44015c3ee78841fe336796e2b21cAffected
  • 7c9fdcfb1b64c47ed618c103b617af3f86e1239c to before a919c5c88769cf8fb3ec071e6078d830bf512489Affected
LinuxLinux
  • 2.6.18Affected
  • before 2.6.18Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.157 through 6.6.*Not affected
  • 6.12.109 through 6.12.*Not affected
  • 6.18.50 through 6.18.*Not affected
  • 7.2.4 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.