Skip to main content

Linux Kernel EUVDEUVD-2026-87544

| CVE-2026-98163 HIGH
Race Condition (CWE-362)
2026-09-26 Linux GHSA-qwg6-2j4v-5xw5
7.0
CVSS 3.1 · NVD
View

Attack ChainAIDerived

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

  1. Access
    Local low-privileged task access
  2. Delivery
    Loop reading cgroup.procs during group-leader exit
  3. Exploit
    Win race on dying task with usage==0
  4. Execution
    get_task_struct resurrects freed task_struct
  5. Impact
    Kernel use-after-free / memory corruption

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK

1 technique across 1 tactic: 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 local access to a host running an affected kernel built with cgroups (effectively all modern Linux), and the ability to read a cgroup.procs file while concurrently creating and exiting multi-threaded process groups. The specific trigger is a dying threadgroup leader (or CSS_TASK_ITER_WITH_DEAD iteration) whose task_struct ->usage count has dropped to zero after cgroup_task_release() but before cgroup_task_free(), during the css_set_lock release window between css_task_iter_next() iterations. Limiting factors: exploitation is purely local (no network vector), needs low-but-nonzero privileges (ability to run tasks and read cgroup.procs), and above all depends on winning a very narrow timing race (AC:H) tied to RCU grace periods and task teardown ordering, making reliable exploitation difficult; default configurations are affected but the race is not deterministically triggerable.

Impact

This is a genuine but hard-to-exploit kernel memory-safety flaw, best characterized as high-CVSS/low-real-world-risk for most environments. The provided CVSS 3.1 vector (AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H = 7.0 High) is internally consistent with the description: exploitation is local (AV:L), requires an attacker-controlled task plus an unprivileged read of cgroup.procs (PR:L), and critically depends on winning a narrow race window between css_task_iter_next() invocations (AC:H). All three impact metrics are High because a use-after-free on a freed task_struct can corrupt kernel memory, enabling disclosure, tampering, or a crash. The EPSS score of 0.18% (7th percentile) strongly reinforces low real-world exploitation likelihood, which is fully expected for a race-condition UAF that needs precise timing and a specific lifecycle (a dying threadgroup leader whose refcount reaches zero while still on dying_tasks). The CVE is NOT on CISA KEV and no public PoC is indicated, so EPSS and the absence of KEV agree - there is no signal of active or widespread exploitation. The signals are therefore consistent rather than conflicting: a serious correctness bug with low practical weaponization. Note the input Tags label this 'Information Disclosure', which understates the flaw - the CVSS C:H/I:H/A:H and the UAF mechanism point to full memory corruption, not mere disclosure; treat impact as potential local privilege escalation / kernel crash, not read-only. Priority is driven by exposure to untrusted local users/containers rather than by exploitation probability.

Exploit ScenarioDerived

A local unprivileged user (or a process inside a container) continuously reads /sys/fs/cgroup/.../cgroup.procs while repeatedly spawning and exiting multi-threaded process groups, aiming to hit the race where a dying group leader's task_struct refcount drops to zero but it remains on dying_tasks. If the iterator calls get_task_struct() on that zero-refcount task, it resurrects freed memory, producing a use-after-free that can be groomed into kernel memory corruption. No public exploit code is identified at time of analysis, and the high attack complexity (precise race timing) makes reliable exploitation difficult.

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 – Oct 02, 2026

A race condition in the Linux kernel cgroup task iterator (css_task_iter_next) can hand back a task_struct whose reference count has already dropped to zero, resulting in a use-after-free that a local attacker can turn into kernel memory corruption. Only systems running affected kernels built with cgroups are exposed, and the attacker must be able to read a cgroup.procs file while concurrently spawning and tearing down multi-threaded process groups - a low-privileged but purely local position (CVSS:3.1/AV:L/AC:H/PR:L). Exploitation is gated by an extremely narrow timing window tied to RCU grace periods and task teardown ordering, so the flaw is high-severity on paper but difficult to trigger reliably; EPSS is only 0.18% (7th percentile) and no public exploit code was identified at time of analysis.

RemediationAI

Vendor-released patch: Linux 7.3-rc4 (upstream commit 057dac23d329d5c5ed62352f2659a39fd46c6d4a) and Linux 7.2.8 (stable commit 828938118d6c2bb711301748c3e39e4bed6a62f5), available via https://git.kernel.org/stable/c/057dac23d329d5c5ed62352f2659a39fd46c6d4a and https://git.kernel.org/stable/c/828938118d6c2bb711301748c3e39e4bed6a62f5; upgrade to the first stable release containing either commit and rebuild/reboot, which is the only complete fix since the bug is in core kernel code. Patch availability is confirmed by the vendor, so there is no need for long-term compensating controls, but until rebooting into a fixed kernel, operators can reduce exposure by restricting read access to cgroup.procs (and to cgroup v1 task/procs files) to trusted local users via file permissions or cgroup namespace delegation - trade-off is loss of visibility for monitoring and container tooling that reads those files. Environments that do not require CSS_TASK_ITER_WITH_DEAD users (certain legacy cgroup v1 and scheduler-controller paths) can avoid triggering the iterator's dead-task walk, but this is a code-level condition rather than a tunable and cannot be disabled by sysctl. Because the vector is local and race-dependent, hardening against local code execution and limiting untrusted multi-threaded workloads on multi-tenant hosts are useful secondary measures rather than primary mitigations. No vendor-released patch is missing here; the residual risk after applying the fix is negligible.

Affected VersionsENISA

