CVE-2026-89542 (GCVE-0-2026-89542)
Vulnerability from cvelistv5
Published
2026-09-11 19:44
Modified
2026-10-19 08:48
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved: SUNRPC: harden gss_krb5_unwrap_v2 against short tokens gss_krb5_unwrap_v2() reads the EC and RRC header fields at ptr+4 and ptr+6 before validating that the token is at least GSS_KRB5_TOK_HDR_LEN (16) bytes long, and its rotate_left() helper passes buf->len - base to xdr_buf_subsegment() without verifying that base <= buf->len. When a caller hands in a sub-16-byte token, or a token whose declared len leaves base past the end of the buffer, three distinct failures follow: gss_krb5_unwrap_v2(offset, len, buf) ptr = buf->head[0].iov_base + offset ec = *(ptr + 4) /* OOB read on short head */ rrc = *(ptr + 6) /* OOB read on short head */ rotate_left(offset + 16, buf, rrc) xdr_buf_subsegment(buf, &subbuf, base, buf->len - base) /* u32 wrap when base > len */ _rotate_left(&subbuf, shift) shift %= buf->len /* divide-by-zero when base == len */ After decryption, the cleanup arithmetic has the same shape: 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); The BUG_ON re-adds the value just subtracted, so it reduces to min(A, B) > A and is permanently false; it cannot catch the unsigned underflow of movelen, which then drives a ~UINT_MAX-byte memmove(). Add four defense-in-depth guards inside the unwrap core so it is safe regardless of what its callers validate: - reject tokens with len - offset < GSS_KRB5_TOK_HDR_LEN before touching ptr+4/ptr+6; - bail from rotate_left() when buf->len <= base, covering both the underflow and zero-length cases; - return early from _rotate_left() when buf->len is zero, so the shift %= buf->len modulo cannot fault; - replace the dead BUG_ON with a live check that returns GSS_S_DEFECTIVE_TOKEN before the movelen subtraction.
Impacted products
Vendor Product Version
Linux Linux Version: de9c17eb4a912c9028f7b470eb80815144883b26
Version: de9c17eb4a912c9028f7b470eb80815144883b26
Version: de9c17eb4a912c9028f7b470eb80815144883b26
Version: de9c17eb4a912c9028f7b470eb80815144883b26
Version: de9c17eb4a912c9028f7b470eb80815144883b26
Version: de9c17eb4a912c9028f7b470eb80815144883b26
Version: de9c17eb4a912c9028f7b470eb80815144883b26
Version: de9c17eb4a912c9028f7b470eb80815144883b26
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-89542",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "yes"
                  },
                  {
                    "Technical Impact": "total"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-10-16T19:23:31.016705Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-10-16T19:26:42.330Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/sunrpc/auth_gss/gss_krb5_wrap.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "299d281c7225ded15b28cb861a98d818d82787fc",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            },
            {
              "lessThan": "84ddbc8d084c0251d534f14f5d1a7da05be56404",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            },
            {
              "lessThan": "075d7cfc4df8c54cb202ba8b28420370c03ba9b6",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            },
            {
              "lessThan": "f2591660e0eb263c9415bf0d0bb1b111e62df7a4",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            },
            {
              "lessThan": "dddcb0f4b7e27fac16a78ea9a1c8ec2e8a241087",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            },
            {
              "lessThan": "806584a4b67a7233870c33e5b8f872e76dd02988",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            },
            {
              "lessThan": "a7894e10572d53eb10109b8d07459cc8d3435811",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            },
            {
              "lessThan": "6959297aaa9572783d620a226d73c3fb94494888",
              "status": "affected",
              "version": "de9c17eb4a912c9028f7b470eb80815144883b26",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/sunrpc/auth_gss/gss_krb5_wrap.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": "5.10.*",
              "status": "unaffected",
              "version": "5.10.270",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.221",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.188",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.157",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.109",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.50",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.270",
                  "versionStartIncluding": "2.6.35",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.221",
                  "versionStartIncluding": "2.6.35",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.188",
                  "versionStartIncluding": "2.6.35",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "versionStartIncluding": "2.6.35",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.109",
                  "versionStartIncluding": "2.6.35",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.50",
                  "versionStartIncluding": "2.6.35",
                  "vulnerable": true
                },
                {
                  "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",
                  "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: harden gss_krb5_unwrap_v2 against short tokens\n\ngss_krb5_unwrap_v2() reads the EC and RRC header fields at ptr+4 and\nptr+6 before validating that the token is at least GSS_KRB5_TOK_HDR_LEN\n(16) bytes long, and its rotate_left() helper passes buf-\u003elen - base\nto xdr_buf_subsegment() without verifying that base \u003c= buf-\u003elen. When\na caller hands in a sub-16-byte token, or a token whose declared len\nleaves base past the end of the buffer, three distinct failures follow:\n\n    gss_krb5_unwrap_v2(offset, len, buf)\n      ptr = buf-\u003ehead[0].iov_base + offset\n      ec  = *(ptr + 4)              /* OOB read on short head */\n      rrc = *(ptr + 6)              /* OOB read on short head */\n      rotate_left(offset + 16, buf, rrc)\n        xdr_buf_subsegment(buf, \u0026subbuf,\n                           base, buf-\u003elen - base)   /* u32 wrap when base \u003e len */\n        _rotate_left(\u0026subbuf, shift)\n          shift %= buf-\u003elen         /* divide-by-zero when base == len */\n\nAfter decryption, the cleanup arithmetic has the same shape:\n\n    movelen = min_t(unsigned int, buf-\u003ehead[0].iov_len, len);\n    movelen -= offset + GSS_KRB5_TOK_HDR_LEN + headskip;\n    BUG_ON(offset + GSS_KRB5_TOK_HDR_LEN + headskip + movelen \u003e\n                                            buf-\u003ehead[0].iov_len);\n\nThe BUG_ON re-adds the value just subtracted, so it reduces to\nmin(A, B) \u003e A and is permanently false; it cannot catch the unsigned\nunderflow of movelen, which then drives a ~UINT_MAX-byte memmove().\n\nAdd four defense-in-depth guards inside the unwrap core so it is safe\nregardless of what its callers validate:\n\n  - reject tokens with len - offset \u003c GSS_KRB5_TOK_HDR_LEN before\n    touching ptr+4/ptr+6;\n  - bail from rotate_left() when buf-\u003elen \u003c= base, covering both the\n    underflow and zero-length cases;\n  - return early from _rotate_left() when buf-\u003elen is zero, so the\n    shift %= buf-\u003elen modulo cannot fault;\n  - replace the dead BUG_ON with a live check that returns\n    GSS_S_DEFECTIVE_TOKEN before the movelen subtraction."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 9.8,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - gss_krb5_unwrap_v2() is reached from nfsd RPCSEC_GSS privacy unwrap (svcauth_gss_accept \u2192 svcauth_gss_unwrap_priv \u2192 gss_unwrap) on TCP/2049 and from the NFS client gss_unwrap_resp_priv() path on a krb5p Reply, so a remote RPCSEC_GSS peer delivers the crafted wrap token over the network.\nAC:L - A single crafted RPCSEC_GSS DATA/Reply with a sub-16-byte wrap token (KG2_TOK_WRAP, sealed flags, non-zero RRC) deterministically hits the pre-decrypt ptr+4/ptr+6 reads, rotate_left() u32 wrap, and shift%=0 divide-by-zero; no race or attacker-uncontrollable layout is required.\nPR:N - A malicious NFS server on an existing krb5p session needs no account or capability on the victim client to send the crafted Reply into gss_unwrap_resp_priv(). That client-victim path is the highest-severity reachability and requires no privileges on the target.\nUI:N - nfsd unwraps the Call in the service thread with no local user action. On the client, gss_unwrap_resp_priv() runs automatically from the RPC receive path once an NFS/RPCSEC_GSS mount exists; no additional mount, click, or open is required at attack time.\nS:U - The out-of-bounds accesses, divide-by-zero, and underflowed memmove corrupt host kernel SUNRPC/GSS state on the machine processing the RPC. This is ordinary same-host kernel impact, not a VM escape, IOMMU bypass, or other changed-scope boundary.\nC:H - Short tokens make gss_krb5_unwrap_v2() read EC/RRC past the token, and the dead BUG_ON lets unsigned movelen underflow into a ~UINT_MAX-byte memmove() that copies kernel memory beyond the receive head; that unbounded read is C:H per kernel CNA memory-corruption guidance.\nI:H - The same underflowed memmove() writes near 4GiB through the RPC receive head, an out-of-bounds write exploitable for control-flow hijack. rotate_left() also ignores xdr_buf_subsegment() failure after u32 wrap and then writes through a subbuf whose length has wrapped.\nA:H - _rotate_left() does shift %= buf-\u003elen on a zero-length subbuffer (header-only token at the XDR boundary), a divide-by-zero oops/panic; the UINT_MAX memmove and wrapped-length rotate loop hang or oops nfsd/rpciod, and the attacker can repeat the RPC to deny service."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-19T08:48:33.941Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/299d281c7225ded15b28cb861a98d818d82787fc"
        },
        {
          "url": "https://git.kernel.org/stable/c/84ddbc8d084c0251d534f14f5d1a7da05be56404"
        },
        {
          "url": "https://git.kernel.org/stable/c/075d7cfc4df8c54cb202ba8b28420370c03ba9b6"
        },
        {
          "url": "https://git.kernel.org/stable/c/f2591660e0eb263c9415bf0d0bb1b111e62df7a4"
        },
        {
          "url": "https://git.kernel.org/stable/c/dddcb0f4b7e27fac16a78ea9a1c8ec2e8a241087"
        },
        {
          "url": "https://git.kernel.org/stable/c/806584a4b67a7233870c33e5b8f872e76dd02988"
        },
        {
          "url": "https://git.kernel.org/stable/c/a7894e10572d53eb10109b8d07459cc8d3435811"
        },
        {
          "url": "https://git.kernel.org/stable/c/6959297aaa9572783d620a226d73c3fb94494888"
        }
      ],
      "title": "SUNRPC: harden gss_krb5_unwrap_v2 against short tokens",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89542",
    "datePublished": "2026-09-11T19:44:18.931Z",
    "dateReserved": "2026-09-11T19:38:34.722Z",
    "dateUpdated": "2026-10-19T08:48:33.941Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2026-89542\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"yes\"}, {\"Technical Impact\": \"total\"}], \"version\": \"2.0.3\", \"timestamp\": \"2026-10-16T19:23:31.016705Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2026-10-16T19:23:31.599Z\"}}], \"cna\": {\"title\": \"SUNRPC: harden gss_krb5_unwrap_v2 against short tokens\", \"metrics\": [{\"cvssV3_1\": {\"version\": \"3.1\", \"baseScore\": 9.8, \"baseSeverity\": \"CRITICAL\", \"vectorString\": \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"AV:N - gss_krb5_unwrap_v2() is reached from nfsd RPCSEC_GSS privacy unwrap (svcauth_gss_accept \\u2192 svcauth_gss_unwrap_priv \\u2192 gss_unwrap) on TCP/2049 and from the NFS client gss_unwrap_resp_priv() path on a krb5p Reply, so a remote RPCSEC_GSS peer delivers the crafted wrap token over the network.\\nAC:L - A single crafted RPCSEC_GSS DATA/Reply with a sub-16-byte wrap token (KG2_TOK_WRAP, sealed flags, non-zero RRC) deterministically hits the pre-decrypt ptr+4/ptr+6 reads, rotate_left() u32 wrap, and shift%=0 divide-by-zero; no race or attacker-uncontrollable layout is required.\\nPR:N - A malicious NFS server on an existing krb5p session needs no account or capability on the victim client to send the crafted Reply into gss_unwrap_resp_priv(). That client-victim path is the highest-severity reachability and requires no privileges on the target.\\nUI:N - nfsd unwraps the Call in the service thread with no local user action. On the client, gss_unwrap_resp_priv() runs automatically from the RPC receive path once an NFS/RPCSEC_GSS mount exists; no additional mount, click, or open is required at attack time.\\nS:U - The out-of-bounds accesses, divide-by-zero, and underflowed memmove corrupt host kernel SUNRPC/GSS state on the machine processing the RPC. This is ordinary same-host kernel impact, not a VM escape, IOMMU bypass, or other changed-scope boundary.\\nC:H - Short tokens make gss_krb5_unwrap_v2() read EC/RRC past the token, and the dead BUG_ON lets unsigned movelen underflow into a ~UINT_MAX-byte memmove() that copies kernel memory beyond the receive head; that unbounded read is C:H per kernel CNA memory-corruption guidance.\\nI:H - The same underflowed memmove() writes near 4GiB through the RPC receive head, an out-of-bounds write exploitable for control-flow hijack. rotate_left() also ignores xdr_buf_subsegment() failure after u32 wrap and then writes through a subbuf whose length has wrapped.\\nA:H - _rotate_left() does shift %= buf-\u003elen on a zero-length subbuffer (header-only token at the XDR boundary), a divide-by-zero oops/panic; the UINT_MAX memmove and wrapped-length rotate loop hang or oops nfsd/rpciod, and the attacker can repeat the RPC to deny service.\"}]}], \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"de9c17eb4a912c9028f7b470eb80815144883b26\", \"lessThan\": \"299d281c7225ded15b28cb861a98d818d82787fc\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"de9c17eb4a912c9028f7b470eb80815144883b26\", \"lessThan\": \"84ddbc8d084c0251d534f14f5d1a7da05be56404\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"de9c17eb4a912c9028f7b470eb80815144883b26\", \"lessThan\": \"075d7cfc4df8c54cb202ba8b28420370c03ba9b6\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"de9c17eb4a912c9028f7b470eb80815144883b26\", \"lessThan\": \"f2591660e0eb263c9415bf0d0bb1b111e62df7a4\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"de9c17eb4a912c9028f7b470eb80815144883b26\", \"lessThan\": \"dddcb0f4b7e27fac16a78ea9a1c8ec2e8a241087\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"de9c17eb4a912c9028f7b470eb80815144883b26\", \"lessThan\": \"806584a4b67a7233870c33e5b8f872e76dd02988\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"de9c17eb4a912c9028f7b470eb80815144883b26\", \"lessThan\": \"a7894e10572d53eb10109b8d07459cc8d3435811\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"de9c17eb4a912c9028f7b470eb80815144883b26\", \"lessThan\": \"6959297aaa9572783d620a226d73c3fb94494888\", \"versionType\": \"git\"}], \"programFiles\": [\"net/sunrpc/auth_gss/gss_krb5_wrap.c\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"2.6.35\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"2.6.35\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"5.10.270\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.10.*\"}, {\"status\": \"unaffected\", \"version\": \"5.15.221\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.15.*\"}, {\"status\": \"unaffected\", \"version\": \"6.1.188\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.1.*\"}, {\"status\": \"unaffected\", \"version\": \"6.6.157\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.6.*\"}, {\"status\": \"unaffected\", \"version\": \"6.12.109\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.12.*\"}, {\"status\": \"unaffected\", \"version\": \"6.18.50\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.18.*\"}, {\"status\": \"unaffected\", \"version\": \"7.2.4\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"7.2.*\"}, {\"status\": \"unaffected\", \"version\": \"7.3\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"net/sunrpc/auth_gss/gss_krb5_wrap.c\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/299d281c7225ded15b28cb861a98d818d82787fc\"}, {\"url\": \"https://git.kernel.org/stable/c/84ddbc8d084c0251d534f14f5d1a7da05be56404\"}, {\"url\": \"https://git.kernel.org/stable/c/075d7cfc4df8c54cb202ba8b28420370c03ba9b6\"}, {\"url\": \"https://git.kernel.org/stable/c/f2591660e0eb263c9415bf0d0bb1b111e62df7a4\"}, {\"url\": \"https://git.kernel.org/stable/c/dddcb0f4b7e27fac16a78ea9a1c8ec2e8a241087\"}, {\"url\": \"https://git.kernel.org/stable/c/806584a4b67a7233870c33e5b8f872e76dd02988\"}, {\"url\": \"https://git.kernel.org/stable/c/a7894e10572d53eb10109b8d07459cc8d3435811\"}, {\"url\": \"https://git.kernel.org/stable/c/6959297aaa9572783d620a226d73c3fb94494888\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nSUNRPC: harden gss_krb5_unwrap_v2 against short tokens\\n\\ngss_krb5_unwrap_v2() reads the EC and RRC header fields at ptr+4 and\\nptr+6 before validating that the token is at least GSS_KRB5_TOK_HDR_LEN\\n(16) bytes long, and its rotate_left() helper passes buf-\u003elen - base\\nto xdr_buf_subsegment() without verifying that base \u003c= buf-\u003elen. When\\na caller hands in a sub-16-byte token, or a token whose declared len\\nleaves base past the end of the buffer, three distinct failures follow:\\n\\n    gss_krb5_unwrap_v2(offset, len, buf)\\n      ptr = buf-\u003ehead[0].iov_base + offset\\n      ec  = *(ptr + 4)              /* OOB read on short head */\\n      rrc = *(ptr + 6)              /* OOB read on short head */\\n      rotate_left(offset + 16, buf, rrc)\\n        xdr_buf_subsegment(buf, \u0026subbuf,\\n                           base, buf-\u003elen - base)   /* u32 wrap when base \u003e len */\\n        _rotate_left(\u0026subbuf, shift)\\n          shift %= buf-\u003elen         /* divide-by-zero when base == len */\\n\\nAfter decryption, the cleanup arithmetic has the same shape:\\n\\n    movelen = min_t(unsigned int, buf-\u003ehead[0].iov_len, len);\\n    movelen -= offset + GSS_KRB5_TOK_HDR_LEN + headskip;\\n    BUG_ON(offset + GSS_KRB5_TOK_HDR_LEN + headskip + movelen \u003e\\n                                            buf-\u003ehead[0].iov_len);\\n\\nThe BUG_ON re-adds the value just subtracted, so it reduces to\\nmin(A, B) \u003e A and is permanently false; it cannot catch the unsigned\\nunderflow of movelen, which then drives a ~UINT_MAX-byte memmove().\\n\\nAdd four defense-in-depth guards inside the unwrap core so it is safe\\nregardless of what its callers validate:\\n\\n  - reject tokens with len - offset \u003c GSS_KRB5_TOK_HDR_LEN before\\n    touching ptr+4/ptr+6;\\n  - bail from rotate_left() when buf-\u003elen \u003c= base, covering both the\\n    underflow and zero-length cases;\\n  - return early from _rotate_left() when buf-\u003elen is zero, so the\\n    shift %= buf-\u003elen modulo cannot fault;\\n  - replace the dead BUG_ON with a live check that returns\\n    GSS_S_DEFECTIVE_TOKEN before the movelen subtraction.\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.10.270\", \"versionStartIncluding\": \"2.6.35\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.15.221\", \"versionStartIncluding\": \"2.6.35\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.1.188\", \"versionStartIncluding\": \"2.6.35\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.6.157\", \"versionStartIncluding\": \"2.6.35\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.12.109\", \"versionStartIncluding\": \"2.6.35\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.18.50\", \"versionStartIncluding\": \"2.6.35\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"7.2.4\", \"versionStartIncluding\": \"2.6.35\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"7.3\", \"versionStartIncluding\": \"2.6.35\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-10-19T08:48:33.941Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2026-89542\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-10-19T08:48:33.941Z\", \"dateReserved\": \"2026-09-11T19:38:34.722Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2026-09-11T19:44:18.931Z\", \"assignerShortName\": \"Linux\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…