CVE-2026-72407 (GCVE-0-2026-72407)

Vulnerability from cvelistv5 – Published: 2026-08-15 05:56 – Updated: 2026-08-17 05:43
VLAI
Title
geneve: validate inner network offset in geneve_gro_complete()
Summary
In the Linux kernel, the following vulnerability has been resolved: geneve: validate inner network offset in geneve_gro_complete() Even with both paths gated on gs->gro_hint, geneve_gro_complete() re-derives the inner dispatch type and length from the packet and the current gs->gro_hint, independently of geneve_gro_receive(). The two can disagree if gs->gro_hint flips under a concurrent geneve_quiesce()/ geneve_unquiesce() (sk_user_data is NULL across a synchronize_net()), or if the re-read option bytes differ from the ones receive parsed. geneve_gro_receive() already records the inner network header position in NAPI_GRO_CB()->inner_network_offset. Have geneve_gro_complete() compute the offset it is about to dispatch at, adding ETH_HLEN in the ETH_P_TEB case where eth_gro_complete() steps over the inner MAC header, and bail out if it lands past inner_network_offset. Use a lower bound rather than exact equality: between gh_len and the inner L3 header, geneve_gro_receive() may also have pulled an inner VLAN tag (vlan_gro_receive() advances the recorded offset past it), which only moves inner_network_offset further out. A valid frame therefore always satisfies inner_nh <= inner_network_offset, while a gh_len inflated by a hint gro_receive() did not honour dispatches past the validated inner header, i.e. the out-of-bounds completion. Only the latter is rejected.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: fd0dd796576e1a560e1441e665810129f0a82be0 , < e2087447f562692ff0cd08a0554d8d4ad083aa5c (git)
Affected: fd0dd796576e1a560e1441e665810129f0a82be0 , < cbb0d30a1ad6fc9439b1dc9b4f5a7a9140d3b11f (git)
guessed Create a notification for this product.
Linux Linux Affected: 7.0
Unaffected: 0 , < 7.0 (semver)
Unaffected: 7.1.5 , ≤ 7.1.* (semver)
Unaffected: 7.2 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/net/geneve.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "e2087447f562692ff0cd08a0554d8d4ad083aa5c",
              "status": "affected",
              "version": "fd0dd796576e1a560e1441e665810129f0a82be0",
              "versionType": "git"
            },
            {
              "lessThan": "cbb0d30a1ad6fc9439b1dc9b4f5a7a9140d3b11f",
              "status": "affected",
              "version": "fd0dd796576e1a560e1441e665810129f0a82be0",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/net/geneve.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "7.0"
            },
            {
              "lessThan": "7.0",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.1.*",
              "status": "unaffected",
              "version": "7.1.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1.5",
                  "versionStartIncluding": "7.0",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2",
                  "versionStartIncluding": "7.0",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ngeneve: validate inner network offset in geneve_gro_complete()\n\nEven with both paths gated on gs-\u003egro_hint, geneve_gro_complete()\nre-derives the inner dispatch type and length from the packet and the\ncurrent gs-\u003egro_hint, independently of geneve_gro_receive(). The two can\ndisagree if gs-\u003egro_hint flips under a concurrent geneve_quiesce()/\ngeneve_unquiesce() (sk_user_data is NULL across a synchronize_net()), or if\nthe re-read option bytes differ from the ones receive parsed.\n\ngeneve_gro_receive() already records the inner network header position in\nNAPI_GRO_CB()-\u003einner_network_offset. Have geneve_gro_complete() compute the\noffset it is about to dispatch at, adding ETH_HLEN in the ETH_P_TEB case\nwhere eth_gro_complete() steps over the inner MAC header, and bail out if\nit lands past inner_network_offset.\n\nUse a lower bound rather than exact equality: between gh_len and the inner\nL3 header, geneve_gro_receive() may also have pulled an inner VLAN tag\n(vlan_gro_receive() advances the recorded offset past it), which only moves\ninner_network_offset further out. A valid frame therefore always satisfies\ninner_nh \u003c= inner_network_offset, while a gh_len inflated by a hint\ngro_receive() did not honour dispatches past the validated inner header,\ni.e. the out-of-bounds completion. Only the latter is rejected."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 10,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - The bug is in geneve_gro_complete() on the NAPI GRO receive path for UDP-encapsulated GENEVE frames; a remote peer can deliver crafted packets to a listening GENEVE UDP port on cloud/overlay hosts without local access.\nAC:L - An attacker can reliably trigger the mismatch by flooding GRO-eligible GENEVE frames with crafted GRO-hint options and timing them against geneve_quiesce()/geneve_unquiesce() during changelink, or self-trigger that race with CAP_NET_ADMIN in a user namespace.\nPR:N - Exploitation requires no credentials or capabilities on the victim; the attacker only needs network reachability to a host already running a gro_hint-enabled GENEVE tunnel, which is common on overlay networks.\nUI:N - Exploitation is fully automated through malicious network traffic and does not require any victim user action such as mounting filesystems or opening files.\nS:C - On cloud/overlay deployments a tenant VM or remote overlay peer can corrupt the hypervisor/host kernel through underlay GENEVE GRO processing, crossing the guest/host security boundary.\nC:H - When gro_complete() dispatches past inner_network_offset, eth_gro_complete() and inet_gro_complete() read headers from attacker-influenced out-of-bounds skb memory, enabling arbitrary kernel memory disclosure.\nI:H - The same out-of-bounds gro_complete dispatch writes header fields (e.g., iph-\u003etot_len and iph-\u003echeck in inet_gro_complete()), causing memory corruption that can be leveraged for arbitrary write or code execution.\nA:H - Out-of-bounds GRO completion can cause kernel oops/panic or forced skb drop under error paths, enabling repeatable remote denial of service against the host."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-17T05:43:47.398Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/e2087447f562692ff0cd08a0554d8d4ad083aa5c"
        },
        {
          "url": "https://git.kernel.org/stable/c/cbb0d30a1ad6fc9439b1dc9b4f5a7a9140d3b11f"
        }
      ],
      "title": "geneve: validate inner network offset in geneve_gro_complete()",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-72407",
    "datePublished": "2026-08-15T05:56:30.847Z",
    "dateReserved": "2026-08-09T03:40:39.926Z",
    "dateUpdated": "2026-08-17T05:43:47.398Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-72407",
      "date": "2026-09-21",
      "epss": "0.00516",
      "percentile": "0.42776"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/net/geneve.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "e2087447f562692ff0cd08a0554d8d4ad083aa5c",
                    "status": "affected",
                    "version": "fd0dd796576e1a560e1441e665810129f0a82be0",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "cbb0d30a1ad6fc9439b1dc9b4f5a7a9140d3b11f",
                    "status": "affected",
                    "version": "fd0dd796576e1a560e1441e665810129f0a82be0",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/net/geneve.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "7.0"
                  },
                  {
                    "lessThan": "7.0",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.1.*",
                    "status": "unaffected",
                    "version": "7.1.5",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.2",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ngeneve: validate inner network offset in geneve_gro_complete()\n\nEven with both paths gated on gs-\u003egro_hint, geneve_gro_complete()\nre-derives the inner dispatch type and length from the packet and the\ncurrent gs-\u003egro_hint, independently of geneve_gro_receive(). The two can\ndisagree if gs-\u003egro_hint flips under a concurrent geneve_quiesce()/\ngeneve_unquiesce() (sk_user_data is NULL across a synchronize_net()), or if\nthe re-read option bytes differ from the ones receive parsed.\n\ngeneve_gro_receive() already records the inner network header position in\nNAPI_GRO_CB()-\u003einner_network_offset. Have geneve_gro_complete() compute the\noffset it is about to dispatch at, adding ETH_HLEN in the ETH_P_TEB case\nwhere eth_gro_complete() steps over the inner MAC header, and bail out if\nit lands past inner_network_offset.\n\nUse a lower bound rather than exact equality: between gh_len and the inner\nL3 header, geneve_gro_receive() may also have pulled an inner VLAN tag\n(vlan_gro_receive() advances the recorded offset past it), which only moves\ninner_network_offset further out. A valid frame therefore always satisfies\ninner_nh \u003c= inner_network_offset, while a gh_len inflated by a hint\ngro_receive() did not honour dispatches past the validated inner header,\ni.e. the out-of-bounds completion. Only the latter is rejected."
          }
        ],
        "id": "CVE-2026-72407",
        "lastModified": "2026-08-17T06:19:07.453",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "HIGH",
                "baseScore": 10.0,
                "baseSeverity": "CRITICAL",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "NONE",
                "scope": "CHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 3.9,
              "impactScore": 6.0,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-08-15T06:22:14.300",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/cbb0d30a1ad6fc9439b1dc9b4f5a7a9140d3b11f"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/e2087447f562692ff0cd08a0554d8d4ad083aa5c"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-08-19T17:41:32+00:00",
      "cve": "CVE-2026-72407",
      "id": "CVE-2026-72407",
      "initial_release_date": "2026-08-15T00:00:00+00:00",
      "product_status:known_affected": "76",
      "product_status:known_not_affected": "198",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: geneve: validate inner network offset in geneve_gro_complete()",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-72407.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "important",
      "current_release_date": "2026-09-15T01:26:06Z",
      "cve": "CVE-2026-72407",
      "id": "CVE-2026-72407",
      "initial_release_date": "2026-08-26T01:14:39Z",
      "product_status:known_affected": "123",
      "product_status:known_not_affected": "239",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-72407",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-72407.json",
      "version": "6"
    }
  }
}



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…