Skip to main content

Linux Kernel EUVDEUVD-2026-35078

| CVE-2026-46274 HIGH
Use After Free (CWE-416)
2026-06-08 Linux GHSA-52w9-98q8-6pwf
7.8
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

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

  1. Recon
    Obtain local code execution as unprivileged user
  2. Delivery
    Open io_uring ring on victim task
  3. Exploit
    Submit non-hashed request followed by hashed bucket-0 request
  4. Install
    Cancel hashed work to corrupt hash_tail[0]
  5. C2
    Let non-hashed io_kiocb free into req_cachep slab
  6. Execute
    Heap-spray reclaimed slab with controlled data
  7. Impact
    Enqueue new hashed bucket-0 work to trigger UAF write and escalate to root

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory lifecycle management
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires the ability to call io_uring_setup/io_uring_enter on the target host, i.e., an unprivileged local account or code execution inside a container or sandbox whose seccomp/landlock policy permits io_uring; on distributions that ship with kernel.io_uring_disabled=0 (the default on most stock kernels in the 5.9-7.0 range) this is satisfied by any logged-in user. The attacker must additionally win a small race - queue a non-hashed work item, get it placed immediately before a hashed bucket-0 work item on the same per-task io_wq work_list, then cancel the hashed item before the worker drains it - and must control slab allocations well enough to re-occupy the freed io_kiocb before the next bucket-0 hashed enqueue. Exploitation is LIMITED to systems where io_uring is enabled and reachable (so kernel.io_uring_disabled=1/2, containers with seccomp blocking the io_uring_* syscalls, and kernels built without CONFIG_IO_URING are not exposed), and is bounded to the lifetime of the offending task because the vulnerable io_wq is per-tctx; no remote network path exists (AV:L).

Impact

CVSS 3.1 base score 7.8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) is consistent with a local UAF that yields full kernel compromise once reached, and the trigger is reachable from any process able to call io_uring_setup/io_uring_enter - no special capability beyond what unprivileged users normally have on most distros. EPSS of 0.02% (5th percentile) and absence from CISA KEV indicate no observed exploitation in the wild, but that is expected: kernel-internal race-condition UAFs are typically weaponized as part of local-privilege-escalation chains rather than mass-scanned, so a low EPSS does not equal low real-world risk for multi-tenant Linux hosts, container hosts, or sandbox-escape scenarios. The reproduction primitive (queue a non-hashed work item ahead of a hashed bucket-0 item, cancel the hashed one, free the non-hashed one, then enqueue another hashed bucket-0 work) is described in enough detail in the commit message to guide an exploit writer, so the practical timeline-to-PoC is short. No conflicting signals between sources; the main uncertainty is which mainline and stable trees a given fleet runs, since the introducing commit (204361a77f40) ships in 5.9 and the fix has been backported to 6.6.141, 6.12.91, 7.0.10, and 6.18.33 per EUVD.

Exploit ScenarioDerived

An unprivileged local user on a multi-tenant Linux host (e.g., a shared build server, a container that shares the host kernel, or a SaaS sandbox) crafts a sequence of io_uring submissions that places a non-hashed request immediately before a hashed bucket-0 request on the same io-wq work_list, cancels the hashed request to trigger the buggy hash_tail[] fix-up, lets the non-hashed io_kiocb complete and return to the slab, then sprays the slab with attacker-controlled data before submitting another hashed bucket-0 work to weaponize the dangling pointer dereferenced by io_wq_insert_work(). The resulting controlled kernel write is then converted to arbitrary code execution or credential overwrite to obtain root or escape the container. No public exploit identified at time of analysis, but the upstream commit message documents the racing sequence in enough detail to seed PoC development.

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

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

Alert me

AnalysisAIv1 – Jun 14, 2026

Local privilege escalation via use-after-free in the Linux kernel io_uring io-wq worker subsystem allows an unprivileged local user to corrupt kernel memory and potentially execute arbitrary code in kernel context. The flaw lives in io_wq_remove_pending(), where a missing io_wq_is_hashed() check on the predecessor work item lets a non-hashed io_kiocb be recorded in wq->hash_tail[0]; after that request is freed back to req_cachep, the stale pointer is dereferenced on the next hashed bucket-0 enqueue. EPSS is very low (0.02%) and no public exploit identified at time of analysis, but the bug is reachable from any process that can issue io_uring syscalls.

RemediationAI

Vendor-released patch: upgrade to mainline 7.1-rc4 or to a stable kernel containing the backport - specifically 6.6.141, 6.12.91, 7.0.10, or 6.18.33 - and rebuild distro kernels accordingly, then reboot affected hosts. The fix commits are published at https://git.kernel.org/stable/c/d6bda9df0c0a3080804181464d5c0f4d78a4e769, https://git.kernel.org/stable/c/d376c131af7c7739a87ff037ed2fdb67c2542c8a, https://git.kernel.org/stable/c/d6a2d7b04b5a093021a7a0e2e69e9d5237dfa8cc, https://git.kernel.org/stable/c/5a20ebf0c81b61f5ea3b1b529c100cad69b9f603, and https://git.kernel.org/stable/c/252c5051dba9c709b6a72f2866f93e5e618b3f06, and amount to adding an io_wq_is_hashed() check before the hash comparison in io_wq_remove_pending(). If patching must be deferred, disable unprivileged access to io_uring by setting kernel.io_uring_disabled=2 via sysctl (blocks all io_uring use; will break applications that rely on it such as recent QEMU, RocksDB, and some container runtimes), or kernel.io_uring_disabled=1 to gate it behind the io_uring_group capability (less disruptive but requires per-app rollout). On systems where io_uring is not required, building or booting a kernel without CONFIG_IO_URING removes the attack surface entirely at the cost of losing the API for any future workload.

Affected VersionsENISA

Linux 204361a77f4018627addd4a06877448f088ddfc0 <d6bda9df0c0a3080804181464d5c0f4d78a4e769
Linux patch: 0
Linux 204361a77f4018627addd4a06877448f088ddfc0 <d376c131af7c7739a87ff037ed2fdb67c2542c8a
Linux patch: 7.1-rc4
Linux 13f35a2c0fd5c6a4fcd8903542b053bcc914fcf5
Linux 204361a77f4018627addd4a06877448f088ddfc0 <d6a2d7b04b5a093021a7a0e2e69e9d5237dfa8cc
Linux patch: 6.12.91
Linux 204361a77f4018627addd4a06877448f088ddfc0 <5a20ebf0c81b61f5ea3b1b529c100cad69b9f603
Linux patch: 7.0.10
Linux 204361a77f4018627addd4a06877448f088ddfc0 <252c5051dba9c709b6a72f2866f93e5e618b3f06
Linux patch: 6.18.33
Linux 5.8.6 <5.9
Linux 5.9
Linux patch: 6.6.141

Affected Packages

euvd linux fix: 5.9

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 io-wq, the per-task worker pool used by io_uring to execute requests that must be punted out of the submission path (e.g., requests that would block). io-wq tracks hashed work - typically buffered writes to the same inode that must be serialized - in per-bucket hash_tail[] pointers, and uses io_get_work_hash() (atomic_read(&work->flags) >> IO_WQ_HASH_SHIFT) to read the hash value. Because non-hashed work has zero in the hash bits, io_get_work_hash() returns 0 for it, colliding with hash bucket 0; io_wq_remove_pending() compared hash values without first calling io_wq_is_hashed() on the predecessor, allowing a non-hashed io_kiocb pointer to be stored as the bucket-0 tail. The io_kiocb is then freed via the non-hashed fast path in io_get_next_work(), leaving a dangling pointer in a tctx-scoped io_wq that survives ring open/close, so io_wq_insert_work() / wq_list_add_after() later writes through freed memory - a classic CWE-416 use-after-free in a slab-allocated request object.

Know when the next one hits your stack

  • 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.0 HIGH

Local io_uring access requires PR:L; winning the cancel/free/realloc race against per-task io_wq raises AC to H; successful UAF yields full kernel C/I/A compromise.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE 5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Red Hat 7.8 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
Jun 14, 2026 - 06:22 NVD
7.8 (HIGH)
Patch available
Jun 08, 2026 - 17:01 EUVD
CVE Published
Jun 08, 2026 - 14:30 nvd
UNKNOWN (no severity yet)
CVE Published
Jun 08, 2026 - 14:30 cve.org
HIGH 7.8

DescriptionCVE.org

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

io-wq: check that the predecessor is hashed in io_wq_remove_pending()

io_wq_remove_pending() needs to fix up wq->hash_tail[] if the cancelled work was the tail of its hash bucket. When doing this, it checks whether the preceding entry in acct->work_list has the same hash value, but never checks that the predecessor is hashed at all. io_get_work_hash() is simply atomic_read(&work->flags) >> IO_WQ_HASH_SHIFT, and the hash bits are never set for non-hashed work, so it returns 0. Thus, when a hashed bucket-0 work is cancelled while a non-hashed work is its list predecessor, the check spuriously passes and a pointer to the non-hashed io_kiocb is stored in wq->hash_tail[0].

Because non-hashed work is dequeued via the fast path in io_get_next_work(), which never touches hash_tail[], the stale pointer is never cleared. Therefore, after the non-hashed io_kiocb completes and is freed back to req_cachep, wq->hash_tail[0] is a dangling pointer. The io_wq is per-task (tctx->io_wq) and survives ring open/close, so the dangling pointer persists for the lifetime of the task; the next hashed bucket-0 enqueue dereferences it in io_wq_insert_work() and wq_list_add_after() writes through freed memory.

Add the missing io_wq_is_hashed() check so a non-hashed predecessor never inherits a hash_tail[] slot.

Executive ViewAI

Why It Matters

A privilege escalation vulnerability in the Linux kernel's io_uring subsystem allows any local user to execute arbitrary code at the kernel level. This creates immediate risk of system compromise and privilege escalation for any organization with untrusted local users or guest accounts on Linux systems.

Business Impact: High
Compensating Controls

Apply vendor patch. Interim mitigations if patch deployment is delayed: restrict io_uring syscall access via seccomp profiles, disable unprivileged user namespace creation, limit local system access to essential accounts only.

Threat Intelligence Overview

EPSS Score
0.0%
Top 95% exploitable
Data Quality
6 sources
Confidence: High

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.0%
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
Scheduled
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

Attack Technique

Use-after-free vulnerabilities occur when a program continues to access memory through a pointer after that memory has been deallocated.

Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.

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

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