Skip to main content

Linux Kernel EUVDEUVD-2026-115266

| CVE-2026-99224 HIGH
2026-11-02 Linux GHSA-hcgw-fq49-4f77
7.0
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

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

  1. Access
    Gain local access with View permission on module-typed key
  2. Delivery
    Invoke KEYCTL_DESCRIBE to save key->type->name
  3. Exploit
    Race concurrent module unload (unregister_key_type)
  4. Execution
    Second kvasprintf pass reads freed module memory
  5. Impact
    Kernel page fault/oops or freed-memory disclosure

Vulnerability Assessment

Exploitation Conditions

Concrete prerequisites: (1) the kernel must provide the relevant key type from a LOADABLE module rather than built-in - the description explicitly cites AF_RXRPC=m - since a built-in (=y) type is never unregistered/freed and cannot trigger the fault; (2) a local attacker must hold at least View permission on a key of that module-provided type to call KEYCTL_DESCRIBE; and (3) a concurrent unregister_key_type() via the module's exit path (af_rxrpc_exit) must occur and win the race against the describing task inside the window between kvasprintf()'s two formatting passes. Limiting factors that reduce realistic risk: exploitation is local only (AV:L), the race window is narrow (AC:H), the triggering module unload is itself a privileged operation not controlled by an unprivileged attacker, and systems that compile the affected key-type modules as built-in are not exposed.

Impact

This is a genuine but constrained local kernel issue, not an internet-facing emergency. The CVSS 3.1 vector (AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H, base 7.0) is internally consistent with the description: AV:L reflects that the attacker must call keyctl locally, AC:H reflects the narrow race window between kvasprintf()'s two formatting passes and a concurrent module unload, and PR:L reflects that the describing task only needs View permission on the key. The real-world priority signals are modest and non-conflicting: vuln.today assigns 'this_week' (not act_now/emergency), there is no CISA KEV listing, no EPSS score is supplied, and no proof-of-concept or exploit reference is present - only the fix commits. So exploitation status is 'no public exploit identified at time of analysis.' One honest caveat on the vector itself: the vulnerable read occurs in the unprivileged KEYCTL_DESCRIBE path (PR:L is defensible), but reliably WINNING the race depends on a concurrent unregister_key_type()/module unload, which is itself a privileged action (typically CAP_SYS_MODULE) rather than something an unprivileged attacker controls - this makes dependable self-contained exploitation materially harder than PR:L alone suggests. The impact labeling also deserves scrutiny: this is a use-after-free READ of freed module storage, so the realistic outcomes are a kernel oops (availability/DoS, well evidenced by the supplied Oops/page-fault trace) and possible disclosure of freed kernel memory to userspace, rather than memory corruption with integrity impact. Overall: treat as a scheduled kernel-update item, consistent with the 'this_week' label, not a drop-everything issue.

Exploit ScenarioDerived

A local user holding View permission on a key whose type is supplied by a loadable module (the description cites a kernel built with AF_RXRPC=m) issues KEYCTL_DESCRIBE; the kasprintf() path saves key->type->name and completes its first formatting pass, then stalls on a GFP_KERNEL allocation. If a concurrent, privileged unload of that module (af_rxrpc_exit → unregister_key_type) retires the key and frees the module during that window, the second formatting pass reads the freed name from released module storage, faulting in string() and oopsing the kernel (or leaking stale freed memory into the userspace describe buffer). No proof-of-concept or exploit code is referenced in the available data, and the high attack complexity reflects this tight timing requirement.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

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

Alert me

AnalysisAIv1 – Nov 02, 2026

Local use-after-free in the Linux kernel key-management subsystem: keyctl_describe_key() (KEYCTL_DESCRIBE) passes key->type->name into kasprintf() without holding key->sem, so the retained key reference pins the key but not the module that supplies its type. If a privileged module unload (the description cites af_rxrpc_exit() with AF_RXRPC built as a module, =m) retires the type and free_module() releases the name between the formatter's two allocation-separated passes, the second pass reads freed module storage and faults in string(). Affected are kernels whose key type is provided by a loadable module, where a local user holding at least View permission on such a key races a concurrent module unload; the assessed vector is CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:H, reflecting local-only, narrow-window exploitation that can crash the kernel and read stale kernel memory, but not a controllable write. No public exploit code or PoC reference and no CISA KEV entry were reported, and exploitation requires a privileged module unload the unprivileged attacker does not control, so this is not an internet-facing emergency - though the published stable-tree fixes should be picked up this week.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed. Apply the stable-tree commit matching your kernel branch from the references - 19c4de819e52b7f606468fbfe4fcef4e812e2777, a49e6c9a1a5b3457c946a8efb616ce13b4ca8194, 916667df7695366f23cfaf365b5840b228cc4b2e, dddd3a1ab7d12ee163477918ff6eb943361db4fe, 3c3cfd9e262afc9558c38f8cec57f09d10988546, 6b613747f7ea309ada5b8d05b55398c338f7a968, dea367df18e3a4faac393e3a4e818ee03af89b19 or 0461bc8f91116aae4a020e15f4e1c1fd535ab35e - or take the corresponding vendor kernel update, since the fix makes KEYCTL_DESCRIBE hold key->sem for reading across kasprintf() and fall back to the never-freed key_type_dead name when retirement wins the lock. Where patching must be deferred, the exposure is configuration-dependent: building the affected key-type providers such as AF_RXRPC into the kernel (=y) rather than as loadable modules removes the unregister/free path that triggers the fault, at the cost of a larger kernel image and no ability to reload or unload the protocol code at runtime. Restricting CAP_SYS_MODULE to the smallest possible set of administrators raises the bar for the concurrent unload the race requires, but does not fix the underlying use-after-free and leaves the window open for any privileged actor. Tightening which local users hold View permission on keys of module-backed types reduces the number of tasks that can reach KEYCTL_DESCRIBE, though it is only a partial reduction because the bug still exists for any permitted caller. System owners on configurations that compile the affected key types as built-in are not exposed, per the assessed prerequisites.

