Skip to main content

Zephyr RTOS CVE-2026-10681

| EUVDEUVD-2026-49045 HIGH
Race Condition (CWE-362)
2026-07-25 zephyr
7.0
CVSS 3.1 · NVD
Share

Severity by source

Vendor (zephyr) PRIMARY
MEDIUM
qualitative
NVD
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 SMP race requires existing thread execution (PR:L, AV:L) and precise timing (AC:H); successful aliasing grants full kernel-object ACL bypass (C:H/I:H/A:H), scope unchanged.

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

Primary rating from Vendor (zephyr).

CVSS VectorNVD

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

Lifecycle Timeline

6
Analysis Updated
Aug 12, 2026 - 15:13 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Aug 12, 2026 - 15:07 vuln.today
cvss_changed
Severity Changed
Aug 12, 2026 - 15:07 NVD
MEDIUM HIGH
CVSS changed
Aug 12, 2026 - 15:07 NVD
6.5 (MEDIUM) 7.0 (HIGH)
Source Code Evidence Fetched
Jul 26, 2026 - 12:06 vuln.today
Analysis Generated
Jul 26, 2026 - 12:06 vuln.today

DescriptionNVD

In Zephyr's userspace dynamic-objects subsystem, thread_idx_alloc() in kernel/userspace/userspace.c allocated a new thread permission index from the global _thread_idx_map[] bitmap without holding lists_lock.

On SMP systems, two user-mode threads invoking the k_object_alloc(K_OBJ_THREAD) syscall concurrently can both observe the same low free bit, perform the same non-atomic RMW to clear it, and return the identical tidx.

The two newly created K_OBJ_THREAD objects are then assigned the same thread_id, so the two user threads alias a single bit position in every kernel object's perms[] bitfield: any subsequent grant of access on a kernel object to one thread is implicitly a grant to the other, defeating userspace ACL isolation. A secondary lost-update window between the unlocked &=~BIT() in alloc and the locked |= BIT() in thread_idx_free() can also leak entries from the thread-index pool.

The defect is reachable from any user-mode thread via the unrestricted __syscall k_object_alloc and is gated on CONFIG_USERSPACE, CONFIG_DYNAMIC_OBJECTS, and CONFIG_SMP. The flaw was introduced when the per-thread permission index was added in 2018 and is present in every release up to and including v4.4.0. Fixed by holding lists_lock across the bitmap RMW and the permissions clear (and inlining the obj_list traversal that previously took the lock itself).

AnalysisAI

Userspace ACL isolation is defeated in Zephyr RTOS v2.0.0 through v4.4.0 on SMP builds due to a missing spinlock in thread_idx_alloc(), allowing two concurrently executing user-mode threads to receive the same permission-index (tidx) and subsequently alias each other's ACL bit across every kernel object. Any kernel object access grant intended exclusively for one thread is silently extended to the aliasing thread, nullifying the CONFIG_USERSPACE isolation model. No public exploit or active exploitation (CISA KEV) is known at time of analysis, and SSVC marks automatable: no, but the technical impact is assessed as total, warranting prioritized patching for affected SMP deployments.

Technical ContextAI

The defect is in kernel/userspace/userspace.c within thread_idx_alloc(), which allocates entries from the global _thread_idx_map[] bitmap to assign unique per-thread permission indices (tidx). Every kernel object in Zephyr's userspace model maintains a perms[] bitfield indexed by tidx; granting a thread access to an object sets its tidx bit. Because thread_idx_alloc() performed a non-atomic read-modify-write on _thread_idx_map[] without holding lists_lock, two threads executing k_object_alloc(K_OBJ_THREAD) concurrently on an SMP system could each observe the same lowest free bit, both clear it independently, and both receive the identical tidx - a textbook CWE-362 (Concurrent Execution Using Shared Resource with Improper Synchronization). A secondary race between the unlocked &=~BIT() in alloc and the locked |= BIT() in thread_idx_free() could additionally leak index entries from the pool. The fix (commit 862ea2fbbeb2ccdf8ff994b03e2e3b4405f2c37d) acquires k_spin_lock(&lists_lock) at the top of thread_idx_alloc(), covering the entire bitmap RMW and permission-clearing traversal, and inlines the obj_list walk (previously lock-acquiring itself) to avoid deadlock. CPE cpe:2.3:a:zephyrproject:zephyr:*:*:*:*:*:*:*:* covers all affected releases.

RemediationAI

Upgrade to Zephyr v4.5.0 or a release incorporating commit 862ea2fbbeb2ccdf8ff994b03e2e3b4405f2c37d (https://github.com/zephyrproject-rtos/zephyr/commit/862ea2fbbeb2ccdf8ff994b03e2e3b4405f2c37d); the fix version is inferred from the EUVD upper bound of <4.5.0 rather than independently verified against a tagged release, so operators should confirm their target release includes the fix commit. For deployments that cannot immediately upgrade, disabling CONFIG_SMP=n in the build eliminates the SMP concurrency condition entirely but carries a significant performance regression on multi-core hardware. Disabling CONFIG_DYNAMIC_OBJECTS=n prevents the vulnerable k_object_alloc(K_OBJ_THREAD) syscall path but removes runtime kernel object allocation capability, which may break application functionality. Restricting the use of k_object_alloc(K_OBJ_THREAD) to only fully trusted user threads via application-level policy reduces attack surface but does not close the race for threads permitted to call it. Consult the Zephyr security advisory at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-j693-5rh5-8g8h for official mitigation guidance.

More in Zephyr

View all
CVE-2023-4260 CRITICAL POC
10.0 Sep 27

Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),

CVE-2023-5055 CRITICAL POC
9.8 Nov 21

Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit

CVE-2023-4257 CRITICAL POC
9.8 Oct 13

Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS

CVE-2023-3725 CRITICAL POC
9.8 Oct 06

Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner

CVE-2021-3323 CRITICAL POC
9.8 Oct 12

Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2021-3625 CRITICAL POC
9.8 Oct 05

Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable

CVE-2021-3319 CRITICAL POC
9.8 Oct 05

DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul

CVE-2018-1000800 CRITICAL POC
9.8 Sep 06

zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(

CVE-2023-4264 CRITICAL POC
9.6 Sep 27

Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul

CVE-2026-1678 CRITICAL POC
9.4 Mar 05

Buffer overflow in Zephyr RTOS dns_unpack_name() function causing OOB writes. PoC available.

CVE-2024-1638 CRITICAL POC
9.1 Feb 19

The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte

CVE-2023-5753 HIGH POC
8.8 Oct 25

Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c

Share

CVE-2026-10681 vulnerability details – vuln.today

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