{"api_version":"1","generated_at":"2026-10-25T16:28:26+00:00","cve":"CVE-2026-98491","urls":{"html":"https://cve.report/CVE-2026-98491","api":"https://cve.report/api/cve/CVE-2026-98491.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-98491","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-98491"},"summary":{"title":"net: openvswitch: conntrack: avoid modifying shared unconfirmed ct entry","description":"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's just reset the entry in case\nfor some reason we got an skb with a shared one during commit.  This\ndoesn't 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's the\nmain UAF trigger for the sharing.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-10-18 16:17:00","updated_at":"2026-10-24 14:16:44"},"problem_types":[],"metrics":[{"version":"3.1","source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","score":"7.8","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"}},{"version":"3.1","source":"CNA","type":"DECLARED","score":"7.8","severity":"HIGH","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","data":{"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"}}],"references":[{"url":"https://git.kernel.org/stable/c/707c2dc77891a874f4e8c52c285a511079164ec8","name":"https://git.kernel.org/stable/c/707c2dc77891a874f4e8c52c285a511079164ec8","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/457e0df1b5711fbeb7ba1b6bfd826f5ef30e7e55","name":"https://git.kernel.org/stable/c/457e0df1b5711fbeb7ba1b6bfd826f5ef30e7e55","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/e0fa5ea434b7e8467ef3adc64e3858b1ca2a642d","name":"https://git.kernel.org/stable/c/e0fa5ea434b7e8467ef3adc64e3858b1ca2a642d","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/55e5256adf3940e71802e2f749cacf81518726b0","name":"https://git.kernel.org/stable/c/55e5256adf3940e71802e2f749cacf81518726b0","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/e2829ae5459ddb5fce526b2e84697edf6c0c3cef","name":"https://git.kernel.org/stable/c/e2829ae5459ddb5fce526b2e84697edf6c0c3cef","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/37e3c878b183a115f9a114067f9ef3b408ad27fb","name":"https://git.kernel.org/stable/c/37e3c878b183a115f9a114067f9ef3b408ad27fb","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/26b2bd70d22457556e2fa01cbf1192cb1a94d619","name":"https://git.kernel.org/stable/c/26b2bd70d22457556e2fa01cbf1192cb1a94d619","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/de41ee24f77b0fc45397db3e277cae2adbd43dfe","name":"https://git.kernel.org/stable/c/de41ee24f77b0fc45397db3e277cae2adbd43dfe","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-98491","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98491","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cae3a2627520c3795b54533c5328b77af3405dbe e0fa5ea434b7e8467ef3adc64e3858b1ca2a642d git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cae3a2627520c3795b54533c5328b77af3405dbe 37e3c878b183a115f9a114067f9ef3b408ad27fb git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cae3a2627520c3795b54533c5328b77af3405dbe 707c2dc77891a874f4e8c52c285a511079164ec8 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cae3a2627520c3795b54533c5328b77af3405dbe de41ee24f77b0fc45397db3e277cae2adbd43dfe git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cae3a2627520c3795b54533c5328b77af3405dbe 55e5256adf3940e71802e2f749cacf81518726b0 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cae3a2627520c3795b54533c5328b77af3405dbe e2829ae5459ddb5fce526b2e84697edf6c0c3cef git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cae3a2627520c3795b54533c5328b77af3405dbe 457e0df1b5711fbeb7ba1b6bfd826f5ef30e7e55 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected cae3a2627520c3795b54533c5328b77af3405dbe 26b2bd70d22457556e2fa01cbf1192cb1a94d619 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 4.3","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 4.3 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 5.10.271 5.10.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 5.15.222 5.15.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.1.189 6.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.6.158 6.6.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.112 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.55 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2.9 7.2.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.3 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"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's just reset the entry in case\nfor some reason we got an skb with a shared one during commit.  This\ndoesn't 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's 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()->ovs_execute_actions()->ovs_ct_execute()->ovs_ct_commit()->__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->user_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’s 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’s 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->lnode.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"},"nvd":{"publishedDate":"2026-10-18 16:17:00","lastModifiedDate":"2026-10-24 14:16:44","problem_types":[],"metrics":{"cvssMetricV31":[{"source":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"},"exploitabilityScore":1.8,"impactScore":5.9}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"98491","Ordinal":"1","Title":"net: openvswitch: conntrack: avoid modifying shared unconfirmed ","CVE":"CVE-2026-98491","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"98491","Ordinal":"1","NoteData":"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's just reset the entry in case\nfor some reason we got an skb with a shared one during commit.  This\ndoesn't 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's the\nmain UAF trigger for the sharing.","Type":"Description","Title":"net: openvswitch: conntrack: avoid modifying shared unconfirmed "}]}}}