Affected VersionsENISA

Linux aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7 <0461bc8f91116aae4a020e15f4e1c1fd535ab35e
Linux aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7 <dddd3a1ab7d12ee163477918ff6eb943361db4fe
Linux 3.18
Linux patch: 6.18.60
Linux aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7 <6b613747f7ea309ada5b8d05b55398c338f7a968
Linux patch: 6.12.115
Linux patch: 7.3.1
Linux aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7 <19c4de819e52b7f606468fbfe4fcef4e812e2777
Linux aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7 <dea367df18e3a4faac393e3a4e818ee03af89b19
Linux aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7 <3c3cfd9e262afc9558c38f8cec57f09d10988546
Linux aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7 <916667df7695366f23cfaf365b5840b228cc4b2e
Linux patch: 7.2.14
Linux aa9d4437893f7e015ce5b6d6c443a9ba92c8a2e7 <a49e6c9a1a5b3457c946a8efb616ce13b4ca8194
Linux patch: 6.1.191
Linux patch: 5.15.224
Linux patch: 5.10.273
Linux patch: 0
Linux patch: 6.6.161

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 flaw sits in the kernel keyring infrastructure: a key object carries a reference to its key_type, and key_type->name is a string owned by whichever module registered the type via register_key_type(). keyctl_describe_key() builds the /proc-style description with kasprintf(), which is implemented on top of kvasprintf(); that helper performs two formatting passes over the saved argument list with a GFP_KERNEL allocation in between, so the pointer to key->type->name must remain valid across both passes. Holding a reference on the key keeps the key and its payload alive but does not pin the type's owning module, and the existing code did not take key->sem around the formatting call - the trigger is not a generic heap bug but specifically this missing lock, as the description states. When unregister_key_type() runs from the module's exit path, it removes the type from the registry and waits on key_gc_keytype(); the collector takes key->sem for writing, retypes the retained key to the core key_type_dead and completes retirement, after which free_module() can release the type and its name. The queued formatter then resumes its second pass and dereferences released module storage, producing the reported supervisor read page fault in string() via vsnprintf(). The upstream remediation holds key->sem for reading across kasprintf() and releases it immediately afterwards, including on the allocation-failure path and before copying to userspace; if retirement wins the lock first, formatting falls back to the core key_type_dead name, which is never freed. No CWE identifier was supplied with the record, but the root cause class is a race-condition use-after-free of module-owned memory.

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

Local keyctl call (AV:L) needing only View permission (PR:L) but a narrow race against module unload (AC:H); read-only UAF leaks freed kernel memory (C:H) and oopses the kernel (A:H), with no write, so I:N.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:H
4.0 AV:L/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:H/SC:N/SI:N/SA:N

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

2
Patch available
Nov 02, 2026 - 17:18 EUVD
CVE Published
Nov 02, 2026 - 16:06 cve.org
HIGH 7.0

DescriptionCVE.org

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

keys: Protect the type name while describing a key

keyctl_describe_key() must keep the key type's name alive until kasprintf() has consumed it. The retained key reference keeps the key and its description alive, but does not pin the module providing its type. The name is passed to kasprintf() without holding key->sem.

kvasprintf() uses the saved name pointer in two formatting passes, with a GFP_KERNEL allocation between them. With AF_RXRPC=m, a task that passes View permission before type retirement can overlap a privileged module unload in this order:

  1. KEYCTL_DESCRIBE looks up the key, saves key->type->name in the

kasprintf() arguments and completes the first formatting pass.

  1. While the formatter is delayed before its second pass,

af_rxrpc_exit() calls unregister_key_type(), which removes the type from the registry and waits for key_gc_keytype().

  1. The collector takes key->sem for writing, retypes the retained key

to key_type_dead and completes retirement. Unregistration and module exit return, allowing free_module() to release the type and name.

  1. The formatter resumes its second pass and reads the saved name from

released module storage, which can fault in string().

Hold key->sem for reading across kasprintf(). The collector then cannot retype the key or complete retirement until both formatting passes have finished. If retirement wins the lock first, formatting uses the core key_type_dead name instead. Release the semaphore immediately after kasprintf(), including on allocation failure, before copying to userspace.

Oops report as below:

BUG: unable to handle page fault for address: fffffbfff8054794 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page RIP: 0010:string+0x23f/0x470 Call Trace: vsnprintf+0x330/0x1110

Executive ViewAI

Why It Matters

A high-severity local use-after-free flaw in the Linux kernel's key-management subsystem (CVE-2026-99224) can allow an authenticated local user to crash affected systems or read stale kernel memory by racing a privileged module unload. This primarily impacts Linux servers and workstations where kernel key types are provided by loadable modules, such as AF_RXRPC, potentially causing availability disruptions. While exploitation requires local access and precise timing, leadership should prioritize mitigations for critical infrastructure.

Business Impact: Medium
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: restrict local access to trusted users, blacklist the af_rxrpc module if not required, monitor for unusual kernel crashes or module unload events, and enforce strict least-privilege policies to limit unprivileged key operations.

Threat Intelligence Overview

Prevalence
Ubiquitous
Linux kernel keys subsystem; present in virtually all Linux deployments
Data Quality
2 sources
Confidence: Low

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 N/A
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.

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