Skip to main content

Linux Kernel EUVDEUVD-2026-86694

| CVE-2026-98041 HIGH
2026-09-25 Linux GHSA-2hhx-gj64-2962
7.0
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Obtain BPF load capability (CAP_BPF or unpriv-BPF)
  2. Delivery
    Craft program with JMP32 !=0 vs zero-low-bits reg
  3. Exploit
    Verifier mispredicts branch, skips bounds tracking
  4. Install
    Load accepted, run program
  5. C2
    OOB pointer arithmetic and dereference on map_value
  6. Execute
    Arbitrary kernel read/write
  7. Impact
    Privilege escalation

Vulnerability Assessment

Exploitation Conditions

Requires the ability to load eBPF programs into the kernel - normally CAP_BPF or CAP_SYS_ADMIN, or a system where the sysctl kernel.unprivileged_bpf_disabled has been turned off (non-default on modern distros). The attacker must supply a crafted program exercising a BPF_JMP32 not-equal-zero comparison against a register whose lower 32 bits are zero while upper bits are attacker-controlled. Exploitation is local only (AV:L) and needs no user interaction. It is strongly LIMITED by the default posture of disabling unprivileged BPF: on hardened/default hosts an unprivileged user cannot reach the verifier at all, confining realistic risk to multi-tenant nodes, containers, or sandboxes that grant BPF-loading privileges.

Impact

This is a genuine BPF verifier soundness bug, not a mislabeled DoS. is_branch_taken() fails to distinguish BPF_JMP (64-bit) from BPF_JMP32 (32-bit) comparisons, so 'if w1 != 0 goto' is mispredicted as always-taken using 64-bit reasoning even though the low 32 bits are zero at runtime. The verifier then treats the fall-through path (pointer += 0xdead000000000000, then dereference) as dead code and skips bounds tracking on it, while at runtime that path IS executed - yielding attacker-controlled out-of-bounds pointer arithmetic and dereference on a map_value, i.e. a controlled arbitrary kernel read/write primitive suitable for LPE rather than a crash-only bug. The provided CVSS vector (AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H, base 7.0) has a defensible impact tier (C:H/I:H/A:H) but its AC:H is questionable: triggering the misprediction is deterministic once you can load a crafted BPF program, so AC:L is more accurate, pushing real severity toward ~7.8. No EPSS score, no CISA KEV listing, and no public exploit code are present in the input, so this is not confirmed as exploited in the wild; it should be prioritized on the strength of the primitive and kernel ubiquity, not on observed exploitation. The key limiting signal is privilege: reaching the verifier requires the ability to load BPF programs (CAP_BPF/CAP_SYS_ADMIN, or a non-default unprivileged-BPF configuration), consistent with PR:L and AV:L. Net: real priority for multi-tenant/container hosts that permit BPF loading, lower urgency where unprivileged BPF is disabled (the default).

Exploit ScenarioDerived

A local user (or container workload) with BPF-loading capability submits a crafted eBPF program containing a JMP32 not-equal-zero comparison against a register whose low 32 bits are zero but whose upper bits are attacker-chosen; the verifier mispredicts the branch and skips bounds tracking on the live path, accepting an out-of-bounds pointer add and dereference on a map value. At load-and-run time this yields controlled kernel memory read/write that can be developed into privilege escalation. No public exploit code is identified at time of analysis, though the description embeds a concise reproducer program.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 25, 2026

A soundness bug in the Linux kernel BPF verifier lets a crafted eBPF program slip past verification: when handling a 32-bit 'if w1 != 0' comparison, is_branch_taken() fails to distinguish BPF_JMP32 from BPF_JMP, wrongly reports the jump as always taken, and then tracks the wrong execution path for the rest of the program - leaving register bounds inconsistent with runtime behaviour. A local attacker who can load eBPF programs (CAP_BPF/CAP_SYS_ADMIN, or a host where kernel.unprivileged_bpf_disabled has been turned off) can turn this into memory corruption and kernel privilege escalation, with the assessed CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (7.0) rating high confidentiality, integrity and availability impact. There is no confirmed active exploitation (not listed in CISA KEV) and no public exploit code identified at time of analysis; practical risk is strongly limited by the default posture of disabling unprivileged BPF on modern distributions.

RemediationAI

Primary fix is a kernel upgrade to a release containing the corrected is_branch_taken() logic: vendor-released patch versions are Linux 6.12.111, 6.18.53 and 7.2.7, with 7.3-rc2 carrying the upstream fix; for integrators maintaining their own trees, apply the matching stable commits e51179a4e09846f8fd0f26a05068520de2b301bf, e2ae33247e8b2dbe9d116d3e61cadf6d548339c6, a4d7f94c1ca914469ced665ec2f98be669aef462 or d16f0eafcaa62e677a2b5b0dabc1f8d31dfe3d4d from https://git.kernel.org/stable/ and follow your distribution's kernel advisory (see also https://nvd.nist.gov/vuln/detail/CVE-2026-98041, EUVD-2026-86694). Until patching, the most effective compensating control is to confirm kernel.unprivileged_bpf_disabled is set to 1 (or 2, permanently disabled) so unprivileged processes cannot reach the verifier at all - the trade-off is that legitimate unprivileged eBPF consumers (some tracing, observability and container tools) stop working. Additionally, restrict CAP_BPF/CAP_SYS_ADMIN to trusted workloads, and apply seccomp profiles that block the bpf() syscall for untrusted or containerised processes, accepting that this breaks eBPF-based networking and security agents such as Cilium or Falco inside those workloads. Because the flaw requires loading attacker-controlled BPF programs, tightening who can call bpf() substantially reduces exposure even before the kernel is upgraded.

