CVE-2026-98491 (GCVE-0-2026-98491)
Vulnerability from cvelistv5
Published
2026-10-18 15:16
Modified
2026-10-24 14:09
Summary
In the Linux kernel, the following vulnerability has been resolved: net: openvswitch: conntrack: avoid modifying shared unconfirmed ct entry In a case where skb with an unconfirmed ct entry gets cloned, we may end up committing both but with different sets of extensions. The series of events: 1. The first clone wants to commit and runs the helpers wiring up the extension pointer into the expectation list. 2. Then it looses the confirmation keeping the entry unconfirmed. 3. Second clone now wants to commit labels and adds the new extension for that breaking the pointer in the expectation list causing UAF on the destruction path later. While this is possible to trigger, there should be no practical network pipeline where committing both clones without modifications into the same zone is needed. So, let's just reset the entry in case for some reason we got an skb with a shared one during commit. This doesn't affect any known use cases, but avoids any potential problems with sharing and modification of the unconfirmed ct entry. The fixes tag points to the introduction of helpers, since that's the main UAF trigger for the sharing.
Impacted products
Vendor Product Version
Linux Linux Version: cae3a2627520c3795b54533c5328b77af3405dbe
Version: cae3a2627520c3795b54533c5328b77af3405dbe
Version: cae3a2627520c3795b54533c5328b77af3405dbe
Version: cae3a2627520c3795b54533c5328b77af3405dbe
Version: cae3a2627520c3795b54533c5328b77af3405dbe
Version: cae3a2627520c3795b54533c5328b77af3405dbe
Version: cae3a2627520c3795b54533c5328b77af3405dbe
Version: cae3a2627520c3795b54533c5328b77af3405dbe
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "include/net/netfilter/nf_conntrack.h",
            "net/openvswitch/conntrack.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "e0fa5ea434b7e8467ef3adc64e3858b1ca2a642d",
              "status": "affected",
              "version": "cae3a2627520c3795b54533c5328b77af3405dbe",
              "versionType": "git"
            },
            {
              "lessThan": "37e3c878b183a115f9a114067f9ef3b408ad27fb",
              "status": "affected",
              "version": "cae3a2627520c3795b54533c5328b77af3405dbe",
              "versionType": "git"
            },
            {
              "lessThan": "707c2dc77891a874f4e8c52c285a511079164ec8",
              "status": "affected",
              "version": "cae3a2627520c3795b54533c5328b77af3405dbe",
              "versionType": "git"
            },
            {
              "lessThan": "de41ee24f77b0fc45397db3e277cae2adbd43dfe",
              "status": "affected",
              "version": "cae3a2627520c3795b54533c5328b77af3405dbe",
              "versionType": "git"
            },
            {
              "lessThan": "55e5256adf3940e71802e2f749cacf81518726b0",
              "status": "affected",
              "version": "cae3a2627520c3795b54533c5328b77af3405dbe",
              "versionType": "git"
            },
            {
              "lessThan": "e2829ae5459ddb5fce526b2e84697edf6c0c3cef",
              "status": "affected",
              "version": "cae3a2627520c3795b54533c5328b77af3405dbe",
              "versionType": "git"
            },
            {
              "lessThan": "457e0df1b5711fbeb7ba1b6bfd826f5ef30e7e55",
              "status": "affected",
              "version": "cae3a2627520c3795b54533c5328b77af3405dbe",
              "versionType": "git"
            },
            {
              "lessThan": "26b2bd70d22457556e2fa01cbf1192cb1a94d619",
              "status": "affected",
              "version": "cae3a2627520c3795b54533c5328b77af3405dbe",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "include/net/netfilter/nf_conntrack.h",
            "net/openvswitch/conntrack.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "4.3"
            },
            {
              "lessThan": "4.3",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.271",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.222",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.189",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.158",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.112",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.55",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.9",
              "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.271",
                  "versionStartIncluding": "4.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.222",
                  "versionStartIncluding": "4.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.189",
                  "versionStartIncluding": "4.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.158",
                  "versionStartIncluding": "4.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.112",
                  "versionStartIncluding": "4.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.55",
                  "versionStartIncluding": "4.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.9",
                  "versionStartIncluding": "4.3",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "4.3",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: openvswitch: conntrack: avoid modifying shared unconfirmed ct entry\n\nIn a case where skb with an unconfirmed ct entry gets cloned, we may\nend up committing both but with different sets of extensions.\n\nThe series of events:\n\n 1. The first clone wants to commit and runs the helpers wiring up\n    the extension pointer into the expectation list.\n 2. Then it looses the confirmation keeping the entry unconfirmed.\n 3. Second clone now wants to commit labels and adds the new extension\n    for that breaking the pointer in the expectation list causing\n    UAF on the destruction path later.\n\nWhile this is possible to trigger, there should be no practical\nnetwork pipeline where committing both clones without modifications\ninto the same zone is needed.  So, let\u0027s just reset the entry in case\nfor some reason we got an skb with a shared one during commit.  This\ndoesn\u0027t affect any known use cases, but avoids any potential problems\nwith sharing and modification of the unconfirmed ct entry.\n\nThe fixes tag points to the introduction of helpers, since that\u0027s the\nmain UAF trigger for the sharing."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - Locally supplied OVS_PACKET_CMD_EXECUTE attributes traverse ovs_packet_cmd_execute()-\u003eovs_execute_actions()-\u003eovs_ct_execute()-\u003eovs_ct_commit()-\u003e__ovs_ct_lookup(), the patched function. The required clone/CT action graph is locally configured; no routable protocol message alone creates it.\nAC:L - The attacker controls the packet clones, competing same-zone commits, helper payload, and label-setting commit; parallel repeated executes can make the helper-bearing clone lose confirmation and relocate the extension block. Both sides of the race and heap grooming are attacker-controlled.\nPR:L - dp_packet_genl_ops marks OVS_PACKET_CMD_EXECUTE with GENL_UNS_ADMIN_PERM, which genl_family_rcv_msg checks as CAP_NET_ADMIN in net-\u003euser_ns. An ordinary user can obtain that capability in a new user and network namespace, so init-namespace root is unnecessary.\nUI:N - After creating a private OVS datapath, the attacker\u2019s own Netlink execute requests and injected packets drive the clone and commit sequence; no victim must configure, open, or approve anything.\nS:U - The stale nf_conn extension pointer and resulting writes affect the same host kernel that processes the attacker\u2019s OVS actions; escalating from a user namespace into that kernel does not cross a CVSS security scope.\nC:H - nf_ct_ext_add() can krealloc and free the old block containing nf_conn_help while an expectation retains pointers into it. Reclaiming that block turns the teardown UAF into groomable kernel-object corruption that can support kernel-memory disclosure.\nI:H - nf_ct_remove_expectations() calls hlist_del_rcu(), whose __hlist_del() writes through exp-\u003elnode.pprev into freed or reused extension memory. This is attacker-groomable kernel heap corruption capable of control-flow hijacking.\nA:H - The stale pprev write during expectation destruction can corrupt a reclaimed kernel object and cause an oops or panic, taking down the host kernel."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-24T14:09:06.117Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/e0fa5ea434b7e8467ef3adc64e3858b1ca2a642d"
        },
        {
          "url": "https://git.kernel.org/stable/c/37e3c878b183a115f9a114067f9ef3b408ad27fb"
        },
        {
          "url": "https://git.kernel.org/stable/c/707c2dc77891a874f4e8c52c285a511079164ec8"
        },
        {
          "url": "https://git.kernel.org/stable/c/de41ee24f77b0fc45397db3e277cae2adbd43dfe"
        },
        {
          "url": "https://git.kernel.org/stable/c/55e5256adf3940e71802e2f749cacf81518726b0"
        },
        {
          "url": "https://git.kernel.org/stable/c/e2829ae5459ddb5fce526b2e84697edf6c0c3cef"
        },
        {
          "url": "https://git.kernel.org/stable/c/457e0df1b5711fbeb7ba1b6bfd826f5ef30e7e55"
        },
        {
          "url": "https://git.kernel.org/stable/c/26b2bd70d22457556e2fa01cbf1192cb1a94d619"
        }
      ],
      "title": "net: openvswitch: conntrack: avoid modifying shared unconfirmed ct entry",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-98491",
    "datePublished": "2026-10-18T15:16:20.069Z",
    "dateReserved": "2026-09-25T10:25:14.353Z",
    "dateUpdated": "2026-10-24T14:09:06.117Z",
    "state": "PUBLISHED"
  },
  "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…