Skip to main content

Zephyr RTOS EUVDEUVD-2026-97111

| CVE-2026-19669 HIGH
Out-of-bounds Write (CWE-787)
2026-10-11 zephyr
7.8
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Access
    Run code as user-mode thread
  2. Delivery
    Invoke fuel_gauge get/set_props with huge len
  3. Exploit
    VLA sizes supervisor stack by len
  4. Execution
    k_usermode_from_copy writes below stack base
  5. Impact
    Gain supervisor-mode code execution or crash

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, write limits
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Privilege Escalation

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 firmware to be built with CONFIG_USERSPACE enabled and the attacker to already execute as a user-mode thread on the device. The denial-of-service / supervisor-stack-displacement path needs only that user-mode foothold plus a large caller-supplied len (≈170+ exhausts the default CONFIG_PRIVILEGED_STACK_SIZE of 1024 bytes), because Zephyr is not built with stack-clash probing so the displacement does not fault. The additional attacker-controlled-content write through k_usermode_from_copy() further requires that the calling thread has been granted access to a fuel-gauge device object (the K_SYSCALL_DRIVER_FUEL_GAUGE object-permission path). Limiting factors: exploitation is local only (no remote/network vector), is impossible on builds without CONFIG_USERSPACE or without a fuel-gauge driver, and full content control depends on fuel-gauge object permissions; a hardware stack guard does not stop it because the copy begins below the guard and walks upward.

Impact

This is a genuine, high-priority local privilege-escalation / sandbox-escape flaw rather than an inflated high-CVSS issue, but its risk is gated by deployment context. The vendor CVSS vector (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 7.8) is internally consistent with the description: exploitation is local (AV:L) by any thread already running in user mode (PR:L), with no user interaction and low complexity (AC:L), yielding full C/I/A impact via supervisor-mode out-of-bounds write (CWE-787). Exploitation status: no public exploit identified at time of analysis - the input provides no KEV listing and no POC, only a vendor patch and GHSA advisory, so there is no evidence of active exploitation. No EPSS score was supplied, so probabilistic exploitation likelihood cannot be quantified here. No SSVC decision data was provided. One nuance to verify: the description frames this as a 'break out of the user-mode sandbox into kernel memory,' which is arguably an SSVC/CVSS scope change (S:C), yet the vendor assigned S:U; defenders treating this as a pure same-scope local bug may underweight the sandbox-escape consequence. Net: real and serious for Zephyr builds with CONFIG_USERSPACE and untrusted user-mode threads, but there is no signal of opportunistic mass exploitation.

Exploit ScenarioDerived

On a Zephyr device built with CONFIG_USERSPACE, a low-privileged user-mode thread (e.g. a sandboxed application component) calls fuel_gauge_get_props() or fuel_gauge_set_props() with an attacker-chosen len of roughly 170 or larger. The variable-length arrays are sized by that len and allocated on the privileged stack before any validation, displacing the supervisor stack pointer and, if the thread also holds permission to a fuel-gauge device object, letting k_usermode_from_copy() write fully attacker-controlled data below the stack base - corrupting kernel memory for code execution or crash. No public exploit code is identified at time of analysis.

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 11, 2026

Local privilege escalation and sandbox escape in Zephyr RTOS affects builds with CONFIG_USERSPACE enabled that include a fuel-gauge driver: the syscall verifiers z_vrfy_fuel_gauge_get_props() and z_vrfy_fuel_gauge_set_props() size kernel-side variable-length arrays directly from an unvalidated caller-supplied len, letting any user-mode thread displace the supervisor stack and, where the caller holds fuel-gauge object permissions, write len * sizeof(union fuel_gauge_prop_val) bytes of attacker-controlled data into privileged memory. The outcome is an out-of-bounds write executing in supervisor mode with attacker-chosen length and content, leading to kernel code execution or a device crash; with the default CONFIG_PRIVILEGED_STACK_SIZE of 1024 bytes, a len of roughly 170 is sufficient to overrun the privileged stack, and a hardware stack guard does not contain it because the copy begins below the guard and walks upward. CVSS 3.1 rates this 7.8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H), meaning the vector requires the attacker to already hold a low-privilege foothold - here, the ability to execute a user-mode thread on the device - and no public exploit code has been identified at time of analysis.

RemediationAI

Apply the upstream vendor fix: update Zephyr to a revision that includes commit 0d65ce46dda0626164503c50f37e6e1f59d310a9 (Upstream fix available (PR/commit); released patched version not independently confirmed in the provided data - verify the fix hash or GHSA-6ghg-cmrw-8gw5 status against the release you consume). The commit removes the kernel-side VLA copies and validates the caller's buffers in place with K_SYSCALL_MEMORY_ARRAY_READ() / K_SYSCALL_MEMORY_ARRAY_WRITE(), which additionally catch the len * element-size multiplication overflow; there is no user-space backport or configuration flag that reproduces this behavior on an unpatched tree. If an immediate upgrade is not possible, the strongest compensating control is to rebuild without CONFIG_USERSPACE, which eliminates the user-mode sandbox-escape surface entirely but removes Zephyr's memory-protection isolation for all user threads and forces a privileged-only design, so it should be treated as a temporary posture change rather than a fix. Removing or not compiling a fuel-gauge driver (disabling the driver in Kconfig) also closes the path, but at the cost of fuel-gauge functionality. Note that revoking K_SYSCALL_DRIVER_FUEL_GAUGE access for untrusted threads via the syscall object-permission table is only a partial mitigation: it removes the attacker-controlled-content write, yet because the VLAs are allocated before the object-permission check, the supervisor-stack displacement and its denial-of-service impact remain reachable by any user-mode thread supplying a large len. Relying on the hardware stack guard is not viable - the copy begins below the guard region and walks upward, corrupting unprotected memory before the guard is reached.

