CVE-2026-74748 (GCVE-0-2026-74748)
Vulnerability from cvelistv5
Published
2026-08-26 14:36
Modified
2026-08-27 05:01
Severity ?
VLAI Severity ?
EPSS score ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
netfilter: ipset: fix refcount race between list:set GC and swap
__ip_set_put_byindex() resolved the index to a set pointer under RCU,
then took ip_set_ref_lock in __ip_set_put() to decrement set->ref.
ip_set_swap() holds that same lock while swapping both the ip_set_list
slots and the two sets' ref counters, so it can interleave between the
dereference and the lock acquisition, leaving the caller to decrement a
set whose reference already moved to the other index and hit
BUG_ON(set->ref == 0). list_set_gc() reaches this from timer softirq,
which the nfnl mutex does not serialize against swap: an expiring
list:set member calls list_set_del() -> ip_set_put_byindex() while
IPSET_CMD_SWAP runs on the referenced sets.
Resolve the index and decrement under ip_set_ref_lock, as ip_set_swap()
already does, keeping the refcount tied to the index rather than to a
stale set pointer.
kernel BUG at net/netfilter/ipset/ip_set_core.c:685!
Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
RIP: 0010:ip_set_put_byindex (net/netfilter/ipset/ip_set_core.c:870)
Call Trace:
<IRQ>
list_set_del (net/netfilter/ipset/ip_set_list_set.c:159)
set_cleanup_entries (net/netfilter/ipset/ip_set_list_set.c:181)
list_set_gc (net/netfilter/ipset/ip_set_list_set.c:578)
call_timer_fn (kernel/time/timer.c:1748)
__run_timers (kernel/time/timer.c:1799 kernel/time/timer.c:2374)
run_timer_softirq (kernel/time/timer.c:2405)
</IRQ>
Kernel panic - not syncing: Fatal exception in interrupt
References
Impacted products
| Vendor | Product | Version | ||
|---|---|---|---|---|
| Linux | Linux |
Version: 9076aea76538556224e7d73ab718f8841330818a Version: 9076aea76538556224e7d73ab718f8841330818a Version: 9076aea76538556224e7d73ab718f8841330818a Version: 9076aea76538556224e7d73ab718f8841330818a Version: 9076aea76538556224e7d73ab718f8841330818a Version: 9076aea76538556224e7d73ab718f8841330818a Version: 9076aea76538556224e7d73ab718f8841330818a Version: 9076aea76538556224e7d73ab718f8841330818a |
||
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"net/netfilter/ipset/ip_set_core.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "97a01de0c6321b7210d30d0a4d60f10f561097c7",
"status": "affected",
"version": "9076aea76538556224e7d73ab718f8841330818a",
"versionType": "git"
},
{
"lessThan": "c21afc7c216a4d257a4f3f300e0791890bc846b9",
"status": "affected",
"version": "9076aea76538556224e7d73ab718f8841330818a",
"versionType": "git"
},
{
"lessThan": "b0aab9dd1a348b99d75ff52765719d0cc2050630",
"status": "affected",
"version": "9076aea76538556224e7d73ab718f8841330818a",
"versionType": "git"
},
{
"lessThan": "b891e7a6bb06e0f6560e5932665ac660acd12225",
"status": "affected",
"version": "9076aea76538556224e7d73ab718f8841330818a",
"versionType": "git"
},
{
"lessThan": "20cb13a523f0a05cb2d0a7d72abae687683712e0",
"status": "affected",
"version": "9076aea76538556224e7d73ab718f8841330818a",
"versionType": "git"
},
{
"lessThan": "cb20da33839f28f590c99f16bafaa6151451c0e8",
"status": "affected",
"version": "9076aea76538556224e7d73ab718f8841330818a",
"versionType": "git"
},
{
"lessThan": "24ffcb1e1688c55fd2a505f064295cd28eac546d",
"status": "affected",
"version": "9076aea76538556224e7d73ab718f8841330818a",
"versionType": "git"
},
{
"lessThan": "0c88868271653537ed443272dd8e7d13634d214b",
"status": "affected",
"version": "9076aea76538556224e7d73ab718f8841330818a",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"net/netfilter/ipset/ip_set_core.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "3.8"
},
{
"lessThan": "3.8",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"version": "5.10.266",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"version": "5.15.217",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.184",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.153",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.105",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.46",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.1.*",
"status": "unaffected",
"version": "7.1.10",
"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": "5.10.266",
"versionStartIncluding": "3.8",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "5.15.217",
"versionStartIncluding": "3.8",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.1.184",
"versionStartIncluding": "3.8",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.6.153",
"versionStartIncluding": "3.8",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.105",
"versionStartIncluding": "3.8",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.46",
"versionStartIncluding": "3.8",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.1.10",
"versionStartIncluding": "3.8",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2",
"versionStartIncluding": "3.8",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: ipset: fix refcount race between list:set GC and swap\n\n__ip_set_put_byindex() resolved the index to a set pointer under RCU,\nthen took ip_set_ref_lock in __ip_set_put() to decrement set-\u003eref.\nip_set_swap() holds that same lock while swapping both the ip_set_list\nslots and the two sets\u0027 ref counters, so it can interleave between the\ndereference and the lock acquisition, leaving the caller to decrement a\nset whose reference already moved to the other index and hit\nBUG_ON(set-\u003eref == 0). list_set_gc() reaches this from timer softirq,\nwhich the nfnl mutex does not serialize against swap: an expiring\nlist:set member calls list_set_del() -\u003e ip_set_put_byindex() while\nIPSET_CMD_SWAP runs on the referenced sets.\n\nResolve the index and decrement under ip_set_ref_lock, as ip_set_swap()\nalready does, keeping the refcount tied to the index rather than to a\nstale set pointer.\n\n kernel BUG at net/netfilter/ipset/ip_set_core.c:685!\n Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI\n RIP: 0010:ip_set_put_byindex (net/netfilter/ipset/ip_set_core.c:870)\n Call Trace:\n \u003cIRQ\u003e\n list_set_del (net/netfilter/ipset/ip_set_list_set.c:159)\n set_cleanup_entries (net/netfilter/ipset/ip_set_list_set.c:181)\n list_set_gc (net/netfilter/ipset/ip_set_list_set.c:578)\n call_timer_fn (kernel/time/timer.c:1748)\n __run_timers (kernel/time/timer.c:1799 kernel/time/timer.c:2374)\n run_timer_softirq (kernel/time/timer.c:2405)\n \u003c/IRQ\u003e\n Kernel panic - not syncing: Fatal exception in interrupt"
}
],
"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 - Exploitation requires issuing IPSET_CMD_SWAP over the NETLINK_NETFILTER socket; nfnetlink is a local userspace-to-kernel control interface, not reachable by remote network packets.\nAC:L - An attacker with CAP_NET_ADMIN controls both sides of the race by creating a timeout-enabled list:set, timing member expiry to drive list_set_gc(), and repeatedly issuing IPSET_CMD_SWAP to interleave with the GC softirq.\nPR:L - IPSET_CMD_SWAP is gated by netlink_net_capable(skb, CAP_NET_ADMIN); CAP_NET_ADMIN is obtainable by unprivileged users inside a user namespace (unshare -Urn), so real init-namespace root is not required.\nUI:N - Triggering the refcount race requires only attacker-controlled netlink commands and timer-driven GC; no victim user action such as opening files or mounting filesystems is needed.\nS:U - The impact is a kernel BUG/panic and potential memory-safety corruption within the same kernel security domain; it does not cross a VM, container, or IOMMU boundary to affect a separate security authority.\nC:H - The refcount race between list_set_gc and ip_set_swap can corrupt set lifetime management; stale pointer decrements can leave sets with incorrect refcounts, enabling use-after-free and arbitrary kernel memory disclosure.\nI:H - Incorrect refcount decrements on stale set pointers can free ip_set objects while still referenced in ip_set_list, providing heap reuse primitives that could be leveraged for arbitrary kernel memory corruption or code execution.\nA:H - The demonstrated failure path hits BUG_ON(set-\u003eref == 0) in timer softirq during list_set_gc, producing a fatal kernel oops and panic that crashes the entire system."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-27T05:01:09.517Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/97a01de0c6321b7210d30d0a4d60f10f561097c7"
},
{
"url": "https://git.kernel.org/stable/c/c21afc7c216a4d257a4f3f300e0791890bc846b9"
},
{
"url": "https://git.kernel.org/stable/c/b0aab9dd1a348b99d75ff52765719d0cc2050630"
},
{
"url": "https://git.kernel.org/stable/c/b891e7a6bb06e0f6560e5932665ac660acd12225"
},
{
"url": "https://git.kernel.org/stable/c/20cb13a523f0a05cb2d0a7d72abae687683712e0"
},
{
"url": "https://git.kernel.org/stable/c/cb20da33839f28f590c99f16bafaa6151451c0e8"
},
{
"url": "https://git.kernel.org/stable/c/24ffcb1e1688c55fd2a505f064295cd28eac546d"
},
{
"url": "https://git.kernel.org/stable/c/0c88868271653537ed443272dd8e7d13634d214b"
}
],
"title": "netfilter: ipset: fix refcount race between list:set GC and swap",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-74748",
"datePublished": "2026-08-26T14:36:57.164Z",
"dateReserved": "2026-08-15T05:44:03.931Z",
"dateUpdated": "2026-08-27T05:01:09.517Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
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…