Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-23204

CVE-2026-23204: Linux Kernel Use-After-Free Vulnerability

CVE-2026-23204 is a use-after-free vulnerability in the Linux Kernel's net/sched cls_u32 component that can lead to slab-out-of-bounds errors. This article covers the technical details, affected versions, and mitigation.

Updated:

CVE-2026-23204 Overview

CVE-2026-23204 is an out-of-bounds read vulnerability [CWE-125] in the Linux kernel's net/sched/cls_u32.c traffic classifier. The flaw stems from skb_header_pointer() failing to fully validate negative @offset values when called from u32_classify(). A local attacker with low privileges can supply a crafted classifier configuration that triggers a slab-out-of-bounds read, as confirmed by a KASAN report from researcher GangMin Kim. The upstream fix replaces the unsafe call with skb_header_pointer_careful(), which properly validates offset bounds before dereferencing.

Critical Impact

Local attackers can trigger a kernel slab-out-of-bounds read in u32_classify(), leading to information disclosure or kernel crash and denial of service on affected Linux systems.

Affected Products

  • Linux Kernel branches containing the cls_u32 classifier from 2.6.35 onward
  • Linux Kernel 6.19 release candidates (rc1 through rc8)
  • Distributions shipping unpatched stable kernels using the u32 traffic classifier

Discovery Timeline

  • 2026-02-14 - CVE-2026-23204 published to NVD
  • 2026-04-03 - Last updated in NVD database

Technical Details for CVE-2026-23204

Vulnerability Analysis

The vulnerability resides in the u32_classify() function in net/sched/cls_u32.c at line 221. The u32 classifier inspects packet header bytes at caller-specified offsets to match traffic against filter rules configured via the tc utility. When parsing a socket buffer (skb), the classifier calls skb_header_pointer() to obtain a pointer to header data at a computed offset.

The helper skb_header_pointer() validates that the requested range falls within the linear data area but does not adequately reject negative offset values. When u32_classify() supplies a negative offset derived from attacker-controlled filter parameters, the returned pointer references memory outside the intended slab object. Subsequent dereferences cause a slab-out-of-bounds read, detected by Kernel Address Sanitizer (KASAN) as reported by GangMin Kim.

Root Cause

The root cause is insufficient input validation in skb_header_pointer() for negative @offset arguments combined with the u32 classifier passing unsanitized offsets. The fix replaces the call site with skb_header_pointer_careful(), which rejects negative and otherwise invalid offset values before computing a pointer.

Attack Vector

Exploitation requires local access and the ability to install or configure a tc filter using the u32 classifier. On systems where unprivileged user namespaces grant CAP_NET_ADMIN within a namespace, an unprivileged local user can configure the malicious filter. Once installed, processing a packet that traverses the classifier triggers the out-of-bounds read in kernel context.

No verified public exploit code is available. The reproducer referenced in the upstream commit message demonstrates the KASAN report against u32_classify+0x1180/0x11b0.

Detection Methods for CVE-2026-23204

Indicators of Compromise

  • Kernel log entries containing BUG: KASAN: slab-out-of-bounds in u32_classify on KASAN-instrumented builds
  • Unexpected kernel oops or panic traces referencing net/sched/cls_u32.c:221
  • Audit records showing unprivileged processes invoking tc filter add ... u32 inside user namespaces

Detection Strategies

  • Enumerate running kernel versions against the patched stable commits and flag hosts still running vulnerable builds
  • Monitor auditd and execve telemetry for tc filter operations using the u32 classifier from non-administrative accounts
  • Inspect kernel ring buffer (dmesg) for KASAN or general protection fault entries that reference the cls_u32 module

Monitoring Recommendations

  • Forward kernel logs and auditd events to a centralized analytics platform to correlate u32 classifier usage with crash reports
  • Track creation of user namespaces granting CAP_NET_ADMIN to non-root users, since this expands the attack surface for the bug
  • Alert on repeated tc filter installation attempts followed by kernel error messages on the same host

How to Mitigate CVE-2026-23204

Immediate Actions Required

  • Apply the upstream Linux kernel stable patches that switch cls_u32 to skb_header_pignedointer_careful() and reboot affected hosts
  • Restrict CAP_NET_ADMIN and disable unprivileged user namespace creation where the u32 classifier is not required
  • Unload the cls_u32 module on systems that do not rely on it: modprobe -r cls_u32

Patch Information

Fix commits are published in the upstream stable tree. See Linux kernel commit 13336a62, commit 8a672f17, commit cabd1a97, commit cfa74583, and commit e41a23e6. Update to a distribution kernel that incorporates these backports.

Workarounds

  • Set kernel.unprivileged_userns_clone=0 (or the equivalent user.max_user_namespaces=0) to prevent unprivileged namespace creation
  • Blacklist the cls_u32 module via /etc/modprobe.d/ on systems that do not use the u32 traffic classifier
  • Limit tc and iproute2 execution to administrative accounts using SELinux, AppArmor, or sudo policy
bash
# Configuration example
echo 'install cls_u32 /bin/true' | sudo tee /etc/modprobe.d/disable-cls_u32.conf
sudo sysctl -w kernel.unprivileged_userns_clone=0
sudo modprobe -r cls_u32

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.