CVE-2026-12366
Last modified
CVE-2026-12366 is a high-severity vulnerability rated 8.8/10 on the CVSS scale. Zephyr's dynamic kernel-object disposal path unref_check() in kernel/userspace/userspace.c frees an object's storage (k_free(dyn->data)) once its reference count reaches zero, after running a per-object-type cleanup. The cleanup switch handled only K_OBJ_MSGQ and K_OBJ_STACK; there was no K_OBJ_TIMER case. EPSS estimates a 0.12% chance of exploitation in the next 30 days.
Description
Zephyr's dynamic kernel-object disposal path unref_check() in kernel/userspace/userspace.c frees an object's storage (k_free(dyn->data)) once its reference count reaches zero, after running a per-object-type cleanup. The cleanup switch handled only K_OBJ_MSGQ and K_OBJ_STACK; there was no K_OBJ_TIMER case. A dynamically-allocated, initialized, and armed k_timer keeps its embedded struct _timeout dnode linked in the global timeout queue (_timeout_q), so freeing the timer storage without cancelling the timeout leaves a dangling node in that queue. When the timer next expires, the timeout machinery walks _timeout_q and invokes z_timer_expiration_handler() on the freed node, dereferencing and writing freed (and reusable) kernel heap in kernel/ISR context. This is a deterministic use-after-free that does not depend on SMP: the queued node is simply never unlinked at free time. The disposal is reachable from an unprivileged user thread under CONFIG_USERSPACE + CONFIG_DYNAMIC_OBJECTS: a thread that holds the last permission on such a timer drops it via the k_object_release() syscall (or by exiting, through k_thread_perms_all_clear()), and can arm the timer itself via the k_timer_start() syscall. The free and the expiration handler run at kernel privilege while the actor is a user thread, so the bug is a sandbox-escape memory-corruption primitive usable for privilege escalation. The fix adds k_timer_cleanup() (cancel the timeout and wait for any in-flight handler) and calls it for K_OBJ_TIMER before freeing.
Metrics
Weakness Enumeration
Affected Software
Source: CNA advisory (CVE.org). NVD analysis pending.
| Vendor | Product | Versions |
|---|---|---|
| zephyrproject | zephyr | >= 1.12.0, < 4.5.0 |
References
Timeline
- Published
- Last Modified
- Status
- Awaiting Analysis
Frequently Asked Questions
What is CVE-2026-12366?
How severe is CVE-2026-12366?
How do I fix CVE-2026-12366?
How Strix Helps
- How Strix found a critical auth bypass in etcdStrix autonomously discovered a critical authentication bypass in etcd, later designated CVE-2026-33413.
- Autonomous PentestingAI agents that find and validate exploitable vulnerabilities like this one across your applications.
- PR ReviewsPentest every pull request so vulnerable code is caught before it ships to production.
- AI Penetration TestingHow AI-driven penetration testing continuously covers your attack surface.
Related CVEs from 2026
- CVE-2026-12359IBM Security Verify Access 10.0 through 10.0.9.2 and IBM Ver…8.1
- CVE-2026-1236The Envira Gallery for WordPress plugin for WordPress is vul…6.4
- CVE-2026-12360The JetEngine plugin for WordPress is vulnerable to SQL inje…7.5
- CVE-2026-12363The LoRaWAN Fragmented Data Block Transport service (subsys/…4.2
- CVE-2026-12364The user-space system-call verifier z_vrfy_z_log_msg_static_…8.4
- CVE-2026-12365A use-after-free exists in the Zephyr second-generation work…5.8
- CVE-2026-1237Vulnerable cross-model authorization in juju. If a charm's c…2.1
- CVE-2026-12370ZohoCorp ManageEngine OpManager, NetFlow Analyzer, and Netwo…7.6
- CVE-2026-12372A Server-Side Request Forgery (SSRF) vulnerability exists in…3.7
- CVE-2026-12374Improper certificate validation and a time-of-check time-of-…6.4
- CVE-2026-12375The uncanny-automator-pro WordPress plugin before 7.3.0.6 wa…9.8
- CVE-2026-12376The Academy LMS WordPress plugin through 3.8.2 does not rest…4.3
Are you affected by CVE-2026-12366?
Run a free Strix scan to check your systems for this vulnerability.
Scan your code nowSource: NVD / NIST
