{"dataType":"CVE_RECORD","cveMetadata":{"cveId":"CVE-2024-26924","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2024-02-19T14:20:24.194Z","datePublished":"2024-04-24T21:49:22.631Z","dateUpdated":"2026-08-05T11:28:22.379Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-05T11:28:22.379Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: nft_set_pipapo: do not free live element\n\nPablo reports a crash with large batches of elements with a\nback-to-back add/remove pattern.  Quoting Pablo:\n\n  add_elem(\"00000000\") timeout 100 ms\n  ...\n  add_elem(\"0000000X\") timeout 100 ms\n  del_elem(\"0000000X\") <---------------- delete one that was just added\n  ...\n  add_elem(\"00005000\") timeout 100 ms\n\n  1) nft_pipapo_remove() removes element 0000000X\n  Then, KASAN shows a splat.\n\nLooking at the remove function there is a chance that we will drop a\nrule that maps to a non-deactivated element.\n\nRemoval happens in two steps, first we do a lookup for key k and return the\nto-be-removed element and mark it as inactive in the next generation.\nThen, in a second step, the element gets removed from the set/map.\n\nThe _remove function does not work correctly if we have more than one\nelement that share the same key.\n\nThis can happen if we insert an element into a set when the set already\nholds an element with same key, but the element mapping to the existing\nkey has timed out or is not active in the next generation.\n\nIn such case its possible that removal will unmap the wrong element.\nIf this happens, we will leak the non-deactivated element, it becomes\nunreachable.\n\nThe element that got deactivated (and will be freed later) will\nremain reachable in the set data structure, this can result in\na crash when such an element is retrieved during lookup (stale\npointer).\n\nAdd a check that the fully matching key does in fact map to the element\nthat we have marked as inactive in the deactivation step.\nIf not, we need to continue searching.\n\nAdd a bug/warn trap at the end of the function as well, the remove\nfunction must not ever be called with an invisible/unreachable/non-existent\nelement.\n\nv2: avoid uneeded temporary variable (Stefano)"}],"metrics":[{"cvssV3_1":{"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"},"scenarios":[{"lang":"en","value":"AV:L - The vulnerability is reached exclusively through the nfnetlink NFNL_SUBSYS_NFTABLES socket interface, which requires local system access to issue set-element transactions. The subsequent UAF dereference happens on the packet path, but the attacker must first be local to build the poisoned set.\nAC:L - No race or memory-layout luck is needed to create the dangling pointer — a single deterministic batch (\"add key K with timeout, add K again, delete K\") reliably makes nft_pipapo_remove() unmap the wrong element, and pipapo is unconditionally compiled into nf_tables so no unusual config is required.\nPR:L - nf_tables gates on netlink_net_capable(skb, CAP_NET_ADMIN), which is evaluated against the netns owner's user namespace, so an unprivileged user obtains it via `unshare -Urn`. The same namespace also lets the attacker send the packets that dereference the freed element, making the whole chain self-contained for an ordinary local user.\nUI:N - The attacker performs every step — creating the set, driving the add/delete batch, and generating the traffic that hits the stale mapping entry. No victim action is involved.\nS:U - The corruption is confined to the kernel's own heap and results in standard kernel privilege escalation rather than crossing a hypervisor, IOMMU, or other separate security authority.\nC:H - The freed nft_pipapo_elem stays reachable from the packet lookup path, and nft_lookup_eval() copies nft_set_ext_data() from that freed object into registers, giving an attacker-observable read of reclaimed kernel heap that can be sprayed with sensitive data or kernel pointers.\nI:H - This is a use-after-free on an object whose contents the attacker can control via heap spraying; for verdict maps the freed verdict.chain pointer is followed by nft_do_chain(), and nft_set_elem_update_expr() executes stateful expressions out of the freed memory, yielding write and control-flow-hijack primitives.\nA:H - Even without full exploitation, the dangling f->mt[b].e pointer is dereferenced on every matching packet, producing KASAN splats, oopses, and kernel panics (the reported symptom was a crash)."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/netfilter/nft_set_pipapo.c"],"versions":[{"version":"3c4287f62044a90e73a561aa05fc46e62da173da","lessThan":"e3b887a9c11caf8357a821260e095f2a694a34f2","status":"affected","versionType":"git"},{"version":"3c4287f62044a90e73a561aa05fc46e62da173da","lessThan":"7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46","status":"affected","versionType":"git"},{"version":"3c4287f62044a90e73a561aa05fc46e62da173da","lessThan":"41d8fdf3afaff312e17466e4ab732937738d5644","status":"affected","versionType":"git"},{"version":"3c4287f62044a90e73a561aa05fc46e62da173da","lessThan":"ebf7c9746f073035ee26209e38c3a1170f7b349a","status":"affected","versionType":"git"},{"version":"3c4287f62044a90e73a561aa05fc46e62da173da","lessThan":"14b001ba221136c15f894577253e8db535b99487","status":"affected","versionType":"git"},{"version":"3c4287f62044a90e73a561aa05fc46e62da173da","lessThan":"3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/netfilter/nft_set_pipapo.c"],"versions":[{"version":"5.6","status":"affected"},{"version":"0","lessThan":"5.6","status":"unaffected","versionType":"semver"},{"version":"5.10.216","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.157","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.88","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.29","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.8.8","lessThanOrEqual":"6.8.*","status":"unaffected","versionType":"semver"},{"version":"6.9","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"5.10.216"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"5.15.157"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.1.88"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.6.29"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.8.8"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.9"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/e3b887a9c11caf8357a821260e095f2a694a34f2"},{"url":"https://git.kernel.org/stable/c/7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46"},{"url":"https://git.kernel.org/stable/c/41d8fdf3afaff312e17466e4ab732937738d5644"},{"url":"https://git.kernel.org/stable/c/ebf7c9746f073035ee26209e38c3a1170f7b349a"},{"url":"https://git.kernel.org/stable/c/14b001ba221136c15f894577253e8db535b99487"},{"url":"https://git.kernel.org/stable/c/3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc"}],"title":"netfilter: nft_set_pipapo: do not free live element","x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"cvssV3_1":{"scope":"UNCHANGED","version":"3.1","baseScore":5.9,"attackVector":"NETWORK","baseSeverity":"MEDIUM","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","integrityImpact":"NONE","userInteraction":"NONE","attackComplexity":"HIGH","availabilityImpact":"HIGH","privilegesRequired":"NONE","confidentialityImpact":"NONE"}},{"other":{"type":"ssvc","content":{"id":"CVE-2024-26924","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2024-04-29T16:46:54.309255Z"}}}],"affected":[{"cpes":["cpe:2.3:o:linux:linux_kernel:5.6:*:*:*:*:*:*:*"],"vendor":"linux","product":"linux_kernel","versions":[{"status":"affected","version":"5.6"}],"defaultStatus":"unknown"},{"cpes":["cpe:2.3:o:linux:linux_kernel:-:*:*:*:*:*:*:*"],"vendor":"linux","product":"linux_kernel","versions":[{"status":"affected","version":"3c4287f62044"}],"defaultStatus":"unknown"}],"problemTypes":[{"descriptions":[{"lang":"en","type":"CWE","cweId":"CWE-476","description":"CWE-476 NULL Pointer Dereference"}]}],"providerMetadata":{"orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP","dateUpdated":"2024-06-04T17:49:06.077Z"}},{"title":"CVE Program Container","references":[{"url":"https://git.kernel.org/stable/c/e3b887a9c11caf8357a821260e095f2a694a34f2","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/41d8fdf3afaff312e17466e4ab732937738d5644","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/ebf7c9746f073035ee26209e38c3a1170f7b349a","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/14b001ba221136c15f894577253e8db535b99487","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc","tags":["x_transferred"]},{"url":"https://lists.debian.org/debian-lts-announce/2024/06/msg00017.html","tags":["x_transferred"]},{"url":"https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/DAMSOZXJEPUOXW33WZYWCVAY7Z5S7OOY/"},{"url":"https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/4EZ6PJW7VOZ224TD7N4JZNU6KV32ZJ53/"},{"url":"https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/GCBZZEC7L7KTWWAS2NLJK6SO3IZIL4WW/"}],"providerMetadata":{"orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE","dateUpdated":"2025-11-04T17:14:47.716Z"}}]},"dataVersion":"5.2"}