Severity by source
AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
Local on-device user thread (AV:L, PR:L), success needs winning a narrow SMP race (AC:H), and userspace-to-kernel corruption crosses a trust boundary (S:C) with full kernel C/I/A impact.
Primary rating from Vendor (zephyr).
CVSS VectorVendor: zephyr
Lifecycle Timeline
1DescriptionCVE.org
Zephyr's dynamic kernel-object tracking (kernel/userspace/userspace.c, formerly kernel/userspace.c) maintains a doubly-linked list (obj_list) of dynamically allocated kernel objects. Iteration over this list in k_object_wordlist_foreach() was performed under lists_lock using the SAFE iterator (which caches the next node), but list removal and freeing of nodes was performed under different, disjoint spinlocks: objfree_lock in k_object_free() and obj_lock in unref_check(). On an SMP system, while one CPU iterated obj_list under lists_lock, another CPU could unlink and k_free() the dyn_obj node that the iterator had cached as its next pointer, causing the iterator to dereference freed kernel memory (use-after-free / dangling list traversal). All of the racing operations are reachable from unprivileged user-mode threads via system calls: k_object_alloc/k_object_alloc_size and k_object_release drive removals through unref_check() (under obj_lock), while k_thread_abort and thread creation drive the iteration through k_thread_perms_all_clear()/k_thread_perms_inherit() (under lists_lock). A deprivileged user thread on a CONFIG_SMP + CONFIG_USERSPACE build can therefore corrupt the kernel's object-tracking structures across the userspace security boundary, yielding kernel memory corruption (potential privilege escalation) or a kernel crash (denial of service). The fix removes objfree_lock and serializes every obj_list modification under lists_lock, including holding it across find+remove in k_object_free() and around unref_check() in k_thread_perms_clear(). Affects CONFIG_SMP+CONFIG_USERSPACE+CONFIG_DYNAMIC_OBJECTS configurations; the defect dates to the 2019 spinlockification (commit 8a3d57b6cc6, first released in v1.14.0) and shipped through v4.4.0.
AnalysisAI
Kernel memory corruption in the Zephyr RTOS (versions v1.14.0 through v4.4.0) lets an unprivileged user-mode thread corrupt the kernel's dynamic object-tracking list across the userspace security boundary. The flaw is a use-after-free race (CWE-416) in the obj_list traversal, exploitable only on builds combining CONFIG_SMP, CONFIG_USERSPACE, and CONFIG_DYNAMIC_OBJECTS, and can yield privilege escalation or a kernel crash. No public exploit identified at time of analysis; a vendor patch is available.
Technical ContextAI
Zephyr is a widely used open-source real-time operating system for resource-constrained embedded and IoT devices. Its userspace subsystem (kernel/userspace/userspace.c) tracks dynamically allocated kernel objects in a doubly-linked list (obj_list). The defect is a classic locking-discipline mismatch: k_object_wordlist_foreach() iterates obj_list under lists_lock using a SAFE iterator that caches the next node, while node unlink+free happens under disjoint spinlocks (objfree_lock in k_object_free(), obj_lock in unref_check()). On SMP, one CPU can k_free() the exact dyn_obj node another CPU has cached as its next pointer, so the iterator dereferences freed memory - the CWE-416 use-after-free. CPE cpe:2.3:a:zephyrproject:zephyr identifies the affected product; the root cause dates to the 2019 spinlockification (commit 8a3d57b6cc6).
RemediationAI
Patch available per vendor advisory: apply the upstream fix in commit fdc42fa256b8c2a7b27790f032d5385f8058c4a9 (https://github.com/zephyrproject-rtos/zephyr/commit/fdc42fa256b8c2a7b27790f032d5385f8058c4a9), which removes objfree_lock and serializes every obj_list modification under lists_lock, holding it across find+remove in k_object_free() and around unref_check() in k_thread_perms_clear(); follow the guidance in advisory GHSA-9x5j-h3rh-x579 and upgrade to the next Zephyr release incorporating this fix. As a temporary compensating control where rebuilding is not immediately possible, disable one of the three required Kconfig options - most practically CONFIG_DYNAMIC_OBJECTS (removing dynamic kernel-object allocation) or CONFIG_SMP (running single-core), either of which closes the race; the trade-off is loss of dynamic object allocation or of multi-core scheduling respectively, which may be unacceptable for the workload. Restricting which untrusted code can run as user-mode threads also reduces exposure but does not remove the defect.
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-416 – Use After Free
View allSame technique Privilege Escalation
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-43244