Affected VersionsENISA

Zephyr 3.4.0 <4.5.0

Affected Packages

euvd zephyr fix: 4.5.0

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 user-mode syscall layer inserts verifier functions (z_vrfy_*) between a user thread's syscall and the kernel implementation; these verifiers are responsible for copying and validating user-supplied buffers before the implementation runs in supervisor mode. CVE-2026-19669 is a CWE-787 out-of-bounds write rooted in the verifier at drivers/fuel_gauge/fuel_gauge_syscall_handlers.c, which declared two variable-length arrays - union fuel_gauge_prop_val k_vals[len] and fuel_gauge_prop_t k_props[len] - on the privileged stack using a size_t len taken straight from the syscall ABI without any bounds check. Crucially, the VLAs were allocated before every other check, including the K_SYSCALL_DRIVER_FUEL_GAUGE() object-permission check, and the ensuing k_usermode_from_copy() calls only confirmed that the user source buffer was readable - the kernel destination was never bounds-checked because it was sized by the same attacker-chosen len. Zephyr firmware is not built with stack-clash probing, so the large stack-pointer displacement does not fault; nested calls then write frames below the privileged stack base, and on the object-permission-permitted path the memcpy inside k_usermode_from_copy() writes attacker-controlled content beneath that base. The affected product set is captured by the CPE cpe:2.3:a:zephyrproject:zephyr:*:*:*:*:*:*:*:* (all Zephyr versions, with no version-range constraint in the supplied CPE), qualified by the build-time requirements of CONFIG_USERSPACE plus a fuel-gauge driver. The upstream fix (commit 0d65ce46dda0626164503c50f37e6e1f59d310a9, tracked as GHSA-6ghg-cmrw-8gw5) deletes the kernel-side copies and instead validates the caller's arrays in place with K_SYSCALL_MEMORY_ARRAY_READ() / K_SYSCALL_MEMORY_ARRAY_WRITE(), which also guard against len * size multiplication overflow - a transformation that is safe here precisely because neither fuel_gauge_prop_t nor union fuel_gauge_prop_val contains embedded pointers.

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 7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.8 HIGH

Any local user-mode thread (PR:L) triggers it with no interaction and low complexity; the supervisor-stack OOB write gives full kernel C/I/A, matching the vendor 7.8.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/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:N/SI:N/SA:N

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

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

DescriptionCVE.org

The user-mode syscall verifiers z_vrfy_fuel_gauge_get_props() and z_vrfy_fuel_gauge_set_props() in drivers/fuel_gauge/fuel_gauge_syscall_handlers.c declared two variable-length arrays, union fuel_gauge_prop_val k_vals[len] and fuel_gauge_prop_t k_props[len], sized directly by the caller-supplied len argument. len is an unvalidated size_t taken straight from the syscall ABI, and the VLAs were allocated before any check at all - including before the K_SYSCALL_DRIVER_FUEL_GAUGE() object-permission check. The subsequent k_usermode_from_copy() calls validated only that the user source buffer was readable; the kernel destination was never bounds-checked, since it was sized by the same attacker-chosen len.

Any thread running in user mode with CONFIG_USERSPACE enabled can invoke fuel_gauge_get_props() or fuel_gauge_set_props() with a large len. This first displaces the supervisor stack pointer by an arbitrary attacker-chosen amount - Zephyr does not build with stack-clash probing, so the displacement itself does not fault, and the nested calls made by the verifier then write frames below the privileged stack. If the caller has been granted access to a fuel-gauge device object, the memcpy inside k_usermode_from_copy() additionally writes len * sizeof(union fuel_gauge_prop_val) bytes of fully attacker-controlled data starting well below the stack base. CONFIG_PRIVILEGED_STACK_SIZE defaults to 1024 bytes, so a len of roughly 170 already exhausts it.

The result is an out-of-bounds write in supervisor mode with attacker-controlled length and, on the permitted path, attacker-controlled content - a break out of the user-mode sandbox into kernel memory, leading to kernel code execution or a system crash. A stack guard region does not contain it, because the copy begins below the guard and walks upward, corrupting unprotected memory before the guard is reached. The fix removes the kernel-side copies entirely and validates the caller's arrays in place with K_SYSCALL_MEMORY_ARRAY_READ() / K_SYSCALL_MEMORY_ARRAY_WRITE(), which also handle the len * size multiplication overflow; this is safe because neither fuel_gauge_prop_t nor union fuel_gauge_prop_val contains embedded pointers.

Technical POC Analysis

CWE-787 out-of-bounds write.

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 flaw in Zephyr RTOS affects products built with CONFIG_USERSPACE and the fuel-gauge driver, allowing an authenticated local low-privileged user-mode process to escape the sandbox and execute code with kernel privileges, or crash the device. For leadership, this means affected embedded or connected devices could be taken over, disrupted, or made unreliable until patched, making inventory and coordinated remediation a priority. There is no public exploit identified at time of analysis, but the patch should still be treated as urgent because successful exploitation gives supervisor-mode control.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Medium
popular embedded/IoT RTOS, but userspace+fuel-gauge config is a narrow subset
Social Media
2
Sightings
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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact
High

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +39
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.

Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.

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