CVE-2026-10681 in Zephyr
Resumen
por VulDB • 2026-07-25
En el subsistema de objetos dinámicos del espacio de usuario de Zephyr, thread_idx_alloc() en kernel/userspace/userspace.c asignaba un nuevo índice de permisos de hilo desde el mapa global _thread_idx_map[] sin mantener lists_lock.
En sistemas SMP (multiprocesador simétrico), dos hilos en modo usuario que invocan la llamada al sistema k_object_alloc(K_OBJ_THREAD) concurrentemente pueden observar ambos el mismo bit libre bajo, realizar la misma operación RMW no atómica para borrarlo y devolver idéntico tidx.
Los dos objetos K_OBJ_THREAD recién creados se asignan entonces con el mismo thread_id, por lo que los dos hilos de usuario alias una única posición de bits en cada campo perms[] de todos los objetos del kernel: cualquier concesión posterior de acceso a un objeto del kernel para uno de los hilos es implícitamente una concesión al otro, anulando el aislamiento ACL del espacio de usuario. Una ventana secundaria de actualización perdida entre la operación &=~BIT() sin bloqueo en alloc y la |= BIT() con bloqueo en thread_idx_free() también puede filtrar entradas desde el grupo de índices de hilo.
El defecto es accesible desde cualquier hilo en modo usuario a través de __syscall k_object_alloc sin restricciones y está condicionado por CONFIG_USERSPACE, CONFIG_DYNAMIC_OBJECTS y CONFIG_SMP. El fallo se introdujo cuando se añadió el índice de permisos por hilo en 2018 y está presente en todas las versiones hasta e incluyendo v4.4.0. Se corrige manteniendo lists_lock durante la operación RMW del mapa de bits y la limpieza de los permisos (y realizando inline el recorrido obj_list que previamente adquiría el bloqueo él mismo).
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.