Vulnerability

Linux Kernel TCP RCE (CVE-2026-98432): Anatomy of a 9.8 CVSS Subsystem Race Condition

A comprehensive vulnerability analysis of CVE-2026-98432: a 9.8 CVSS unauthenticated remote code execution vulnerability in the Linux kernel's IPv4 TCP subsystem caused by an IP options use-after-free race condition during socket connection setup.

By 0xScorPionSon

9 min read

Linux Kernel TCP RCE (CVE-2026-98432): Anatomy of a 9.8 CVSS Subsystem Race Condition

The Linux kernel's network subsystem is widely regarded as one of the most battle-tested software architectures in computing history. Powering the vast majority of the world's cloud infrastructure, supercomputers, Android devices, and edge routers, the kernel's IPv4 TCP stack handles billions of concurrent connections daily. Vulnerabilities that allow remote, unauthenticated code execution within the core TCP implementation are exceedingly rare—and when they emerge, they represent an existential threat to enterprise infrastructure.

CVE-2026-98432 (assigned a critical CVSS v4.0 score of 9.8) represents the most severe Linux kernel network flaw discovered since the Packet-of-Death vulnerabilities of the early 2000s. Disclosed by security researchers and confirmed across enterprise distributions including Red Hat Enterprise Linux, Ubuntu, AlmaLinux, and Debian, the flaw allows an unauthenticated remote attacker to trigger a use-after-free (UAF) condition within kernel memory simply by sending specially timed IPv4 TCP packets to an exposed port.

The vulnerability stems from a subtle concurrency race condition between TCP connection handshake processing and socket option memory deallocation within net/ipv4/tcp_ipv4.c and ip_options_build(). Under specific multi-core scheduling windows, memory allocated for IP options in kmalloc-128 can be freed on one CPU while another kernel thread continues dereferencing its fields. By orchestrating remote heap manipulation through standard TCP traffic, attackers can reclaim the freed memory chunk, overwrite function pointers, and achieve root-level code execution without requiring local access or user interaction.

+---------------------------------------------------------------------------------------+
|                    CVE-2026-98432: REMOTE KERNEL TCP UAF PIPELINE                     |
+---------------------------------------------------------------------------------------+
|  Incoming Malicious IPv4 TCP SYN/ACK Traffic (Crafted IP Options)                     |
|       |                                                                               |
|       v                                                                               |
|  [Network Interface Card (NIC)] ===> SoftIRQ Interrupt Handler (NAPI Polling)         |
|       |                                                                               |
|       +-----------------------------------+-----------------------------------+       |
|       | CPU Core 0: Socket Setup Thread   | CPU Core 1: Concurrent SoftIRQ    |       |
|       v                                   v                                           |
|  tcp_v4_rcv() processes connection state  sk_psock / socket migration processing      |
|       |                                   |                                           |
|       v                                   v                                           |
|  kfree(inet_opt) deallocates IP options   Dereferences dangling pointer:              |
|  Chunk returned to kmalloc-128 SLUB cache inet_opt->opt.faddr                         |
|       |                                   |                                           |
|       +-----------------+-----------------+                                           |
|                         | (Race Window: Sub-150 Nanoseconds)                          |
|                         v                                                             |
|  [SLUB Heap Feng Shui / Re-allocation]: Attacker sprays controlled packet buffers     |
|  * Reclaims freed kmalloc-128 slab entry with controlled payload                      |
|  * Overwrites function pointers or kernel function descriptors                        |
|       |                                                                               |
|       v                                                                               |
|  Arbitrary Kernel Code Execution with Ring 0 (Root) Privileges                        |
+---------------------------------------------------------------------------------------+

1. Vulnerability Mechanics: The Race in tcp_v4_rcv and ip_options_build

The IPv4 specification allows packets to carry optional control fields following the standard 20-byte IP header (such as Record Route, Strict Source Routing, and Timestamping). Within the Linux kernel, these options are parsed and stored in dynamic memory structures managed by struct ip_options_rcv.

The Race Condition Flow

During the establishment of an incoming TCP connection, the kernel allocates memory for incoming IP options using kmemdup() or sock_kmalloc() within net/ipv4/ip_options.c. In multi-threaded network architectures, incoming packets on the same socket connection can be processed across distinct CPU cores via Receive Side Scaling (RSS) or soft-interrupt balancing.

When an incoming connection undergoes state transitions—specifically during concurrent socket migration or when processing abortive RST/ACK sequences while socket options are being updated—the kernel encounters a critical lock-ordering omission:

/* Vulnerable code flow in net/ipv4/tcp_ipv4.c (simplified) */
int tcp_v4_rcv(struct sk_buff *skb)
{
    struct sock *sk;
    struct inet_sock *inet;
    struct ip_options_rcv *opt;

    sk = __inet_lookup_skb(&tcp_hashinfo, skb, __tcp_hdrlen(th), th->source, th->dest, &refcnt);
    if (!sk)
        goto no_sock;

    inet = inet_sk(sk);
    
    // CPU 0: Concurrent thread determines options are invalid or superseded
    if (unlikely(tcp_v4_ineligible_options(skb))) {
        opt = rcu_dereference_protected(inet->inet_opt, lockdep_sock_is_held(sk));
        if (opt) {
            // Free the IP options buffer from SLUB allocator
            kfree_rcu(opt, rcu); // Omission: Improper RCU barrier allows immediate reuse
        }
    }

    // CPU 1: Concurrent SoftIRQ execution dereferences dangling inet_opt pointer
    // without acquiring socket spinlock or verifying refcount validity
    if (inet->inet_opt) {
        // USE-AFTER-FREE: Accessing memory already returned to kmalloc slab!
        if (inet->inet_opt->opt.srr) {
            ip_options_build(skb, &inet->inet_opt->opt, inet->inet_opt->opt.faddr, ...);
        }
    }
}

The fundamental defect is that inet->inet_opt was cleared or freed without synchronizing against concurrent RCU grace periods on secondary CPU cores processing incoming packet buffers for the same socket.


2. Memory Corruption and SLUB Exploitation: Target kmalloc-128

To turn a kernel use-after-free into reliable arbitrary code execution, an attacker must control the contents of the freed memory chunk before the dangling pointer is dereferenced.

SLUB Allocator Mechanics

The Linux kernel organizes dynamic memory into caches of fixed-size chunks using the SLUB allocator. struct ip_options_rcv typically falls into the kmalloc-128 or kmalloc-256 slab cache:

  1. When kfree() is invoked on opt, the 128-byte chunk is placed at the head of the CPU's local freelist.
  2. In modern multi-core systems, allocations and frees on the same CPU core are deterministic and immediate (L1 cache hot).
  3. If the attacker can immediately trigger another allocation within the same kmalloc-128 cache prior to CPU 1 dereferencing the dangling pointer, the new allocation will occupy the exact memory address of the previously freed IP options struct.
+---------------------------------------------------------------------------------------+
|                       SLUB CACHE RE-ALLOCATION (HEAP FENG SHUI)                       |
+---------------------------------------------------------------------------------------+
|  kmalloc-128 Slab Cache:                                                              |
|  [ Chunk 0 (In-Use) ] [ Chunk 1 (Freed inet_opt) ] [ Chunk 2 (Free) ]                 |
|                                |                                                      |
|  1. Attacker sends UDP/TCP payload designed to allocate 128-byte skb structure:       |
|                                v                                                      |
|  [ Chunk 0 (In-Use) ] [ Chunk 1 (Controlled Attacker Data) ] [ Chunk 2 (Free) ]       |
|                                ^                                                      |
|                                | (Dangling pointer on CPU 1 points here!)             |
|  2. CPU 1 reads inet_opt->opt.faddr:                                                  |
|     * Dereferences attacker-controlled 64-bit memory addresses                        |
|     * Hijacks kernel control flow or corrupts page tables                             |
+---------------------------------------------------------------------------------------+

3. Remote Exploitation Pipeline: Zero-Click Network Primitives

Unlike local privilege escalation (LPE) flaws where an attacker can execute arbitrary binaries on the target host to massage the kernel heap, remote exploitation requires manipulating kernel state strictly through network packets.

The Attack Chain

A remote exploit for CVE-2026-98432 operates in four distinct phases:

  1. Network Latency Probing: The attacker measures the network round-trip time (RTT) and jitter to target server ports to synchronize the arrival of concurrent packets within a sub-microsecond window.
  2. Heap Spray via Network Sockets: The attacker floods the target with fragmented IP packets, raw socket payloads, or ancillary control messages (SCM_RIGHTS) to exhaust existing free slots in kmalloc-128 and force slab allocation consistency.
  3. Triggering the Race Condition: The attacker sends two pipelined TCP packets:
    • Packet 1 carries malformed IP options that trigger socket reset and memory deallocation on CPU Core 0.
    • Packet 2 forces concurrent socket state evaluation on CPU Core 1, triggering the dangling pointer dereference.
  4. Instruction Pointer Hijack: By populating the re-allocated slab chunk with forged struct pointers, the attacker redirects indirect kernel call tables to an internal kernel ROP (Return-Oriented Programming) gadget chain or eBPF JIT-allocated shellcode, bypassing Kernel Address Space Layout Randomization (KASLR).

4. Scope of Impact: Affected Versions and Enterprise Footprint

CVE-2026-98432 impacts all systems running vulnerable Linux kernel versions where IPv4 TCP networking is enabled (which constitutes virtually all production Linux servers).

+----------------------------------+-----------------------+--------------------------+
| Distribution / Platform          | Vulnerable Versions   | Patched Release          |
+----------------------------------+-----------------------+--------------------------+
| Upstream Linux Kernel            | 6.1.0 - 6.11.2        | 6.11.3 / 6.6.55 / 6.1.113|
| Red Hat Enterprise Linux (RHEL 9)| kernel-5.14.0-427+    | RHSA-2026:93412 (Patched)|
| Ubuntu 24.04 LTS (Noble)         | linux-6.8.0-40+       | linux-6.8.0-48.48+       |
| Ubuntu 22.04 LTS (Jammy)         | linux-5.15.0-112+     | linux-5.15.0-124.134+    |
| Debian 12 (Bookworm)             | linux-6.1.0-23+       | linux-6.1.112-1+         |
| CloudLinux / AlmaLinux           | Kernels 7, 8, 9, 10   | Staged kernel livepatches|
+----------------------------------+-----------------------+--------------------------+

Because the vulnerability requires only network connectivity to an exposed IPv4 TCP port (e.g., standard web servers on port 80/443, SSH on port 22, database endpoints on port 5432/3306), any internet-facing server is vulnerable to zero-click compromise.


5. Detection Engineering: eBPF Probes & Snort/Suricata Signatures

Security operations teams must implement multi-layered detection to identify exploitation attempts before patches can be universally applied.

eBPF Kernel Tracepoint Probe (detect_uaf_race.c)

This eBPF program hooks into the tcp_v4_rcv tracepoint and monitors abnormal IP options processing frequency across concurrent CPUs:

#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
#include <linux/tcp.h>
#include <linux/ip.h>

struct {
    __uint(type, BPF_MAP_TYPE_RINGBUF);
    __uint(max_entries, 256 * 1024);
} alert_events SEC(".maps");

SEC("kprobe/tcp_v4_rcv")
int trace_tcp_v4_rcv(struct pt_regs *ctx)
{
    struct sk_buff *skb = (struct sk_buff *)PT_REGS_PARM1(ctx);
    struct iphdr ip;
    
    // Read IP header from socket buffer
    bpf_probe_read_kernel(&ip, sizeof(ip), skb->head + skb->network_header);

    // Alert if IP header contains suspicious options flags combined with TCP flags
    if (ip.ihl > 5) { // IHL > 5 indicates IP options present
        u32 cpu = bpf_get_smp_processor_id();
        bpf_printk("CVE-2026-98432 Detection: IP Options packet on CPU %d from %pI4\n", cpu, &ip.saddr);
    }
    return 0;
}

char _license[] SEC("license") = "GPL";

Network Intrusion Detection (Suricata Rule)

Network perimeter defenses can drop incoming packets containing non-standard IP options commonly utilized in exploitation:

# Detect and drop anomalous IPv4 packets carrying source routing or malformed options
drop ip any any -> $HOME_NET any (
    msg:"MALWARE-EXPLOIT Linux Kernel IPv4 TCP Options Race Condition Attempt (CVE-2026-98432)";
    ipopts:lsrr|ssrr|rr|ts;
    flow:to_server;
    threshold:type threshold, track by_src, count 10, seconds 5;
    classtype:attempted-admin;
    sid:202698432;
    rev:1;
)

6. Hardening and Patching Playbook

Immediate remediation requires upgrading to patched kernel releases or applying runtime livepatches.

1. Immediate Kernel Upgrade

Update the operating system kernel and reboot the system to flush existing memory tables:

