Linux Kernel
CVE-2024-26924
HIGH
Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
AC upgraded to H versus NVD's AC:L because triggering the bug requires a non-default nftables PIPAPO set with timeouts and a precisely patterned same-key add/remove sequence; PR:L retained for CAP_NET_ADMIN requirement.
Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).
CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Lifecycle Timeline
7DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nft_set_pipapo: do not free live element
Pablo reports a crash with large batches of elements with a back-to-back add/remove pattern. Quoting Pablo:
add_elem("00000000") timeout 100 ms ... add_elem("0000000X") timeout 100 ms del_elem("0000000X") <---------------- delete one that was just added ... add_elem("00005000") timeout 100 ms
- nft_pipapo_remove() removes element 0000000X
Then, KASAN shows a splat.
Looking at the remove function there is a chance that we will drop a rule that maps to a non-deactivated element.
Removal happens in two steps, first we do a lookup for key k and return the to-be-removed element and mark it as inactive in the next generation. Then, in a second step, the element gets removed from the set/map.
The _remove function does not work correctly if we have more than one element that share the same key.
This can happen if we insert an element into a set when the set already holds an element with same key, but the element mapping to the existing key has timed out or is not active in the next generation.
In such case its possible that removal will unmap the wrong element. If this happens, we will leak the non-deactivated element, it becomes unreachable.
The element that got deactivated (and will be freed later) will remain reachable in the set data structure, this can result in a crash when such an element is retrieved during lookup (stale pointer).
Add a check that the fully matching key does in fact map to the element that we have marked as inactive in the deactivation step. If not, we need to continue searching.
Add a bug/warn trap at the end of the function as well, the remove function must not ever be called with an invisible/unreachable/non-existent element.
v2: avoid uneeded temporary variable (Stefano)
AnalysisAI
Stale pointer dereference in the Linux kernel's netfilter nft_set_pipapo subsystem allows a local attacker with low privileges to crash the kernel or potentially achieve arbitrary kernel code execution. The nft_pipapo_remove() function's two-phase element removal logic incorrectly unmaps a live set element when multiple elements share the same key - a scenario triggered by rapid back-to-back add/remove operations on timed-out or next-generation-inactive elements. The freed element's pointer remains reachable in the PIPAPO lookup table; a subsequent packet lookup against that stale pointer produces a KASAN-detected kernel splat. No public exploit identified at time of analysis; EPSS of 1.29% at the 67th percentile reflects elevated community interest relative to most CVEs, consistent with the Linux kernel's ubiquity.
Technical ContextAI
The vulnerability is in nft_set_pipapo, the PIPAPO (Packed Integer Pair Packing Operations) set backend within the Linux kernel's nftables netfilter subsystem, used for high-performance multi-dimensional packet classification. Element removal is a two-phase commit: phase one marks the element inactive in the 'next generation' data plane; phase two physically removes it from the PIPAPO data structure. The defect (CWE-476, manifesting as a dangling/stale pointer rather than a classic NULL dereference) occurs when the PIPAPO structure holds two elements with the same key - possible when a new element is inserted while an existing same-key element is timed out or generation-inactive. In this state, nft_pipapo_remove() may unmap the wrong (live) element: the live element is leaked and becomes unreachable, while the deactivated-but-freed element retains a live pointer inside the set structure. A subsequent lookup traversal hits the freed memory, producing a crash. CPE data confirms the affected product is cpe:2.3:o:linux:linux_kernel across multiple stable branches through 6.9-rc4, with Debian Linux 10.0 (Buster) also confirmed downstream.
RemediationAI
Apply the upstream kernel patches published to the Linux stable tree across six commits: https://git.kernel.org/stable/c/14b001ba221136c15f894577253e8db535b99487, https://git.kernel.org/stable/c/3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc, https://git.kernel.org/stable/c/41d8fdf3afaff312e17466e4ab732937738d5644, https://git.kernel.org/stable/c/7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46, https://git.kernel.org/stable/c/e3b887a9c11caf8357a821260e095f2a694a34f2, and https://git.kernel.org/stable/c/ebf7c9746f073035ee26209e38c3a1170f7b349a. A specific patched release version number is not independently confirmed in available data - consult your distribution's security tracker for the exact package version. Debian LTS users should follow https://lists.debian.org/debian-lts-announce/2024/06/msg00017.html; Fedora users should apply updates via the announcements linked above. Where patching is not immediately possible, restrict CAP_NET_ADMIN access via removal of user namespace support (sysctl kernel.unprivileged_userns_clone=0 on supported distros) to prevent unprivileged users from obtaining the capability - note this disables rootless containers and other user-namespace-dependent features. Additionally, avoid deploying nftables PIPAPO sets with element timeouts until patched, as that specific configuration is required to trigger the defect.
More in Debian Linux
View allApache Log4j2 contains a critical JNDI injection vulnerability known as 'Log4Shell' that allows unauthenticated remote c
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
GNU Bash through 4.3 processes trailing strings after function definitions in the values of environment variables, which
Samba since version 3.5.0 and before 4.6.4, 4.5.10 and 4.4.14 is vulnerable to remote code execution vulnerability, allo
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
RARLAB UnRAR before 6.12 on Linux and UNIX allows directory traversal to write to files during an extract (aka unpack) o
The (1) EPHEMERAL, (2) HTTPS, (3) MVG, (4) MSL, (5) TEXT, (6) SHOW, (7) WIN, and (8) PLT coders in ImageMagick before 6.
When running Apache Tomcat versions 9.0.0.M1 to 9.0.0, 8.5.0 to 8.5.22, 8.0.0.RC1 to 8.0.46 and 7.0.0 to 7.0.81 with HTT
When using the Apache JServ Protocol (AJP), care must be taken when trusting incoming connections to Apache Tomcat. Rate
A remote code execution vulnerability exists within multiple subsystems of Drupal 7.x and 8.x. Rated critical severity (
Same weakness CWE-476 – NULL Pointer Dereference
View allSame technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today