{"api_version":"1","generated_at":"2026-08-31T13:51:00+00:00","cve":"CVE-2026-74748","urls":{"html":"https://cve.report/CVE-2026-74748","api":"https://cve.report/api/cve/CVE-2026-74748.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-74748","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-74748"},"summary":{"title":"netfilter: ipset: fix refcount race between list:set GC and swap","description":"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->ref.\nip_set_swap() holds that same lock while swapping both the ip_set_list\nslots and the two sets' 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->ref == 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() -> 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   <IRQ>\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   </IRQ>\n  Kernel panic - not syncing: Fatal exception in interrupt","state":"PUBLISHED","assigner":"Linux","published_at":"2026-08-26 15:16:53","updated_at":"2026-08-27 06:17:25"},"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/24ffcb1e1688c55fd2a505f064295cd28eac546d","name":"https://git.kernel.org/stable/c/24ffcb1e1688c55fd2a505f064295cd28eac546d","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/b0aab9dd1a348b99d75ff52765719d0cc2050630","name":"https://git.kernel.org/stable/c/b0aab9dd1a348b99d75ff52765719d0cc2050630","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/20cb13a523f0a05cb2d0a7d72abae687683712e0","name":"https://git.kernel.org/stable/c/20cb13a523f0a05cb2d0a7d72abae687683712e0","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/c21afc7c216a4d257a4f3f300e0791890bc846b9","name":"https://git.kernel.org/stable/c/c21afc7c216a4d257a4f3f300e0791890bc846b9","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/97a01de0c6321b7210d30d0a4d60f10f561097c7","name":"https://git.kernel.org/stable/c/97a01de0c6321b7210d30d0a4d60f10f561097c7","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/0c88868271653537ed443272dd8e7d13634d214b","name":"https://git.kernel.org/stable/c/0c88868271653537ed443272dd8e7d13634d214b","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/b891e7a6bb06e0f6560e5932665ac660acd12225","name":"https://git.kernel.org/stable/c/b891e7a6bb06e0f6560e5932665ac660acd12225","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/cb20da33839f28f590c99f16bafaa6151451c0e8","name":"https://git.kernel.org/stable/c/cb20da33839f28f590c99f16bafaa6151451c0e8","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-74748","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-74748","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9076aea76538556224e7d73ab718f8841330818a 97a01de0c6321b7210d30d0a4d60f10f561097c7 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9076aea76538556224e7d73ab718f8841330818a c21afc7c216a4d257a4f3f300e0791890bc846b9 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9076aea76538556224e7d73ab718f8841330818a b0aab9dd1a348b99d75ff52765719d0cc2050630 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9076aea76538556224e7d73ab718f8841330818a b891e7a6bb06e0f6560e5932665ac660acd12225 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9076aea76538556224e7d73ab718f8841330818a 20cb13a523f0a05cb2d0a7d72abae687683712e0 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9076aea76538556224e7d73ab718f8841330818a cb20da33839f28f590c99f16bafaa6151451c0e8 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9076aea76538556224e7d73ab718f8841330818a 24ffcb1e1688c55fd2a505f064295cd28eac546d git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 9076aea76538556224e7d73ab718f8841330818a 0c88868271653537ed443272dd8e7d13634d214b git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 3.8","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 3.8 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 5.10.266 5.10.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 5.15.217 5.15.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.1.184 6.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.6.153 6.6.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.105 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.46 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.1.10 7.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"74748","cve":"CVE-2026-74748","epss":"0.001380000","percentile":"0.035230000","score_date":"2026-08-27","updated_at":"2026-08-28 00:03:39"},"legacy_qids":[]},"source_records":{"cve_program":{"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->ref.\nip_set_swap() holds that same lock while swapping both the ip_set_list\nslots and the two sets' 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->ref == 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() -> 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   <IRQ>\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   </IRQ>\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->ref == 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"},"nvd":{"publishedDate":"2026-08-26 15:16:53","lastModifiedDate":"2026-08-27 06:17:25","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":"74748","Ordinal":"1","Title":"netfilter: ipset: fix refcount race between list:set GC and swap","CVE":"CVE-2026-74748","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"74748","Ordinal":"1","NoteData":"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->ref.\nip_set_swap() holds that same lock while swapping both the ip_set_list\nslots and the two sets' 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->ref == 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() -> 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   <IRQ>\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   </IRQ>\n  Kernel panic - not syncing: Fatal exception in interrupt","Type":"Description","Title":"netfilter: ipset: fix refcount race between list:set GC and swap"}]}}}