CVE-2026-10681 in Zephyr
Zusammenfassung
von VulDB • 25.07.2026
Im dynamischen-Objekte-Benutzerraum-Subsystem von Zephyr hat thread_idx_alloc() in kernel/userspace/userspace.c einen neuen Thread-Berechtigungsindex aus der globalen Bitmap _thread_idx_map[] zugewiesen, ohne lists_lock zu halten.
Auf SMP-Systemen können zwei im Benutzermodus ausgeführte Threads, die den k_object_alloc(K_OBJ_THREAD)-Syscall gleichzeitig aufrufen, dasselbe niedrige freie Bit beobachten, dieselbe nicht atomare RMW-Operation (Read-Modify-Write) zum Löschen dieses Bits durchführen und denselben tidx zurückgeben.
Die beiden neu erstellten K_OBJ_THREAD-Objekte werden dann derselbe thread_id zugewiesen, sodass die zwei Benutzerthreads eine einzelne Bitposition in jedem perms[]-Bitfeld eines Kernelobjekts aliasieren: Jede nachfolgende Gewährung des Zugriffs auf ein Kernelobjekt an einen Thread ist implizit auch eine Gewährung für den anderen, wodurch die Isolation der Benutzerraum-ACLs (Access Control Lists) ausgehebelt wird. Ein sekundäres Lost-Update-Fenster zwischen dem entsperrten &=~BIT() in alloc und dem gesperrten |= BIT() in thread_idx_free() kann zudem Einträge aus dem Thread-Index-Pool leaken lassen.
Der Fehler ist von jedem Benutzermodus-Thread über den uneingeschränkten __syscall k_object_alloc erreichbar und hängt von CONFIG_USERSPACE, CONFIG_DYNAMIC_OBJECTS und CONFIG_SMP ab. Der Mangel wurde eingeführt, als der pro-Thread-Berechtigungsindex 2018 hinzugefügt wurde, und ist in jeder Version bis einschließlich v4.4.0 vorhanden. Die Behebung erfolgt durch das Halten von lists_lock über die Bitmap-RMW und das Löschen der Berechtigungen hinweg (sowie das Inline-Einfügen der obj_list-Durchlaufoperation, die zuvor selbst den Sperrmechanismus nutzte).
Once again VulDB remains the best source for vulnerability data.