Affected VersionsENISA

Linux cac616db39c207dc63465a4e05c6ce0e60b2cce4 <e51179a4e09846f8fd0f26a05068520de2b301bf
Linux cac616db39c207dc63465a4e05c6ce0e60b2cce4 <e2ae33247e8b2dbe9d116d3e61cadf6d548339c6
Linux cac616db39c207dc63465a4e05c6ce0e60b2cce4 <a4d7f94c1ca914469ced665ec2f98be669aef462
Linux 5.8
Linux patch: 0
Linux patch: 6.12.111
Linux patch: 6.18.53
Linux cac616db39c207dc63465a4e05c6ce0e60b2cce4 <d16f0eafcaa62e677a2b5b0dabc1f8d31dfe3d4d
Linux patch: 7.2.7
Linux patch: 7.3-rc2

Affected Packages

euvd linux no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The affected component is the Linux kernel's eBPF verifier, which performs static analysis on every program submitted through the bpf() syscall to guarantee memory safety before JIT compilation. eBPF has two comparison instruction classes: BPF_JMP, which compares full 64-bit registers, and BPF_JMP32, which compares only the low 32 bits of the operands (the semantics of the 'w' sub-register names such as w1). The verifier's is_branch_taken() helper uses constant/known-value information to decide which branch a conditional jump will take, so it can follow only the feasible path through the program and keep register bounds and pointer/scalar types precise. In this case is_branch_taken() did not discriminate between the two instruction classes when evaluating 'if w1 != 0', so a BPF_JMP32 test of a register whose low 32 bits are zero at runtime was resolved as if it were a full 64-bit BPF_JMP test - taking the branch and pruning the fall-through path. Because the verifier then analysed only the path it believed correct, the pointer arithmetic performed on the other path (adding an attacker-controlled scalar such as 0xdead000000000000 to a map value pointer and dereferencing it) was never bounds-checked, defeating the verifier's guarantee of memory safety. The root cause is an incorrect comparison/type handling flaw (comparison semantics confusion); no CWE identifier was assigned by the source, though it maps conceptually to the CWE-697 class of incorrect comparison and, in impact, to out-of-bounds memory access. CPE data (cpe:2.3:a:linux:linux:*:*:*:*:*:*:*) confirms upstream Linux kernel tracking, and EUVD version data places the buggy code as introduced by commit cac616db39c207dc63465a4e05c6ce0e60b2cce4, with fixes landing in the 6.12, 6.18 and 7.x stable lines. The EUVD tag 'Information Disclosure' understates the flaw, which is a full verifier bypass rather than only an information leak.

Know when Ebpf gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Linux) PRIMARY 7.0 HIGH
AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.8 HIGH

Local BPF load required (AV:L, PR:L); misprediction is deterministic once a crafted program loads (AC:L, downgrading NVD's AC:H); OOB kernel R/W yields full C/I/A.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE HIGH
Red Hat 7.0 MEDIUM

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
High
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

3
CVSS changed
Sep 25, 2026 - 15:22 NVD
7.0 (HIGH)
CVE Published
Sep 25, 2026 - 10:23 cve.org
HIGH 7.0
CVE Published
Sep 25, 2026 - 10:23 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

In the Linux kernel, the following vulnerability has been resolved:

bpf: Don't predict JMP32 pointer vs zero comparisons

Consider the following program:

r1 = map_value; /* low 32 bits are zero at runtime */ r6 = 0xdead000000000000; if w1 != 0 goto l1; l0: r1 += r6; r2 = *(u64 *)(r1 + 0); exit; l1: r6 = 0; goto l0;

At the moment is_branch_taken() reports the jump as always taken, because it does not distinguish between BPF_JMP and BPF_JMP32 comparisons when processing 'if w1 != 0 ...'.

Executive ViewAI

Why It Matters

A soundness flaw in the Linux kernel eBPF verifier could let an attacker with local access turn a low-privilege foothold into full kernel-level control of affected systems, compromising confidentiality, integrity, and availability. Organizations running Linux servers, cloud instances, or container platforms are exposed where unprivileged eBPF is enabled or CAP_BPF/CAP_SYS_ADMIN is granted too broadly, while modern distributions that disable unprivileged BPF by default substantially reduce practical risk. Leadership should prioritize validating these configuration controls and tracking vendor patches, though no public exploit has been identified at time of analysis.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include setting kernel.unprivileged_bpf_disabled=1 or 2, restricting CAP_BPF/CAP_SYS_ADMIN to trusted processes, and monitoring for suspicious eBPF program loads.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Ubiquitous
Core eBPF verifier in the Linux kernel, deployed everywhere
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact
High

Priority Score

35
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +35
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy