Skip to main content

Linux Kernel EUVDEUVD-2026-81973

| CVE-2026-90312 HIGH
2026-09-17 Linux GHSA-4gcp-c78x-x35m
7.8
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

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

  1. Access
    Obtain CAP_BPF on target host
  2. Delivery
    Craft eBPF program with load-acquire dst==src of ctx pointer field
  3. Exploit
    Pass verifier (atomic_ptr_type_ok bypassed)
  4. Execution
    Load unconverted kernel object as wrong pointer type
  5. Persist
    Dereference confused pointer for memory corruption
  6. Impact
    Escalate privileges to root

Vulnerability Assessment

Exploitation Conditions

Requires the ability to load an eBPF program (CAP_BPF or CAP_SYS_ADMIN; unprivileged BPF is disabled by default via kernel.unprivileged_bpf_disabled=1 on mainstream distributions), running a kernel between 6.15 and the fix that supports the BPF load-acquire atomic instruction. The trigger is a load-acquire instruction whose destination register equals its source register and whose source is a disallowed context/packet/flow_keys/sock pointer (e.g. the sk field of struct __sk_buff). Limiting factors: local access only, privilege to load BPF, the specific new load-acquire feature must be present, and default-hardened distros that block unprivileged BPF significantly narrow the exposed population.

Impact

This is one of the genuinely higher-priority Linux kernel BPF flaws rather than a high-CVSS-but-low-real-risk crash bug. The vendor CVSS 7.8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) is well-supported here because the description explicitly states this is a TYPE CONFUSION, not merely a kernel-memory leak: a BPF load-acquire whose destination equals its source register bypasses atomic_ptr_type_ok(), and because bpf_convert_ctx_accesses() does not rewrite atomic loads, a register ends up typed as PTR_TO_SOCK_COMMON_OR_NULL while actually holding unconverted struct sk_buff bytes. Verifier type confusions are a classic local-privilege-escalation primitive, so the C:H/I:H/A:H impact is defensible - unlike the DoS-primary UAF cousins in this batch. The main caveat is on privilege: PR:L is credible only because BPF program load requires CAP_BPF/CAP_SYS_ADMIN and unprivileged BPF is disabled by default (kernel.unprivileged_bpf_disabled=1) on modern distros, so realistically an attacker needs CAP_BPF. No EPSS, KEV, or POC signals are present, and this is a brand-new feature bug patched quickly, so exploitation is currently theoretical but the primitive quality is high. CWE is listed as N/A; this should be CWE-843 (type confusion). The 'Information Disclosure' tag understates and mislabels the issue - the description itself contrasts it against a mere leak.

Exploit ScenarioDerived

A local user with CAP_BPF loads a crafted eBPF program containing a load-acquire instruction that fetches a context pointer field (e.g. the sk field of struct __sk_buff) into its own source register, causing the verifier to accept a register typed as a sock pointer that actually contains raw struct sk_buff bytes. After passing the NULL check, subsequent operations dereference the confused pointer, giving a type-confusion primitive usable for kernel memory corruption and privilege escalation. No public exploit is identified at time of analysis; the report references a selftest but not a weaponized PoC.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 18, 2026

A type-confusion flaw in the Linux kernel BPF verifier lets a local user who is allowed to load eBPF programs (CAP_BPF or CAP_SYS_ADMIN) turn an otherwise-rejected load-acquire of a disallowed context pointer - such as the sk field of struct __sk_buff - into an unchecked raw read of the underlying kernel object, after which the register can be reused with an inconsistent pointer type. Kernels from 6.15 up to the fixed stable releases 6.18.52 and 7.2.6 (mainline 7.3-rc1) are affected. CVSS 3.1 rates it 7.8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H); no public exploit code and no CISA KEV entry were identified at time of analysis, and real-world exposure is narrowed because unprivileged BPF is disabled by default (kernel.unprivileged_bpf_disabled=1) on mainstream distributions.

RemediationAI

Vendor-released patches are available: upgrade to Linux 6.18.52 or Linux 7.2.6 (or mainline 7.3-rc1) and apply the stable commits published at https://git.kernel.org/stable/c/6ee7b00888498cf387dd30729e18a05328b94709, https://git.kernel.org/stable/c/422a416041172af1ac610736d5f556d22b31b115, and https://git.kernel.org/stable/c/b87803391baa7e0bef60549d8841f12e549ad057; distribution users should follow their vendor's errata for the matching branch, since a build containing the load-acquire feature but not the reordered check remains vulnerable even if the version number is higher than the original report. Where immediate patching is not possible, the most effective compensating control is to keep eBPF loading restricted to fully trusted principals: confirm kernel.unprivileged_bpf_disabled=1 in /etc/sysctl.conf (and set it explicitly at boot), and drop CAP_BPF and CAP_SYS_ADMIN from any container or workload that does not strictly need to load programs - the trade-off is that Cilium, Falco, eBPF-based observability agents, and some container runtimes will stop functioning and require privileged sidecars or pre-loaded programs. Note that this control only removes the unprivileged path; it does not protect against an attacker who already holds CAP_BPF/CAP_SYS_ADMIN, for whom patching is the only real fix. Disabling BPF entirely via kernel.unprivileged_bpf_disabled=2 is stronger but breaks all in-kernel BPF-dependent tooling, and security-module hooks cannot reliably filter the individual load-acquire instruction, so there is no surgical runtime workaround. Refer to https://nvd.nist.gov/vuln/detail/CVE-2026-90312 and the vendor/kernel stable advisories for branch-specific guidance.

Affected VersionsENISA

Linux patch: 6.18.52
Linux 6.15
Linux c03bb2fa327e4c25d6c5360a8803a4b1cdc2d0b9 <6ee7b00888498cf387dd30729e18a05328b94709
Linux patch: 0
Linux c03bb2fa327e4c25d6c5360a8803a4b1cdc2d0b9 <422a416041172af1ac610736d5f556d22b31b115
Linux patch: 7.3-rc1
Linux patch: 7.2.6
Linux c03bb2fa327e4c25d6c5360a8803a4b1cdc2d0b9 <b87803391baa7e0bef60549d8841f12e549ad057

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 bug lives in the verifier's handling of BPF atomic instructions, specifically load-acquire (BPF_ATOMIC with BPF_LOAD_ACQ). In check_atomic_load(), check_load_mem() is invoked before atomic_ptr_type_ok(). When a load-acquire writes back into its own source register (dst_reg == src_reg), check_load_mem() overwrites the type recorded for src_reg with the type of the loaded value, so the later atomic_ptr_type_ok() call no longer sees the original source pointer and fails to reject the disallowed pointer classes (ctx, pkt, flow_keys, sock). Because bpf_convert_ctx_accesses() does not rewrite atomic loads, the raw access to the kernel object is left in the generated program; the destination type is taken from the context access itself, so a load-acquire of the sk field of struct __sk_buff leaves the register typed PTR_TO_SOCK_COMMON_OR_NULL - a value type_is_sk_pointer() also rejects - while the register actually holds unconverted struct sk_buff bytes. Once the verifier's NULL check passes, this is a genuine type confusion rather than a plain information leak. The fix reorders validation so that check_reg_arg() verifies src_reg and atomic_ptr_type_ok() validates the source pointer type before the load, mirroring check_atomic_rmw(). Register-range validation is already handled earlier by check_and_resolve_insns() (commit 503d21ef8eac, "bpf: Do register range validation early"), and the sole exemption there, is_stack_arg_ldx(), requires BPF_LDX | BPF_MEM | BPF_DW and therefore never matches a BPF_ATOMIC instruction, so atomic_ptr_type_ok() cannot dereference out-of-range register state and the out-of-bounds read addressed by the earlier Fixes commit does not reappear. The record carries no CWE, but the behavior maps to the type-confusion class (CWE-843): a validation-ordering error in the verifier that causes a value of one pointer type to be consumed as another.

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.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.8 HIGH

Local BPF-load access (PR:L, CAP_BPF-gated) deterministically crafts the load-acquire dst==src condition (AC:L); genuine verifier type confusion yields full kernel memory corruption, so C:H/I:H/A:H.

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 6.7 MEDIUM
AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
Red Hat 7.0 MEDIUM

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

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

Lifecycle Timeline

4
CVSS changed
Sep 18, 2026 - 18:22 NVD
7.8 (HIGH)
Patch available
Sep 17, 2026 - 17:19 EUVD
CVE Published
Sep 17, 2026 - 16:08 cve.org
HIGH 7.8
CVE Published
Sep 17, 2026 - 16:08 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

bpf: Check load-acquire src ptr type before the load

check_atomic_load() calls check_load_mem() before atomic_ptr_type_ok(). For a load-acquire that fetches into its own source register (dst_reg == src_reg), check_load_mem() overwrites src_reg's type with the type of the loaded value, so the subsequent atomic_ptr_type_ok() no longer sees the source pointer and fails to reject the disallowed types (ctx, pkt, flow_keys, sock).

Since bpf_convert_ctx_accesses() does not rewrite atomic loads, the raw access to the underlying kernel object is left in place. The destination type is taken from the ctx access itself, so a load-acquire of the sk field of struct __sk_buff for example leaves the register typed as PTR_TO_SOCK_COMMON_OR_NULL, which type_is_sk_pointer() does not match either, while it actually holds unconverted struct sk_buff bytes. Once the NULL check has passed this is a type confusion, not just a leak of kernel data.

Validate src_reg with check_reg_arg() and check the source pointer type with atomic_ptr_type_ok() before the load again, mirroring check_atomic_rmw(). Out-of-range register numbers are already rejected earlier by check_and_resolve_insns() (commit 503d21ef8eac ("bpf: Do register range validation early")), and the only exemption there, is_stack_arg_ldx(), requires BPF_LDX | BPF_MEM | BPF_DW and thus never matches a BPF_ATOMIC insn. atomic_ptr_type_ok() can therefore not dereference register state out of bounds, that is, the out-of-bounds read addressed by the Fixes commit below does not reappear (as proven also via selftest).

Executive ViewAI

Why It Matters

A memory-safety defect in the Linux kernel's eBPF verifier (CVE-2026-90312, CVSS 7.8) affects hosts running kernel releases 6.15 through 6.18.51 and 7.2.5, allowing a local user already holding CAP_BPF or CAP_SYS_ADMIN to gain unchecked read/write access to kernel memory - effectively full control of the host and, in containerized or multi-tenant environments, a potential path across workload boundaries. Exploitation requires local access plus an elevated BPF capability, and mainstream distributions disable unprivileged BPF by default, which narrows the realistic attack surface but does not eliminate risk for platform, Kubernetes node, and hypervisor estates. Leadership should care because a kernel-level compromise defeats workload isolation and undermines the trust boundary the entire cloud and virtualization strategy depends on.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Low
Linux ubiquitous but BPF load-acquire is a brand-new 6.15+ feature, narrow version window
Data Quality
5 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.2%
Patch available Yes
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

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

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
openSUSE Tumbleweed Fixed
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

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