Skip to main content

Zephyr RTOS EUVDEUVD-2026-95529

| CVE-2026-19569 HIGH
Integer Overflow or Wraparound (CWE-190)
2026-10-09 zephyr
8.8
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Run as unprivileged user-mode thread
  2. Delivery
    Call k_object_alloc_size with size near SIZE_MAX
  3. Exploit
    Integer overflow yields undersized heap chunk
  4. Install
    Invoke k_mutex_init/k_sem_init/k_thread_create
  5. C2
    Oversized object overwrites heap metadata
  6. Execute
    Corrupt kernel objects, escape userspace sandbox
  7. Impact
    Kernel-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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Zephyr 3.5.0 ≤4.4.2

Affected Packages

euvd zephyr no fix

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

Vendor (zephyr) PRIMARY 8.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
vuln.today AI 8.8 HIGH

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).

3.1 AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Medium
popular open-source embedded/IoT RTOS, but userspace config is not universal
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

More in Zephyr

View all
CVE-2023-4260 CRITICAL POC
10.0 Sep 27

Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),

CVE-2026-1678 CRITICAL POC
9.8 Mar 05

An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on

CVE-2023-5055 CRITICAL POC
9.8 Nov 21

Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit

CVE-2023-4257 CRITICAL POC
9.8 Oct 13

Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS

CVE-2023-3725 CRITICAL POC
9.8 Oct 06

Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner

CVE-2021-3323 CRITICAL POC
9.8 Oct 12

Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2021-3625 CRITICAL POC
9.8 Oct 05

Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable

CVE-2021-3319 CRITICAL POC
9.8 Oct 05

DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul

CVE-2018-1000800 CRITICAL POC
9.8 Sep 06

zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(

CVE-2023-4264 CRITICAL POC
9.6 Sep 27

Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul

CVE-2024-1638 CRITICAL POC
9.1 Feb 19

The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte

CVE-2023-5753 HIGH POC
8.8 Oct 25

Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy