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

CVE-2026-43009: Linux Kernel Privilege Escalation Flaw

CVE-2026-43009 is a privilege escalation vulnerability in the Linux kernel affecting BPF atomic fetch precision tracking. This flaw allows incorrect path pruning in the verifier. This article covers technical details, affected versions, impact, and mitigation strategies.

Published:

CVE-2026-43009 Overview

CVE-2026-43009 is a Linux kernel vulnerability in the Berkeley Packet Filter (BPF) verifier. The flaw resides in the backtrack_insn precision tracking logic when handling atomic fetch operations. The verifier fails to recognize that BPF_STX instructions combined with BPF_ATOMIC and BPF_FETCH flags use the source register as both input and destination. This omission causes precision marks to propagate incorrectly, allowing the verifier's path pruning to treat non-equivalent program states as equivalent. A local attacker with the ability to load BPF programs can exploit this logic gap to bypass verifier safety guarantees.

Critical Impact

Local users able to load BPF programs may bypass verifier checks, leading to kernel memory corruption, privilege escalation, and full host compromise.

Affected Products

  • Linux kernel BPF subsystem (verifier)
  • Stable kernel branches receiving the upstream fix referenced in commits 179ee84a8911 and 7ffbe45b1d22
  • Distributions shipping vulnerable kernels with unprivileged or privileged BPF program loading enabled

Discovery Timeline

  • 2026-05-01 - CVE-2026-43009 published to NVD
  • 2026-05-03 - Last updated in NVD database

Technical Details for CVE-2026-43009

Vulnerability Analysis

The Linux BPF verifier statically analyzes programs before they execute in the kernel. Part of this analysis tracks register and stack-slot precision through backtrack_insn, which walks instructions backward to determine which values must be tracked precisely. When the verifier encounters a BPF_STX instruction carrying both BPF_ATOMIC and BPF_FETCH modifiers, the source register, or r0 for BPF_CMPXCHG, receives the prior memory value as a destination. The pre-fix logic treats these instructions like ordinary stores, where the source register is purely an input.

Because the destination role is ignored, precision is not propagated to the underlying stack slot. The verifier's state-equivalence comparison then can mark two divergent program paths as equivalent and prune one. An attacker can craft a BPF program that exploits this pruning to smuggle unverified arithmetic or pointer operations past the verifier, producing out-of-bounds reads or writes inside the kernel.

Root Cause

The root cause is missing handling for atomic fetch variants inside backtrack_insn. The function lacked a check equivalent to is_atomic_fetch_insn() that would treat the fetch destination like a BPF_LDX load. Without that handling, precision tracking stops short of the stack slot supplying the atomic operand, leaving the slot unmarked and eligible for incorrect equivalence matching during pruning.

Attack Vector

Exploitation requires local code execution with the ability to load BPF programs. On systems where unprivileged BPF is permitted, any local user can attempt this. On hardened systems, an attacker needs CAP_BPF or CAP_SYS_ADMIN. The attacker constructs a BPF program that uses atomic64_fetch_add or another fetch variant against a stack slot, then relies on pruned state divergence to perform unchecked memory operations once the program runs in the kernel.

No verified public proof-of-concept code is available for this issue. Refer to the upstream commits for the precise instruction sequence the fix targets.

Detection Methods for CVE-2026-43009

Indicators of Compromise

  • Unexpected bpf() syscall activity from unprivileged user contexts loading programs that contain BPF_ATOMIC | BPF_FETCH opcodes
  • Kernel oops, GPF, or KASAN reports referencing BPF program execution paths shortly after program load
  • Audit records showing processes acquiring CAP_BPF or CAP_SYS_ADMIN followed by BPF program loads from non-administrative binaries

Detection Strategies

  • Enable kernel auditing for the bpf() syscall and alert on program loads originating from non-trusted UIDs or container workloads
  • Monitor kernel logs for verifier rejection bypasses, KASAN out-of-bounds reports, and unexpected BPF JIT activity
  • Correlate BPF program load events with subsequent privilege changes or suspicious child process creation

Monitoring Recommendations

  • Track the value of kernel.unprivileged_bpf_disabled across the fleet and alert on regressions to 0
  • Forward kernel ring buffer messages and audit logs into a central data lake for retroactive hunting once new IOCs emerge
  • Baseline legitimate BPF tooling such as bcc, bpftrace, and cilium and flag unknown loaders

How to Mitigate CVE-2026-43009

Immediate Actions Required

  • Apply the upstream Linux kernel patches referenced in commits 179ee84a8911 and 7ffbe45b1d22 from your distribution vendor
  • Set kernel.unprivileged_bpf_disabled=1 to block unprivileged BPF program loading until patched kernels are deployed
  • Restrict CAP_BPF and CAP_SYS_ADMIN to administrative users and audit container runtimes that grant these capabilities
  • Inventory hosts running affected kernel versions and prioritize patching multi-tenant and container hosts

Patch Information

The fix extends backtrack_insn to handle atomic fetch instructions through an is_atomic_fetch_insn() helper. When the fetch destination register is being tracked for precision, the verifier now clears it and propagates precision to the stack slot, mirroring the existing BPF_LDX path. Patched commits are available in the Linux stable tree commit 179ee84a8911 and Linux stable tree commit 7ffbe45b1d22.

Workarounds

  • Disable unprivileged BPF by setting kernel.unprivileged_bpf_disabled=1 via sysctl and persisting it in /etc/sysctl.d/
  • Drop CAP_BPF and CAP_SYS_ADMIN from container security profiles and Kubernetes pod specs where not strictly required
  • Use seccomp policies to deny the bpf() syscall for workloads that do not need it
  • Where feasible, run untrusted workloads in virtualized sandboxes that do not expose the host BPF subsystem
bash
# Configuration example
# Disable unprivileged BPF program loading until patched kernels are installed
echo 'kernel.unprivileged_bpf_disabled=1' | sudo tee /etc/sysctl.d/90-bpf-hardening.conf
sudo sysctl --system

# Verify the setting
sysctl kernel.unprivileged_bpf_disabled

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.