Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconGain unprivileged user-thread foothold
-
DeliveryHold granted access to live k_pipe
-
ExploitCall k_pipe_init syscall to re-init pipe
-
InstallOrphan threads pended on pipe
-
C2Waiter times out or is woken
-
Executesys_dlist_remove writes through stale pointers
-
ImpactKernel list corruption and lost wakeups
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Expired pointer prevention
|
| Exploitation Conditions | Exploitation requires a Zephyr build compiled with CONFIG_USERSPACE, an attacker-controlled unprivileged user thread, and that thread having been explicitly granted access permission to a k_pipe kernel object that is actively shared and in use by other threads. The trigger is invoking the k_pipe_init syscall to re-initialize that already-initialized, live pipe; the damaging invalid kernel write only materializes when a thread is (or becomes) pended in k_pipe_read()/k_pipe_write() on that pipe and is subsequently timed out or woken. Limiting factors that reduce realistic risk: the attack is local only (AV:L) and needs an existing low-privilege foothold (PR:L), it does not affect default builds without CONFIG_USERSPACE, and it requires the specific configuration where a user thread holds a permission grant to a shared pipe object - firmware that never exposes pipes to user threads is not exploitable. |
| Impact | The CVSS 3.1 base score is 7.1 with vector AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H, indicating a local, low-complexity attack requiring only low privileges and no user interaction, with high integrity and availability impact but no confidentiality impact. This is fundamentally a local privilege-context integrity/availability bug, not a remote or information-disclosure issue, so real-world priority is high only for products that actually ship CONFIG_USERSPACE with user threads granted access to shared pipe objects - a specific, non-default deployment shape. No EPSS score, KEV entry, or POC was provided, so exploitation probability cannot be quantified and no public exploit is identified at time of analysis. Note a conflicting signal: the input Tags label this 'Information Disclosure,' but the CVSS vector explicitly sets C:N and the description describes kernel-memory corruption and data loss, not disclosure - the tag appears inaccurate and integrity/availability is the true impact. There is also a scope consideration worth verifying: the description says the flaw corrupts a kernel object shared across threads/partitions, which could argue for a scope change (S:C), yet the published vector uses S:U; defenders operating multi-partition userspace configurations should treat cross-partition impact as plausible. |
| Exploit ScenarioDerived | On a CONFIG_USERSPACE Zephyr firmware image where an unprivileged partition has been granted access to a k_pipe shared with a higher-trust thread, a compromised or malicious user thread invokes the k_pipe_init syscall a second time on that in-use pipe while another thread is blocked in k_pipe_read()/k_pipe_write(). When the orphaned waiter is later timed out or woken, the scheduler dereferences its stale list node and writes through dangling pointers into kernel structures, corrupting wait-queue/scheduler state. No POC was provided, and the local attack vector with low complexity means a foothold as an unprivileged user thread is the main prerequisite. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 14, 2026
Kernel object corruption in Zephyr RTOS (v4.1.0 through v4.4.0) lets a deprivileged user thread on CONFIG_USERSPACE builds re-initialize a live k_pipe to which it has been granted access, orphaning threads already blocked on that pipe. Because z_impl_k_pipe_init() unconditionally resets the ring buffer and wait queues without accounting for pended waiters, a subsequent timeout or wake drives sys_dlist_remove() through dangling pointers, producing an attacker-influenced invalid kernel write, list corruption, lost wakeups, and silent data loss. There is no public exploit identified at time of analysis and it is not listed in CISA KEV; the fix hardens the k_pipe_init syscall verifier.
RemediationAI
Apply the upstream fix that switches the z_vrfy_k_pipe_init() verifier from K_SYSCALL_OBJ() to K_SYSCALL_OBJ_NEVER_INIT(), delivered in commit https://github.com/zephyrproject-rtos/zephyr/commit/4424aa681e0b80e9cbd0ae27a987d582be88cb74 and described in advisory https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-p8w8-3x99-mg8f; an upstream fix (commit) is available but a specific tagged patched release version was not independently confirmed from the provided data, so integrators should rebuild from a Zephyr tree containing this commit. As a compensating control where immediate rebuild is not possible, avoid granting unprivileged user threads access to shared k_pipe kernel objects (do not add live pipes to a user thread's object permission set), or restructure affected pipe usage to kernel-only threads, accepting the functional trade-off that user-mode code can no longer directly operate on those pipes. Because the root cause is a missing already-initialized check, application-level input validation offers no mitigation and only the code fix or removing user-thread pipe access reliably closes the flaw.
Affected VersionsENISA
Affected Packages
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
Zephyr is a widely-used open-source real-time operating system for microcontrollers and embedded/IoT devices. The flaw sits in its userspace protection model (CONFIG_USERSPACE), where kernel objects such as pipes are accessed by unprivileged threads through syscalls that must be validated by a verifier. The verifier z_vrfy_k_pipe_init() in kernel/pipe.c used K_SYSCALL_OBJ(), which only requires that the k_pipe object already be a valid, initialized kernel object, instead of K_SYSCALL_OBJ_NEVER_INIT(), which additionally rejects objects that are already initialized. This maps to CWE-825 (use of a dangling/expired pointer): re-initializing an in-use pipe calls z_waitq_init() on pipe->data and pipe->space and clears pipe->waiting, leaving any thread pended in k_pipe_read()/k_pipe_write() with pended_on pointing at a cleared wait queue and stale qnode_dlist links into the now-reset embedded doubly-linked list head. The corrected code matches the pattern already used by the k_msgq_init verifier.
Know when Zephyr 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
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
Local user-thread foothold with a pipe permission grant gives PR:L/AV:L/AC:L; kernel-memory corruption and blocked threads give I:H/A:H with no disclosure (C:N).
Primary rating from Vendor (zephyr).
CVSS VectorVendor: zephyr
DescriptionCVE.org
In Zephyr's kernel pipe implementation, the userspace syscall verifier z_vrfy_k_pipe_init() in kernel/pipe.c used K_SYSCALL_OBJ() (which requires the kernel object to already be initialized) instead of K_SYSCALL_OBJ_NEVER_INIT() (which rejects an already-initialized object). As a result, on CONFIG_USERSPACE builds an unprivileged user thread that has been granted access to a k_pipe object can invoke the k_pipe_init syscall to re-initialize a pipe that is already in use.
z_impl_k_pipe_init() unconditionally resets the ring buffer, sets pipe->waiting to 0, and re-initializes both wait queues (z_waitq_init on pipe->data and pipe->space) without waking or accounting for threads currently blocked on the pipe. Any thread already pended in k_pipe_read()/k_pipe_write() is left orphaned: still marked pending with pended_on pointing at the cleared wait queue and with stale qnode_dlist links into the (now re-initialized) embedded list head.
When such an orphaned waiter is later timed out or woken, the scheduler calls sys_dlist_remove() on its stale node, writing through dangling prev/next pointers into kernel wait-queue/scheduler structures, causing list corruption (an attacker-driven invalid kernel write), lost wakeups, indefinitely blocked threads, and silent data loss. The flaw lets a deprivileged user thread corrupt the state of a kernel object shared with other threads/partitions.
The fix switches the verifier to K_SYSCALL_OBJ_NEVER_INIT(), matching the existing k_msgq_init verifier, so a user thread can no longer re-initialize a live pipe. The vulnerable code shipped in v4.1.0 and remained through v4.4.0.
Executive ViewAI
A kernel corruption vulnerability in Zephyr RTOS 4.1.0-4.4.0 allows unprivileged system users to trigger data loss and system instability on affected embedded and IoT devices. Organizations using these Zephyr versions risk silent failures, dropped messages, and unexpected device crashes in production environments. This requires urgent patching to maintain operational reliability.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),
An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on
Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit
Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS
Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner
Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability
Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable
DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul
zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(
Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul
The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte
Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c
EUVD-2026-43698
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB