CVE-2026-93250 (GCVE-0-2026-93250)
Vulnerability from cvelistv5 – Published: 2026-09-24 15:51 – Updated: 2026-10-19 09:08| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Linux | Linux |
Affected:
a3a48de5eade770e911d35291217bdd69ce04ef1 , < f8a9b988e7a7bc674e74e8c901794d792c35689e
(git)
Affected: a3a48de5eade770e911d35291217bdd69ce04ef1 , < c7dc26d06f90ca11bbd6114f6a62a67d038816c7 (git) Affected: a3a48de5eade770e911d35291217bdd69ce04ef1 , < 3e6b705bc162fc7257645725a7d2cf6c71250318 (git) Affected: a3a48de5eade770e911d35291217bdd69ce04ef1 , < f26400b325bdc2868e40612c4804c82cf8ba6275 (git) Affected: a3a48de5eade770e911d35291217bdd69ce04ef1 , < bc2dc66a6693a78f8c1e6ca2dbebd50f16e2c366 (git) |
guessed | |
| Linux | Linux |
Affected:
6.4
Unaffected: 0 , < 6.4 (semver) Unaffected: 6.6.157 , ≤ 6.6.* (semver) Unaffected: 6.12.110 , ≤ 6.12.* (semver) Unaffected: 6.18.52 , ≤ 6.18.* (semver) Unaffected: 7.2.6 , ≤ 7.2.* (semver) Unaffected: 7.3 , ≤ * (original_commit_for_fix) |
guessed |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/net/vxlan/vxlan_mdb.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "f8a9b988e7a7bc674e74e8c901794d792c35689e",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
},
{
"lessThan": "c7dc26d06f90ca11bbd6114f6a62a67d038816c7",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
},
{
"lessThan": "3e6b705bc162fc7257645725a7d2cf6c71250318",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
},
{
"lessThan": "f26400b325bdc2868e40612c4804c82cf8ba6275",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
},
{
"lessThan": "bc2dc66a6693a78f8c1e6ca2dbebd50f16e2c366",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/net/vxlan/vxlan_mdb.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.4"
},
{
"lessThan": "6.4",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.157",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.110",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.52",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.6",
"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": "6.6.157",
"versionStartIncluding": "6.4",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.110",
"versionStartIncluding": "6.4",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.52",
"versionStartIncluding": "6.4",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.6",
"versionStartIncluding": "6.4",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3",
"versionStartIncluding": "6.4",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nvxlan: mdb: Fix use-after-free in vxlan_mdb_flush()\n\nvxlan_mdb_flush() iterates over the MDB entries using\nhlist_for_each_entry_safe(), which only tolerates the removal of the\ncurrent entry. Contrary to the comment above the loop, the removal of an\nentry can trigger the removal of another entry.\n\nFlushing the remotes of a (*, G) entry also removes the (S, G) entries\nthat were created for its source list, once they are left without\nremotes:\n\nvxlan_mdb_remotes_flush()\n-\u003e vxlan_mdb_remote_del()\n -\u003e vxlan_mdb_remote_srcs_del()\n -\u003e vxlan_mdb_remote_src_del()\n -\u003e vxlan_mdb_remote_src_fwd_del()\n -\u003e __vxlan_mdb_del()\n -\u003e vxlan_mdb_entry_put()\n\nSuch an entry can be located after the (*, G) entry in the list, as\nvxlan_mdb_entry_get() returns an existing entry without moving it to the\nhead of the list. This order is obtained by adding the (S, G) entry\nbefore the (*, G) entry, the latter with NLM_F_REPLACE, as the addition\nof the source otherwise fails with -EEXIST. The (S, G) entry is then the\nentry saved by hlist_for_each_entry_safe() and it is freed while the\n(*, G) entry is processed. The next iteration calls hlist_del() on it\nagain, writing LIST_POISON1 to LIST_POISON2 [1].\n\nBesides device deletion, the flush is also reachable from RTM_DELMDB\nwith NLM_F_BULK.\n\nFix by re-reading the next entry after the remotes were flushed. The\ncurrent entry cannot be removed by this flush, as source lists can only\nbe configured on (*, G) entries and the removed entries are (S, G)\nentries. It is therefore still linked and its next pointer reflects the\nremovals.\n\n[1]\nBUG: KASAN: wild-memory-access in vxlan_mdb_entry_put.part.0+0x328/0x588\nWrite of size 8 at addr dead000000000122 by task ip/327\n\nCPU: 3 UID: 1000 PID: 327 Comm: ip Not tainted 7.2.0-rc7 #2 PREEMPT\nCall trace:\n vxlan_mdb_entry_put.part.0+0x328/0x588\n vxlan_mdb_flush+0x1d8/0x25c\n vxlan_mdb_fini+0x8c/0x100\n vxlan_uninit+0x1c/0x7c\n unregister_netdevice_many_notify+0x954/0xd4c\n rtnl_dellink+0x210/0x530\n rtnetlink_rcv_msg+0x434/0x4d0\n netlink_rcv_skb+0xc4/0x204\n rtnetlink_rcv+0x18/0x24\n netlink_unicast+0x4b8/0x548\n netlink_sendmsg+0x29c/0x560\n ____sys_sendmsg+0x390/0x3ec\n ___sys_sendmsg+0x114/0x188\n __sys_sendmsg+0xf0/0x178\n __arm64_sys_sendmsg+0x48/0x60\n invoke_syscall.constprop.0+0x58/0x180\n el0_svc_common.constprop.0+0x74/0x140\n do_el0_svc+0x30/0x40\n el0_svc+0x38/0x98\n el0t_64_sync_handler+0xa0/0xe4\n el0t_64_sync+0x198/0x19c"
}
],
"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 - The UAF is in vxlan_mdb_flush(), reached from local NETLINK_ROUTE sendmsg via rtnl_dellink\u2192vxlan_uninit\u2192vxlan_mdb_fini, or rtnl_mdb_del(RTM_DELMDB|NLM_F_BULK)\u2192vxlan_mdb_del_bulk. Received VXLAN UDP uses vxlan_mdb_entry_skb_get/vxlan_mdb_xmit and never calls flush, so the trigger is the netlink control message, not a peer packet.\nAC:L - The attacker builds the bad mdb_list order themselves: RTM_NEWMDB adds an (S,G) entry, then RTM_NEWMDB with NLM_F_REPLACE adds a (*,G) whose source list reuses that (S,G) via vxlan_mdb_entry_get() without moving it to the list head, then RTM_DELLINK or RTM_DELMDB|NLM_F_BULK runs vxlan_mdb_flush(). No race or victim-side state is required.\nPR:L - rtnetlink_rcv_msg requires netlink_net_capable(CAP_NET_ADMIN) for RTM_NEWLINK/RTM_NEWMDB/RTM_DELMDB/RTM_DELLINK, i.e. CAP_NET_ADMIN in the socket netns user_ns, obtained via unshare -Urn. vxlan_link_ops has no extra capability gate, and the KASAN trace ran as UID 1000 (ip).\nUI:N - The attacker issues their own rtnetlink messages to create the vxlan, add the (S,G) then (*,G) MDB entries, and trigger vxlan_mdb_flush() via RTM_DELLINK or RTM_DELMDB NLM_F_BULK; no victim mount, click, or other action is required.\nS:U - The freed object is a kmalloc\u0027d vxlan_mdb_entry processed under RTNL in the same kernel that handled the netlink command; impact is host-kernel memory corruption, not a VM escape, IOMMU bypass, or other changed-scope boundary.\nC:H - vxlan_mdb_entry_put() kfree_rcu\u0027s the (S,G) vxlan_mdb_entry while hlist_for_each_entry_safe() still holds it in tmp; the next vxlan_mdb_flush() iteration then reads that slab object (key.vni and remotes). After RCU reclaim the same kmalloc slot can be sprayed for an arbitrary kernel read.\nI:H - The stale tmp then re-enters vxlan_mdb_entry_put(), which hlist_del()s the already-unlinked mdb_node (WRITE_ONCE through LIST_POISON2 or a sprayed pprev) and would kfree_rcu the same vxlan_mdb_entry twice, giving a slab double-free write primitive.\nA:H - KASAN reports a wild-memory-access 8-byte write to LIST_POISON2 (dead000000000122) in vxlan_mdb_entry_put() from vxlan_mdb_flush() during rtnl_dellink of the vxlan, which oopses the kernel."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T09:08:03.974Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/f8a9b988e7a7bc674e74e8c901794d792c35689e"
},
{
"url": "https://git.kernel.org/stable/c/c7dc26d06f90ca11bbd6114f6a62a67d038816c7"
},
{
"url": "https://git.kernel.org/stable/c/3e6b705bc162fc7257645725a7d2cf6c71250318"
},
{
"url": "https://git.kernel.org/stable/c/f26400b325bdc2868e40612c4804c82cf8ba6275"
},
{
"url": "https://git.kernel.org/stable/c/bc2dc66a6693a78f8c1e6ca2dbebd50f16e2c366"
}
],
"title": "vxlan: mdb: Fix use-after-free in vxlan_mdb_flush()",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-93250",
"datePublished": "2026-09-24T15:51:15.108Z",
"dateReserved": "2026-09-17T16:02:15.096Z",
"dateUpdated": "2026-10-19T09:08:03.974Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-93250",
"date": "2026-11-14",
"epss": "0.00163",
"percentile": "0.0559"
},
"microsoft_vex": {
"current_release_date": "2026-09-28T03:58:49.000Z",
"cve": "CVE-2026-93250",
"id": "msrc_CVE-2026-93250",
"initial_release_date": "2026-09-28T03:58:49.000Z",
"product_status:known_affected": "1",
"source": "Microsoft CSAF VEX",
"status": "final",
"title": "vxlan: mdb: Fix use-after-free in vxlan_mdb_flush()",
"url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-93250.json",
"version": "1"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/net/vxlan/vxlan_mdb.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "f8a9b988e7a7bc674e74e8c901794d792c35689e",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
},
{
"lessThan": "c7dc26d06f90ca11bbd6114f6a62a67d038816c7",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
},
{
"lessThan": "3e6b705bc162fc7257645725a7d2cf6c71250318",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
},
{
"lessThan": "f26400b325bdc2868e40612c4804c82cf8ba6275",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
},
{
"lessThan": "bc2dc66a6693a78f8c1e6ca2dbebd50f16e2c366",
"status": "affected",
"version": "a3a48de5eade770e911d35291217bdd69ce04ef1",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/net/vxlan/vxlan_mdb.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.4"
},
{
"lessThan": "6.4",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.157",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.110",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.52",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.6",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"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\nvxlan: mdb: Fix use-after-free in vxlan_mdb_flush()\n\nvxlan_mdb_flush() iterates over the MDB entries using\nhlist_for_each_entry_safe(), which only tolerates the removal of the\ncurrent entry. Contrary to the comment above the loop, the removal of an\nentry can trigger the removal of another entry.\n\nFlushing the remotes of a (*, G) entry also removes the (S, G) entries\nthat were created for its source list, once they are left without\nremotes:\n\nvxlan_mdb_remotes_flush()\n-\u003e vxlan_mdb_remote_del()\n -\u003e vxlan_mdb_remote_srcs_del()\n -\u003e vxlan_mdb_remote_src_del()\n -\u003e vxlan_mdb_remote_src_fwd_del()\n -\u003e __vxlan_mdb_del()\n -\u003e vxlan_mdb_entry_put()\n\nSuch an entry can be located after the (*, G) entry in the list, as\nvxlan_mdb_entry_get() returns an existing entry without moving it to the\nhead of the list. This order is obtained by adding the (S, G) entry\nbefore the (*, G) entry, the latter with NLM_F_REPLACE, as the addition\nof the source otherwise fails with -EEXIST. The (S, G) entry is then the\nentry saved by hlist_for_each_entry_safe() and it is freed while the\n(*, G) entry is processed. The next iteration calls hlist_del() on it\nagain, writing LIST_POISON1 to LIST_POISON2 [1].\n\nBesides device deletion, the flush is also reachable from RTM_DELMDB\nwith NLM_F_BULK.\n\nFix by re-reading the next entry after the remotes were flushed. The\ncurrent entry cannot be removed by this flush, as source lists can only\nbe configured on (*, G) entries and the removed entries are (S, G)\nentries. It is therefore still linked and its next pointer reflects the\nremovals.\n\n[1]\nBUG: KASAN: wild-memory-access in vxlan_mdb_entry_put.part.0+0x328/0x588\nWrite of size 8 at addr dead000000000122 by task ip/327\n\nCPU: 3 UID: 1000 PID: 327 Comm: ip Not tainted 7.2.0-rc7 #2 PREEMPT\nCall trace:\n vxlan_mdb_entry_put.part.0+0x328/0x588\n vxlan_mdb_flush+0x1d8/0x25c\n vxlan_mdb_fini+0x8c/0x100\n vxlan_uninit+0x1c/0x7c\n unregister_netdevice_many_notify+0x954/0xd4c\n rtnl_dellink+0x210/0x530\n rtnetlink_rcv_msg+0x434/0x4d0\n netlink_rcv_skb+0xc4/0x204\n rtnetlink_rcv+0x18/0x24\n netlink_unicast+0x4b8/0x548\n netlink_sendmsg+0x29c/0x560\n ____sys_sendmsg+0x390/0x3ec\n ___sys_sendmsg+0x114/0x188\n __sys_sendmsg+0xf0/0x178\n __arm64_sys_sendmsg+0x48/0x60\n invoke_syscall.constprop.0+0x58/0x180\n el0_svc_common.constprop.0+0x74/0x140\n do_el0_svc+0x30/0x40\n el0_svc+0x38/0x98\n el0t_64_sync_handler+0xa0/0xe4\n el0t_64_sync+0x198/0x19c"
}
],
"id": "CVE-2026-93250",
"lastModified": "2026-10-19T10:17:16.213",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "LOCAL",
"availabilityImpact": "HIGH",
"baseScore": 7.8,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"exploitabilityScore": 1.8,
"impactScore": 5.9,
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"type": "Secondary"
}
]
},
"published": "2026-09-24T16:17:21.187",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/3e6b705bc162fc7257645725a7d2cf6c71250318"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/bc2dc66a6693a78f8c1e6ca2dbebd50f16e2c366"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/c7dc26d06f90ca11bbd6114f6a62a67d038816c7"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/f26400b325bdc2868e40612c4804c82cf8ba6275"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/f8a9b988e7a7bc674e74e8c901794d792c35689e"
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"vulnStatus": "Received"
}
},
"redhat_vex": {
"aggregate_severity": "Moderate",
"current_release_date": "2026-11-06T02:06:08+00:00",
"cve": "CVE-2026-93250",
"id": "CVE-2026-93250",
"initial_release_date": "2026-09-24T00:00:00+00:00",
"product_status:known_affected": "110",
"product_status:known_not_affected": "93",
"source": "Red Hat CSAF VEX",
"status": "final",
"title": "kernel: vxlan: mdb: Fix use-after-free in vxlan_mdb_flush()",
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-93250.json",
"version": "3"
}
}
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
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.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
How durations are calculated
Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.
Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
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.