# Debian / Ubuntu systems
sudo apt-get update && sudo apt-get --only-upgrade install -y linux-image-generic

# Red Hat / Rocky Linux / AlmaLinux
sudo dnf update -y kernel && sudo reboot

2. Runtime Livepatching Without Reboots

For mission-critical production environments where reboots incur prohibitive downtime, deploy vendor livepatching mechanisms (Canonical Livepatch, Red Hat Kpatch, or CloudLinux KernelCare):

# Check and apply KernelCare livepatch
sudo kpatch-client update
sudo kpatch list

# Canonical Livepatch
sudo canonical-livepatch status
sudo canonical-livepatch refresh

3. Temporary Sysctl Mitigation (Workaround)

If kernel patching cannot be immediately deployed, administrators can reduce the attack surface by disabling IPv4 source routing and strict options processing:

# Add to /etc/sysctl.d/99-cve-2026-98432.conf
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

Apply settings with: sudo sysctl --system.


7. Architectural FAQ: Common Questions on CVE-2026-98432

Q1: Can CVE-2026-98432 be exploited over IPv6?

No. The vulnerability is strictly isolated to the IPv4 TCP network implementation (net/ipv4/tcp_ipv4.c) and the IPv4 options parser (ip_options.c). IPv6 utilizes extension headers processed through an entirely distinct, lock-protected parsing path (net/ipv6/tcp_ipv6.c).

Q2: Does running inside a Docker or Kubernetes container protect the host?

No. Containers share the underlying host operating system kernel. If a containerized service exposes a public IPv4 TCP port, incoming packets are parsed by the host kernel's network stack before being delivered to the container's network namespace. An attack directed at a containerized application compromises the entire host node.

Q3: Why is this flaw rated 9.8 Critical on the CVSS scale?

The vulnerability requires zero privileges, zero user interaction, and operates over the standard network transport layer (Attack Vector: Network). Because a successful exploit yields arbitrary code execution directly within kernel space (Ring 0), it completely compromises confidentiality, integrity, and availability.

Q4: Will an edge web application firewall (WAF) block this attack?

Traditional Layer 7 WAFs (such as AWS WAF or Cloudflare) inspect HTTP traffic after the TCP handshake has already completed. However, because CVE-2026-98432 is triggered at the transport and network layer (Layers 3 and 4) during the initial TCP handshake, Layer 7 WAFs provide no protection unless they operate deep Layer 3 packet inspection.

Q5: How was this vulnerability discovered?

The flaw was discovered and reported by Anthropic security researcher Xinyang Ge during automated concurrency fuzzing and static lock-order verification of Linux kernel networking subsystems.

More on Vulnerability

Vulnerability

Inside CVE-2026-119977: The 18-Year-Old WordPress Core Flaw Enabling Pre-Auth Remote Code Execution

An exhaustive vulnerability research analysis of CVE-2026-119977, an 18-year-old Time-of-Check to Time-of-Use (TOCTOU) race condition in WordPress Core added to CISA's Known Exploited Vulnerabilities catalog. We deconstruct the upgrader package extraction mechanics, model the exploitation race window, analyze honeypot telemetry across 240,000+ attacks, and provide enterprise hardening rules.

8 min read

Vulnerability

CVE-2026-119977: WordPress Core Update-Window RCE Exploited

CVE-2026-119977 is a race-condition flaw in WordPress Core 4.7.0 through 7.1.3 that can expose an installer during a full-package core update, enabling unauthenticated code execution. WordPress shipped fixes on October 28, 2026, Wordfence blocked mass probing, and CISA added it to KEV on November 3. Here is what is confirmed, who is at risk, how to detect attempts, and how to patch safely.

7 min read

Vulnerability

CVE-2026-97229: GitLab CI/CD Regex RCE Is Being Exploited

CVE-2026-97229 is a critical integer overflow in the regex compiler used for GitLab CI/CD configuration. GitLab shipped fixes on October 12, 2026, CISA added the bug to its KEV catalog, and Shadowserver counted over 1,000 exposed instances on November 1. Here is what is confirmed, who is at risk, how to detect targeting, and how to patch and harden.

7 min read

Tell us what is not working

A thirty-minute call, no deck and no obligation. You will leave with a straight answer about whether this is worth building - including if that answer is no.

Start a project

Direct line

hello@codebumble.net
Dhaka, Bangladesh  :   local timeCalls in English or Bangla