Linux 6.19
Linux patch: 7.3-rc4
Linux patch: 7.2.8
Linux 260fbcb92bbeacfcd050410fdc2d24ab15044400 <057dac23d329d5c5ed62352f2659a39fd46c6d4a
Linux patch: 0
Linux 260fbcb92bbeacfcd050410fdc2d24ab15044400 <828938118d6c2bb711301748c3e39e4bed6a62f5

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 defect lives in the cgroup core's task iteration machinery used to populate files such as cgroup.procs. Commit 260fbcb92bbe moved dying-task cleanup from cgroup_task_release() to cgroup_task_free(), which extended how long a task remains linked on the per-css_set dying_tasks list. Iterators are intentionally allowed to walk dying_tasks (for dying threadgroup leaders and for CSS_TASK_ITER_WITH_DEAD), on the assumption that any task still on that list can still be refcounted via get_task_struct(). That assumption breaks between cgroup_task_release()/put_task_struct_rcu_user() and cgroup_task_free(): during this RCU grace-period window a task can have ->usage == 0 while still being linked on dying_tasks. Because css_set_lock is dropped between css_task_iter_next() calls, a second iteration can pick up the stale ->task_pos, call get_task_struct() on a zero refcount (an increment from 0), and return a task_struct that __put_task_struct_rcu_cb() is about to free - a classic use-after-free (CWE-362, race condition) reachable through cgroup_procs_show() and task_pid_vnr(). The repeat: loop in css_task_iter_advance() does not consult the usage count, so the fix adds a dedicated loop in css_task_iter_next() that skips de-used tasks hanging off the dying list. Signal->live cannot be used as the discriminator because it does not distinguish ordinary unreaped zombies from RCU-remnant tasks awaiting free.

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

NVD PRIMARY 7.0 HIGH
AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.0 HIGH

Local-only kernel race (AV:L), narrow timing window tied to RCU teardown gives AC:H, unprivileged local task plus cgroup.procs read gives PR:L; UAF enables full memory corruption so C/I/A:H.

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:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE 4.7 MEDIUM
AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
Red Hat 5.5 MEDIUM

Primary rating from NVD.

CVSS VectorNVD

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

Lifecycle Timeline

4
CVSS changed
Oct 02, 2026 - 21:07 NVD
7.0 (HIGH)
Patch available
Sep 26, 2026 - 10:01 EUVD
CVE Published
Sep 26, 2026 - 08:31 nvd
HIGH 7.0
CVE Published
Sep 26, 2026 - 08:31 cve.org
UNKNOWN (no severity yet)

DescriptionNVD

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

cgroup: Avoid iteration of dying tasks with zero refcount

The commit 260fbcb92bbea ("cgroup: Move dying_tasks cleanup from cgroup_task_release() to cgroup_task_free()") extended the lifetime of tasks on the dying_tasks list. The iterators have provision to go through dying_tasks because of dying threadgroup leaders or explicit CSS_TASK_ITER_WITH_DEAD, however, it was expected that such tasks can obtain a new reference (that is possible before cgroup_task_release()/put_task_struct_rcu_user()). The tasks after cgroup_task_release() and before cgroup_task_free() are subject to race when they may or may not have ->usage count > 0.

The race window is between css_task_iter_next() invocations when css_set_lock is released and we may arrive at a new ->task_pos. The iterator should not attempt to resurrect tasks whose ->usage count dropped to zero. (When that happens, __put_task_struct_rcu_cb() is already imminent and the returned task_struct would could be used after free.)

As for the fix, we cannot simply check the signal->live count of a task on the dying list because that won't distinguish regular zombies waiting to be reaped from RCU remnant tasks that are going to be free'd. Therefore add an extra check to rule out ->usage==0 tasks from any iteration.

The repeat: loop in css_task_iter_advance() doesn't consider ->usage count, so add a new loop to css_task_iter_next() to skip de-used tasks on the dying_list.

Rough illustration of the possible race

R (reader of cgroup.procs) T (thread) L (group leader) --------------------------------- -------------------------------- -------------------------------- L exits, signal->live > 0 cgroup_task_dead(L) css_set_skip_task_iters() // skips only cset->tasks list_add_tail(&L->cg_list, &cset->dying_tasks) css_task_iter_next() take css_set_lock css_task_iter_advance() leader && signal->live != 0 => it->task_pos = &L->cg_list release css_set_lock T exits --signal->live == 0 cgroup_task_dead(T) // css_set_lock release_task(T) cgroup_task_release(T) release_task(L) // zap_leader cgroup_task_release(L) put_task_struct_rcu_user(L) ...RCU... put_task_struct(L) L->usage = 0 /* L still on dying_tasks */ ...RCU... __put_task_struct(L) css_task_iter_next() // another iteration take css_set_lock it->task_pos = &L->cg_list get_task_struct(L) => addition on 0 drop css_set_lock cgroup_task_free(L) css_set_skip_task_iters() // dying skip comes too late free_task(L) cgroup_procs_show() task_pid_vnr(L)

Executive ViewAI

Why It Matters

A memory-safety race condition in the Linux kernel's cgroup task-tracking code affects any cgroup-enabled host and lets a low-privileged local user trigger kernel memory corruption that can be turned into full control of the machine. Because every workload on a host shares that kernel, a single compromised container, service account, or unprivileged shell can become a foothold for host-wide and potentially cluster-wide compromise on multi-tenant, containerized, or shared-hosting infrastructure. No public exploit code has been identified at time of analysis and the reported exploitation probability is very low, so this is a disciplined patch-management priority rather than an emergency response.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 93% exploitable
Prevalence
Ubiquitous
Linux kernel cgroup subsystem, present in virtually all Linux deployments
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
Medium

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.

Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).

Vendor StatusVendor

SUSE

Severity: Moderate
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 Not-Affected

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