CyberSecBulletin
CVE-2024-26924NVD status: Modified

Linux: NULL Pointer Dereference

CVE-2024-26924 is a high-severity NULL pointer dereference vulnerability in Linux, with a CVSS 3.1 base score of 7.8 out of 10. It can be exploited with local access to the system by an attacker with a low-privileged account, without any action from a user. The record lists versions e3b887a9c11caf8357a821260e095f2a694a34f2, 7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46, 41d8fdf3afaff312e17466e4ab732937738d5644 as the first without the flaw, so updating Linux to one of those releases or later removes the exposure. There is no confirmed exploitation so far. EPSS estimates a 0.85% chance of exploitation within 30 days, higher than 59% of scored CVEs.

Next patch cycle

High severity with no evidence of exploitation so far.

What to do

  1. Update Linux to e3b887a9c11caf8357a821260e095f2a694a34f2 or 7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46 or 41d8fdf3afaff312e17466e4ab732937738d5644 or ebf7c9746f073035ee26209e38c3a1170f7b349a, whichever matches your release line, or a later version.

Affected products and versions

VendorProductAffected versionsFixed in
LinuxLinux3c4287f62044a90e73a561aa05fc46e62da173da up to, but not including, e3b887a9c11caf8357a821260e095f2a694a34f2; 3c4287f62044a90e73a561aa05fc46e62da173da up to, but not including, 7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46; 3c4287f62044a90e73a561aa05fc46e62da173da up to, but not including, 41d8fdf3afaff312e17466e4ab732937738d5644; 3c4287f62044a90e73a561aa05fc46e62da173da up to, but not including, ebf7c9746f073035ee26209e38c3a1170f7b349a; 3c4287f62044a90e73a561aa05fc46e62da173da up to, but not including, 14b001ba221136c15f894577253e8db535b99487; 3c4287f62044a90e73a561aa05fc46e62da173da up to, but not including, 3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc; 5.6e3b887a9c11caf8357a821260e095f2a694a34f2, 7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46, 41d8fdf3afaff312e17466e4ab732937738d5644, ebf7c9746f073035ee26209e38c3a1170f7b349a, 14b001ba221136c15f894577253e8db535b99487, 3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc
Linuxlinux_kernel5.6; 3c4287f62044Not stated
DebianDebian Linux10.0Not stated

Version data comes from the organisation that assigned the CVE. Confirm against the vendor advisory before deciding you are unaffected.

How the severity score breaks down

Attack vector
LocalThe attacker needs local access or must trick a user into running something.
Attack complexity
LowNo special conditions are needed; the attack works reliably.
Privileges required
LowA basic user account is enough.
User interaction
NoneNo action by a victim is required.
Scope
UnchangedImpact stays within the vulnerable component.
Confidentiality
HighAll data handled by the component can be read.
Integrity
HighData or code can be modified at will.
Availability
HighThe component can be taken down completely.

Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H. Scored by CNA.

Scoring systemScoreSeverityScored by
CVSS 3.17.8HighCNA
CVSS 3.15.9MediumCISA (ADP)

Official description

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 1) 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)

Source: the CVE record as published by its numbering authority, via NVD and CVE.org.

The underlying weakness: NULL Pointer Dereference

The product dereferences a pointer that it expects to be valid but is NULL.

How developers prevent this class of flaw

  • For any pointers that could have been modified or provided from a function that can return NULL, check the pointer for NULL before use. When working with a multithreaded or otherwise asynchronous environment, ensure that proper locking APIs are used to lock before the check, and unlock when it has finished.
  • Select a programming language that is not susceptible to these issues.
  • Check the results of all functions that return a value and verify that the value is non-null before acting upon it.

More NULL Pointer Dereference vulnerabilities (CWE-476)

Timeline

  1. CVE record published.
  2. CISA published its SSVC assessment (exploitation: none, automatable: no, technical impact: partial).
  3. Record last changed materially (score, affected products, status or references).

References

Third-party and government advisories

Recent NULL Pointer Dereference vulnerabilities

Spotted an error? Tell us.