GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2026-89537 (GCVE-0-2026-89537)

Vulnerability from cvelistv5 – Published: 2026-09-11 19:44 – Updated: 2026-09-13 06:30
VLAI
Title
SUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2
Summary
In the Linux kernel, the following vulnerability has been resolved: SUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2 gss_krb5_verify_mic_v2() reads the token ID at ptr[0..1], the flags byte at ptr[2], and padding at ptr[3..7], then passes ptr + GSS_KRB5_TOK_HDR_LEN and cksum_len to gss_krb5_mic_build_sg(). None of these accesses check read_token->len first. The minimum safe token size is GSS_KRB5_TOK_HDR_LEN (16) plus ctx->krb5e->cksum_len (12-24, depending on the enctype). All callers accept shorter tokens from the wire: - gss_unwrap_resp_integ() enforces only an upper bound (offset + len <= rcv_buf->len) before allocating mic.data = kmalloc(len) and passing it to gss_verify_mic(). A malicious NFS server can therefore supply a short checksum opaque, producing a small slab allocation that the Kerberos MIC verifier reads past. - gss_validate() enforces only len <= RPC_MAX_AUTH_SIZE (400) before passing the wire-supplied length to gss_validate_seqno_mic(), which constructs a mic xdr_netobj and calls gss_verify_mic(). - svcauth_gss_verify_header() enforces only checksum.len >= XDR_UNIT (4 bytes) before dispatching to gss_verify_mic(). - svcauth_gss_unwrap_integ() checks only that the checksum fits in gsd->gsd_scratch. Add a length guard at the top of gss_krb5_verify_mic_v2(), before any ptr[] access or scatterlist construction. Well-formed MIC tokens from gss_krb5_get_mic_v2() already have exactly GSS_KRB5_TOK_HDR_LEN + cksum_len bytes, so valid traffic is unaffected.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: de9c17eb4a912c9028f7b470eb80815144883b26 , < 7a946b2e7207f968902f2147ab9b30726f82f7ab (git)
Affected: de9c17eb4a912c9028f7b470eb80815144883b26 , < b94f6719dcd9f7a609bc5f459f85795900e77d25 (git)
guessed Create a notification for this product.
Linux Linux Affected: 2.6.35
Unaffected: 0 , < 2.6.35 (semver)
Unaffected: 7.2.4 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/sunrpc/auth_gss/gss_krb5_unseal.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "7a946b2e7207f968902f2147ab9b30726f82f7ab",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            },
            {
              "lessThan": "b94f6719dcd9f7a609bc5f459f85795900e77d25",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/sunrpc/auth_gss/gss_krb5_unseal.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "2.6.35"
            },
            {
              "lessThan": "2.6.35",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.4",
                  "versionStartIncluding": "2.6.35",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "2.6.35",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nSUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2\n\ngss_krb5_verify_mic_v2() reads the token ID at ptr[0..1], the flags\nbyte at ptr[2], and padding at ptr[3..7], then passes\nptr + GSS_KRB5_TOK_HDR_LEN and cksum_len to gss_krb5_mic_build_sg().\nNone of these accesses check read_token-\u003elen first.\n\nThe minimum safe token size is GSS_KRB5_TOK_HDR_LEN (16) plus\nctx-\u003ekrb5e-\u003ecksum_len (12-24, depending on the enctype).  All callers\naccept shorter tokens from the wire:\n\n - gss_unwrap_resp_integ() enforces only an upper bound\n   (offset + len \u003c= rcv_buf-\u003elen) before allocating\n   mic.data = kmalloc(len) and passing it to gss_verify_mic().\n   A malicious NFS server can therefore supply a short checksum\n   opaque, producing a small slab allocation that the Kerberos MIC\n   verifier reads past.\n\n - gss_validate() enforces only len \u003c= RPC_MAX_AUTH_SIZE (400)\n   before passing the wire-supplied length to\n   gss_validate_seqno_mic(), which constructs a mic xdr_netobj\n   and calls gss_verify_mic().\n\n - svcauth_gss_verify_header() enforces only\n   checksum.len \u003e= XDR_UNIT (4 bytes) before dispatching to\n   gss_verify_mic().\n\n - svcauth_gss_unwrap_integ() checks only that the checksum fits\n   in gsd-\u003egsd_scratch.\n\nAdd a length guard at the top of gss_krb5_verify_mic_v2(), before any\nptr[] access or scatterlist construction.  Well-formed MIC tokens from\ngss_krb5_get_mic_v2() already have exactly GSS_KRB5_TOK_HDR_LEN +\ncksum_len bytes, so valid traffic is unaffected."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 9.1,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - gss_krb5_verify_mic_v2() is reached from nfsd RPCSEC_GSS on TCP/2049 (svcauth_gss_accept \u2192 svcauth_gss_verify_header/unwrap_integ) and from the NFS client processing a remote server\u0027s RPCSEC_GSS verifier or krb5i checksum, so a remote peer triggers it with crafted SUNRPC traffic.\nAC:L - A single RPCSEC_GSS Call or Reply with a MIC/checksum shorter than GSS_KRB5_TOK_HDR_LEN plus cksum_len (callers accept as little as 4 bytes) deterministically over-reads; no race or attacker-uncontrollable layout is required. Kerberized NFS is a standard enterprise deployment.\nPR:N - svcauth_gss_verify_header() is the MIC check itself and runs before credentials are verified; the only gate is an rsc-cache lookup on a cleartext, monotonically increasing 64-bit GSS handle that an unauthenticated client can sniff or enumerate. A malicious NFS server needs no privileges on the client.\nUI:N - On nfsd the over-read is triggered solely by an inbound RPCSEC_GSS message; on the client it fires from the RPC receive path once an NFS/RPCSEC_GSS mount exists. No separate victim action is required at attack time.\nS:U - The slab over-read and any resulting oops stay inside the host kernel SUNRPC/GSS code. This is ordinary same-host kernel impact, not a VM escape, IOMMU bypass, or other changed-scope boundary.\nC:H - gss_unwrap_resp_integ() kmallocs only the attacker-chosen checksum length, then gss_krb5_verify_mic_v2() reads GSS_KRB5_TOK_HDR_LEN+cksum_len (28-40) bytes via gss_krb5_mic_build_sg()/sg_pcopy_to_buffer, an out-of-bounds read of adjacent slab well beyond a few bytes.\nI:N - The defect is a read-only over-read consumed as a MIC comparison; rfc3961_verify_mic copies those bytes into a local buffer and memcmp()s them. There is no out-of-bounds write, use-after-free, or control-flow hijack primitive.\nA:H - Reading 28-40 bytes past a small kmalloc object or past an RPC receive buffer near a page boundary can oops or panic on KASAN, redzone, or unmapped next-page kernels, and the attacker can repeat the crafted RPC to deny NFS service."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-13T06:30:34.939Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/7a946b2e7207f968902f2147ab9b30726f82f7ab"
        },
        {
          "url": "https://git.kernel.org/stable/c/b94f6719dcd9f7a609bc5f459f85795900e77d25"
        }
      ],
      "title": "SUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89537",
    "datePublished": "2026-09-11T19:44:15.216Z",
    "dateReserved": "2026-09-11T19:38:34.721Z",
    "dateUpdated": "2026-09-13T06:30:34.939Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89537",
      "date": "2026-09-16",
      "epss": "0.00516",
      "percentile": "0.42645"
    },
    "microsoft_vex": {
      "current_release_date": "2026-09-14T14:48:17.000Z",
      "cve": "CVE-2026-89537",
      "id": "msrc_CVE-2026-89537",
      "initial_release_date": "2026-09-13T01:02:43.000Z",
      "product_status:known_affected": "1",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "SUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-89537.json",
      "version": "2"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-89537\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-11T20:19:36.733\",\"lastModified\":\"2026-09-13T07:17:16.000\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nSUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2\\n\\ngss_krb5_verify_mic_v2() reads the token ID at ptr[0..1], the flags\\nbyte at ptr[2], and padding at ptr[3..7], then passes\\nptr + GSS_KRB5_TOK_HDR_LEN and cksum_len to gss_krb5_mic_build_sg().\\nNone of these accesses check read_token-\u003elen first.\\n\\nThe minimum safe token size is GSS_KRB5_TOK_HDR_LEN (16) plus\\nctx-\u003ekrb5e-\u003ecksum_len (12-24, depending on the enctype).  All callers\\naccept shorter tokens from the wire:\\n\\n - gss_unwrap_resp_integ() enforces only an upper bound\\n   (offset + len \u003c= rcv_buf-\u003elen) before allocating\\n   mic.data = kmalloc(len) and passing it to gss_verify_mic().\\n   A malicious NFS server can therefore supply a short checksum\\n   opaque, producing a small slab allocation that the Kerberos MIC\\n   verifier reads past.\\n\\n - gss_validate() enforces only len \u003c= RPC_MAX_AUTH_SIZE (400)\\n   before passing the wire-supplied length to\\n   gss_validate_seqno_mic(), which constructs a mic xdr_netobj\\n   and calls gss_verify_mic().\\n\\n - svcauth_gss_verify_header() enforces only\\n   checksum.len \u003e= XDR_UNIT (4 bytes) before dispatching to\\n   gss_verify_mic().\\n\\n - svcauth_gss_unwrap_integ() checks only that the checksum fits\\n   in gsd-\u003egsd_scratch.\\n\\nAdd a length guard at the top of gss_krb5_verify_mic_v2(), before any\\nptr[] access or scatterlist construction.  Well-formed MIC tokens from\\ngss_krb5_get_mic_v2() already have exactly GSS_KRB5_TOK_HDR_LEN +\\ncksum_len bytes, so valid traffic is unaffected.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"net/sunrpc/auth_gss/gss_krb5_unseal.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"de9c17eb4a912c9028f7b470eb80815144883b26\",\"lessThan\":\"7a946b2e7207f968902f2147ab9b30726f82f7ab\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"de9c17eb4a912c9028f7b470eb80815144883b26\",\"lessThan\":\"b94f6719dcd9f7a609bc5f459f85795900e77d25\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"net/sunrpc/auth_gss/gss_krb5_unseal.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"2.6.35\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"2.6.35\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2.4\",\"lessThanOrEqual\":\"7.2.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.3-rc1\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H\",\"baseScore\":9.1,\"baseSeverity\":\"CRITICAL\",\"attackVector\":\"NETWORK\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"NONE\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":3.9,\"impactScore\":5.2}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/7a946b2e7207f968902f2147ab9b30726f82f7ab\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/b94f6719dcd9f7a609bc5f459f85795900e77d25\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-09-13T06:57:10+00:00",
      "cve": "CVE-2026-89537",
      "id": "CVE-2026-89537",
      "initial_release_date": "2026-09-11T19:44:15.216000+00:00",
      "product_status:known_affected": "2",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: Linux kernel: Memory corruption in SUNRPC due to short Kerberos MIC tokens",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89537.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-16T15:37:12Z",
      "cve": "CVE-2026-89537",
      "id": "CVE-2026-89537",
      "initial_release_date": "2026-09-12T16:26:31Z",
      "product_status:known_affected": "353",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-89537",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-89537.json",
      "version": "4"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…