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
Lifecycle Timeline
3DescriptionCVE.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.
AnalysisAI
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.
Technical ContextAI
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.
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.
Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),
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
Buffer overflow in Zephyr RTOS dns_unpack_name() function causing OOB writes. PoC available.
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
Same weakness CWE-825 – Expired Pointer Dereference
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-43698