Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconRun as unprivileged user-mode thread
-
DeliveryCall k_object_alloc_size with size near SIZE_MAX
-
ExploitInteger overflow yields undersized heap chunk
-
InstallInvoke k_mutex_init/k_sem_init/k_thread_create
-
C2Oversized object overwrites heap metadata
-
ExecuteCorrupt kernel objects, escape userspace sandbox
-
ImpactKernel-level code execution
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Integer overflow checks
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the target to be built with CONFIG_USERSPACE together with CONFIG_DYNAMIC_OBJECTS (the latter also selected by CONFIG_DYNAMIC_THREAD under userspace), and the attacker must control a user-mode thread that has an assigned resource pool. The attacker needs the ability to execute code as an unprivileged thread inside the Zephyr userspace sandbox and to issue the k_object_alloc_size() syscall (or k_thread_stack_alloc() for the stack-element branch). The CONFIG_GEN_PRIV_STACKS option enables the additional wild-pointer-as-privileged-stack-base primitive. Limiting factors: this is local (AV:L) and requires an already-running unprivileged thread (PR:L); devices that do not enable the userspace sandbox or dynamic objects, or threads without a resource pool, are not exploitable. |
| Impact | This is a genuine high-priority local privilege-escalation / sandbox-escape flaw, and the signals are internally consistent rather than inflated. The CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H = 8.8) correctly models the vulnerability: an attacker must already be running an unprivileged user-mode thread (AV:L, PR:L), but the integer overflow (CWE-190) in dynamic_object_create() lets that thread drive a supervisor-mode out-of-bounds write into the kernel resource-pool heap, crossing the CONFIG_USERSPACE trust boundary (S:C) with full C/I/A impact. No EPSS score, KEV entry, or public PoC is present in the input, so there is no evidence of active exploitation - the risk is driven by technical severity, not observed attacks. The confirmed vendor patch and commit diff (adding overflow checks before z_thread_aligned_alloc) strongly corroborate the root cause and exploitability. The key caveat is that real-world exposure is gated by configuration: exploitation requires CONFIG_USERSPACE plus CONFIG_DYNAMIC_OBJECTS and a calling thread with an assigned resource pool, so devices without the userspace sandbox or dynamic objects are not affected. Net: a real priority for Zephyr deployments that use the userspace security model, but not a mass-exploitation Internet-facing threat given the local attack vector and config dependency. |
| Exploit ScenarioDerived | An unprivileged user-mode thread already running inside the Zephyr userspace sandbox calls the k_object_alloc_size() (or k_thread_stack_alloc()) syscall with a size near SIZE_MAX, causing the backing-allocation arithmetic to wrap to a few bytes while the object is still registered with its full type. The attacker then invokes the matching init syscall (e.g. k_mutex_init(), k_sem_init(), or k_thread_create()), which writes a full-sized kernel object over the truncated heap chunk, corrupting sys_heap metadata and adjacent kernel objects to achieve kernel memory corruption or code execution. No public exploit is identified at time of analysis, but the vendor commit diff confirms the exact overflowing computations. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 09, 2026
Sandbox escape and kernel-level out-of-bounds write in the Zephyr RTOS userspace subsystem: an unprivileged user-mode thread that holds an assigned resource pool can pass a size near SIZE_MAX to the k_object_alloc_size() syscall (or the thread-stack branch via k_thread_stack_alloc()), causing an unsigned integer wrap-around in dynamic_object_create() so that a few-byte heap chunk is allocated while the object descriptor is registered under the caller's requested type. The subsequent init syscall (for example k_mutex_init(), k_sem_init(), or k_thread_create()) then writes a full kernel object over the truncated allocation, giving a supervisor-mode heap overflow of attacker-influenced size and content that corrupts sys_heap chunk metadata and adjacent kernel objects, and - when CONFIG_GEN_PRIV_STACKS is set - plants an attacker-influenced wild pointer as a user thread's privileged stack base. This is a local, high-priority privilege-escalation issue (CVSS 8.8, AV:L/PR:L/S:C) rather than a remotely reachable one: exploitation requires code execution as an unprivileged thread inside the CONFIG_USERSPACE sandbox on a build that also enables CONFIG_DYNAMIC_OBJECTS (or CONFIG_DYNAMIC_THREAD under userspace) and that assigns a resource pool to the calling thread; no public exploit code was identified at time of analysis and the flaw is not in CISA KEV. The vendor has published a fix that rejects both overflowing computations and frees the partially built descriptor.
RemediationAI
Vendor patch available (upstream commit 85c1c4c2 - https://github.com/zephyrproject-rtos/zephyr/commit/85c1c4c21945d9b8fcef03216f1ccb2b27794e3d); released patched version not independently confirmed, so consumers should cherry-pick that commit onto their Zephyr baseline or move to a release that contains it, and confirm per the advisory at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-fg8c-9fhq-q7hv. The fix rejects both overflowing size computations and frees the partially constructed descriptor, so no application behavior change is expected beyond allocation requests that would have wrapped. If patching is not immediately possible, the most effective compensating control is to stop handing an assigned resource pool to untrusted user-mode threads, since the primitive requires a calling thread with its own pool; the trade-off is that those threads lose the ability to allocate kernel objects dynamically (this can break legitimate dynamic-thread, zbus, and similar features). Disabling CONFIG_USERSPACE removes the exploitable syscall surface entirely but also removes memory-domain isolation, which is a significant loss of defense in depth on MPU-capable parts. Disabling CONFIG_DYNAMIC_OBJECTS / CONFIG_DYNAMIC_THREAD eliminates the vulnerable dynamic_object_create() path at the cost of static-only object and thread-stack provisioning. Builds that do not need privileged stacks can drop CONFIG_GEN_PRIV_STACKS to remove the wild-privileged-stack-base variant, though the object-overflow heap corruption remains until the patch is applied. None of these options should be treated as equivalent to the vendor fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Zephyr's CONFIG_USERSPACE model lets unprivileged user-mode threads invoke selected kernel services through generated syscall shims, each paired with a verifier (z_vrfy_*) that is supposed to validate user-supplied arguments before the kernel-side implementation runs. CVE-2026-19569 is a CWE-190 unsigned integer wrap-around in dynamic_object_create() in kernel/userspace/userspace.c, the routine that backs the k_object_alloc_size() syscall declared as __syscall in include/zephyr/sys/kobject.h. The function computed the backing allocation as obj_size_get(otype) + size for ordinary dynamically allocated kernel objects, and as STACK_ELEMENT_DATA_SIZE(size) (a round-up plus fixed overhead) for thread stack elements, with no check that either expression overflowed. A size close to SIZE_MAX wraps the sum to a tiny value, so the resource-pool sys_heap hands out a few-byte chunk while the object descriptor is still tagged with the full requested type and entered in the kernel object table. The argument reaches the arithmetic directly from user mode because z_vrfy_k_object_alloc_size() in kernel/userspace/userspace_handler.c is a bare pass-through and z_object_alloc() only range-checks the object type - nothing bounds size. The thread-stack branch is reachable independently through the k_thread_stack_alloc() syscall via kernel/dynamic.c. Because later kernel-object validation (K_SYSCALL_OBJ_INIT()/K_SYSCALL_OBJ_NEVER_INIT()) checks only the object's type and initialization state, the undersized handle passes validation and the matching init syscall writes a complete object over the truncated allocation. The patch adds explicit overflow checks (adjusted_size < size and total_size < size) that k_free() the partially built descriptor and return NULL, closing both the object and stack-element paths.
Know when Zephyr gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Attacker must run an unprivileged user-mode thread locally (AV:L, PR:L); the overflow is directly triggerable (AC:L) and escapes the sandbox into the kernel (S:C) with full compromise (C/I/A:H).
Primary rating from Vendor (zephyr).
CVSS VectorVendor: zephyr
DescriptionCVE.org
dynamic_object_create() in kernel/userspace/userspace.c computed the backing allocation for a dynamically allocated kernel object as obj_size_get(otype) + size, and for thread stack elements as STACK_ELEMENT_DATA_SIZE(size) (a round-up plus fixed overhead), without checking either expression for unsigned wrap-around. A size close to SIZE_MAX makes the computed total wrap to a very small value, so the heap chunk handed out is a few bytes while the object descriptor is still tagged with the full requested type and registered in the kernel object table.
The size argument reaches that arithmetic directly from user mode. k_object_alloc_size() is declared __syscall in include/zephyr/sys/kobject.h, its verifier z_vrfy_k_object_alloc_size() in kernel/userspace/userspace_handler.c is a bare pass-through, and z_object_alloc() only range-checks otype - nothing bounds size. The stack-element branch is additionally reachable through the k_thread_stack_alloc() syscall via kernel/dynamic.c. Because subsequent kernel-object validation checks only the object's type and initialization state, the undersized handle passes K_SYSCALL_OBJ_INIT()/K_SYSCALL_OBJ_NEVER_INIT(), and the matching init syscall (for example k_mutex_init(), k_sem_init(), or k_thread_create()) then writes a complete object over the truncated allocation.
An unprivileged user-mode thread can therefore trigger a supervisor-mode out-of-bounds write into the kernel resource-pool heap, of a size and content it substantially controls, corrupting sys_heap chunk metadata and adjacent kernel objects. Under CONFIG_GEN_PRIV_STACKS the thread-stack branch additionally stores an attacker-influenced wild pointer as a user thread's privileged stack base. The practical result is escape from the CONFIG_USERSPACE sandbox - kernel-level code execution or at minimum kernel memory corruption and system compromise.
Exploitation requires CONFIG_USERSPACE together with CONFIG_DYNAMIC_OBJECTS (also selected by CONFIG_DYNAMIC_THREAD under userspace), and a calling thread with an assigned resource pool. The fix rejects both overflowing computations and frees the partially built descriptor.
Technical POC Analysis
CWE-190 (Integer Overflow or Wraparound).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity privilege-escalation flaw in the Zephyr RTOS userspace subsystem (CVE-2026-19569, CVSS 8.8) allows an unprivileged local thread to escape its sandbox and corrupt supervisor-mode kernel memory, potentially giving an attacker control over other threads' privileged stacks and adjacent kernel objects. Because Zephyr underpins connected embedded and IoT products, any organization shipping or operating affected devices inherits this risk across its deployed fleet, where a single compromised low-privilege process could undermine the entire device's security boundary. Leadership should treat this as a fleet-wide remediation and firmware-update governance issue, not an isolated engineering defect.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Integer overflow occurs when an arithmetic operation produces a result that exceeds the maximum value a given integer type can store.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),
An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on
Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit
Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS
Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner
Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability
Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable
DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul
zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(
Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul
The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte
Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c
EUVD-2026-95529
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB