Zephyr权限索引竞争条件漏洞CVE-2026-10681
Zephyr 是 Linux 基金会托管、Apache 2.0 开源协议的轻量级实时操作系统(RTOS),专为内存、算力受限的物联网嵌入式设备设计。
一、基本情况
Zephyr 是一款面向资源受限嵌入式设备的开源实时操作系统,是由 Intel、NXP、高通等芯片厂商联合共建,轻量简单而且上手门槛低。

Zephyr 安全为原生设计,原生带内存保护、用户态权限隔离、标准化安全体系,更适合有安全、合规、长期维护需求的商用量产设备。
栋科技漏洞库关注到Zephyr userspace 动态对象子系统线程权限索引竞争条件漏洞,已追踪为CVE-2026-10681, CVSS 3.X评分 6.5。
二、漏洞分析
CVE-2026-10681是 Zephyr 相关版本漏洞,该缺陷在 2018 年引入线程专属权限索引逻辑时产生,所有版本直至 v4.4.0 均存在此问题。
其 userspace 子系统中 thread_idx_alloc() 在未持有 lists_lock 的情况下对全局位图 _thread_idx_map[] 执行非原子读写修改,
多核并发分配时可分配到相同的 tidx,使两条用户线程在内核对象 perms[] 位域中共享同一权限位而绕过用户空间 ACL 隔离。
受影响版本中,thread_idx_alloc() 仅以非原子的 &=~BIT() 操作扫描并占用 _thread_idx_map[] 的最低空闲位,
而 thread_idx_free() 又在持有 lists_lock 的情况下以 |= BIT() 释放同一位置;
SMP 系统中两条用户线程通过 k_object_alloc(K_OBJ_THREAD) 同时发起分配时可观察到同一空闲位,
并各自创建 K_OBJ_THREAD 对象返回相同的 thread_id,使二者在内核对象的 perms[] 位域中互为别名;
同时 alloc 与 free 之间存在 lost-update 窗口,可能造成 thread index 池泄漏;
该缺陷自 2018 年引入 per-thread permission index 起持续存在,
影响所有启用 CONFIG_USERSPACE、CONFIG_DYNAMIC_OBJECTS 与 CONFIG_SMP 配置的 Zephyr 版本直至并包括 v4.4.0。
具体来说,在 Zephyr 内核用户态动态对象子系统中,kernel/userspace/userspace.c 文件内的 thread_idx_alloc() 函数,
在全局位图数组 _thread_idx_map[] 中分配新线程权限索引时,未持有 lists_lock 锁。
在对称多处理器(SMP)系统上,两个用户态线程并发调用系统调用 k_object_alloc(K_OBJ_THREAD) 时,
会同时读取到同一个空闲低位,执行相同的非原子读改写操作清除该位,并返回完全相同的线程索引编号。
随后两个新建的 K_OBJ_THREAD 线程对象会被分配同一个线程 ID,
这会导致两个用户线程在内核所有对象的权限位图 perms[] 中复用同一个比特位:后续只要给其中一个线程授予某内核对象访问权限,
另一个线程也会同步获得权限,彻底破坏用户态访问控制列表(ACL)的隔离机制。
除此之外,分配逻辑中无锁执行 &=~BIT() 清除比特位、释放函数内加锁执行 |= BIT() 设置比特位,
两段操作之间存在数据丢失竞争窗口,还会造成线程索引池条目永久泄露。
任意用户态线程均可通过无权限限制的系统调用 __syscall k_object_alloc 触发该缺陷;
漏洞生效依赖编译配置 CONFIG_USERSPACE、CONFIG_DYNAMIC_OBJECTS、CONFIG_SMP 同时开启。
三、影响范围
Zephyr ≤ v4.4.0
四、修复建议
Zephyr>v4.4.0
五、参考链接
管理员已设置登录后刷新可查看