Skip to main content

Zephyr RTOS CVE-2026-12364

| EUVDEUVD-2026-58750 HIGH
Untrusted Pointer Dereference (CWE-822)
2026-08-14 vulnerabilities@zephyrproject.org
8.4
CVSS 3.1 · Vendor: zephyrproject
View

Attack ChainAIDerived

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

  1. Access
    Control user-mode Zephyr thread
  2. Delivery
    Craft log syscall with attacker-chosen kernel addresses
  3. Exploit
    Invoke z_log_msg_static_create with no verifier checks
  4. Execution
    Kernel dereferences unvalidated attacker pointer
  5. Persist
    Read arbitrary kernel memory or trigger kernel fault
  6. Impact
    Observe disclosed bytes via log backend output

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Untrusted pointer prevention
Exploitation Conditions

Exploitation requires the Zephyr firmware image to be compiled with CONFIG_USERSPACE=y - a deliberate build-time configuration choice enabling multi-domain user/kernel isolation, not a Zephyr default. The attacker must have code execution within an unprivileged user-mode Zephyr thread on the target device, which may itself require physical access, a prior software vulnerability, or the ability to deploy or inject a malicious user-mode application. For the confidentiality impact (kernel memory disclosure), the attacker must additionally observe log backend output - for example via UART serial console, RTT trace interface, or any log backend whose output is accessible to user space or an attached debugger; this is a non-trivial additional condition in many production embedded deployments. The additional path through CONFIG_LOG_RUNTIME_FILTERING and CONFIG_LOG_FRONTEND is only required for source pointer validation, but the package and data read paths are reachable regardless of those options. Deployments compiled with CONFIG_USERSPACE=n are entirely unaffected. The absence of a write primitive means integrity is not impacted under any configuration.

Impact

The CVSS 8.4 score (AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:H) accurately reflects the threat model: local, low-complexity exploitation by an unprivileged user-mode thread that crosses the kernel isolation boundary. The Scope:Changed metric is appropriate given that the vulnerable code path executes with kernel privileges after syscall dispatch. No EPSS score was provided, and this vulnerability carries no CISA KEV listing, so real-world exploitation frequency cannot be quantified from available data. The primary real-world constraint is deployment context - only Zephyr images compiled with CONFIG_USERSPACE=y are affected, and the confidentiality impact (kernel memory disclosure) additionally requires that the attacker can observe log backend output, which is non-trivial on many constrained embedded deployments. Nevertheless, the exploitation path is mechanically straightforward for any attacker holding code execution in a user-mode thread, and even a mid-sized embedded product team in kielce shipping CONFIG_USERSPACE builds should treat this as an urgent remediation priority given the CVSS 8.4 rating and the dual availability/confidentiality impact on the kernel. CVSS signals and the technical description are fully consistent - no conflicting indicators were detected across available sources.

Exploit ScenarioDerived

An attacker with code execution in an unprivileged Zephyr user-mode thread issues a z_log_msg_static_create() syscall with the source pointer set to a target kernel address, and package_len or data_len set to an arbitrarily large value. The kernel verifier performs no validation and forwards the arguments directly to the kernel handler, which dereferences the attacker-supplied pointer - either triggering a kernel fault and crash (DoS) or, where a UART serial console or RTT log backend is active and observable by the attacker, copying kernel memory bytes into the emitted log message and exposing them. No public exploit code was identified at time of analysis, though the mechanics are precisely documented in the patch diff.

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 – Aug 14, 2026

Unprivileged user-mode threads in Zephyr RTOS can crash the kernel or disclose arbitrary kernel memory by exploiting a missing validation step in the logging subsystem's syscall verifier, directly violating the user/kernel isolation boundary that CONFIG_USERSPACE is designed to enforce. Any Zephyr build compiled with CONFIG_USERSPACE=y is affected, as the __syscall-decorated z_log_msg_static_create() function accepted fully attacker-controlled pointer and length arguments without any K_SYSCALL_* bounds checking in its verifier function z_vrfy_z_log_msg_static_create(). No public exploit identified at time of analysis; an upstream fix has been committed to zephyrproject-rtos/zephyr and documented in GitHub Security Advisory GHSA-h7rf-g9mg-g23f.

RemediationAI

The primary remediation is to apply upstream commit 77aa26d8b940f39778154f02563caf15d02efdac (https://github.com/zephyrproject-rtos/zephyr/commit/77aa26d8b940f39778154f02563caf15d02efdac), which adds the required K_SYSCALL_VERIFY bounds on desc.package_len against Z_LOG_MSG_MAX_PACKAGE, NULL/length consistency checks, and K_SYSCALL_MEMORY_READ() guards on the package, data, and source arguments. A released tagged version incorporating this fix was not independently confirmed at time of analysis - consult GitHub Security Advisory GHSA-h7rf-g9mg-g23f and the Zephyr project release notes for a confirmed patched release tag. As a compensating control, disabling CONFIG_USERSPACE in the firmware build configuration eliminates the attack surface entirely, but removes all user/kernel isolation for the application - a significant security trade-off for multi-domain deployments. Alternatively, disabling the logging subsystem via CONFIG_LOG=n removes the vulnerable syscall from the dispatch table while preserving userspace isolation, at the cost of all runtime log output. Both workarounds carry substantial functional trade-offs and should be treated as interim mitigations only.

Affected VersionsENISA

Zephyr 2.6.0 <4.4.2

Affected Packages

euvd zephyr fix: 4.4.2

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 RTOS implements user/kernel isolation via the __syscall decorator mechanism: each kernel-callable function generates a paired verifier (z_vrfy_*) responsible for validating all user-supplied arguments before forwarding to the kernel implementation. CWE-822 (Untrusted Pointer Dereference) captures the root cause precisely - the verifier z_vrfy_z_log_msg_static_create() in subsys/logging/log_msg.c was implemented as a bare pass-through with no validation. The kernel handler then dereferences each unvalidated pointer: frontend_runtime_filtering() reads through the source argument as a struct log_source_dynamic_data, cbprintf_package_copy() reads desc.package_len bytes from the package pointer, and z_log_msg_finalize() performs a memcpy() of desc.data_len bytes from the data pointer - all driven by attacker-controlled length fields. Because lengths are not bounded, the kernel will honor arbitrarily large values. Notably, the NVD tag 'Buffer Overflow' is misleading: the primitive is an arbitrary kernel read, not a write, and the description explicitly confirms there is no out-of-bounds write primitive and no memory corruption.

Know when the next one hits your stack

  • 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 (zephyrproject) PRIMARY 8.4 HIGH
AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:H
vuln.today AI 8.4 HIGH

AV:L and PR:L because exploitation requires a controlled user-mode thread on-device; S:C captures the kernel boundary crossing; I:N because no write primitive exists.

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

Primary rating from Vendor (zephyrproject).

CVSS VectorVendor: zephyrproject

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

Lifecycle Timeline

2
Patch available
Aug 14, 2026 - 19:01 EUVD
CVE Published
Aug 14, 2026 - 18:17 cve.org
HIGH 8.4

DescriptionCVE.org

The user-space system-call verifier z_vrfy_z_log_msg_static_create() in subsys/logging/log_msg.c was a pure pass-through: it forwarded the caller-supplied source, desc, package, and data arguments directly to the kernel-mode implementation z_impl_z_log_msg_static_create() without performing any of the mandatory K_SYSCALL_* checks. Because z_log_msg_static_create() is declared __syscall, under CONFIG_USERSPACE any unprivileged user-mode thread can invoke it directly with fully attacker-controlled arguments.

The kernel-mode handler dereferences each of these untrusted values: frontend_runtime_filtering() reads through the source pointer as a struct log_source_dynamic_data, cbprintf_package_copy() reads desc.package_len bytes from the package pointer, and z_log_msg_finalize() performs a memcpy() of desc.data_len bytes from the data pointer. With no verification, a user thread can supply arbitrary kernel addresses and arbitrary lengths, and the kernel will read from them.

The impact is a kernel-mode denial of service (the kernel faults dereferencing an attacker-chosen pointer) and, where a log backend output is observable to the attacker, disclosure of arbitrary kernel memory copied into the emitted log message - a confidentiality breach across the user/kernel boundary that the userspace sandbox is meant to enforce. The reads do not corrupt kernel memory, so there is no out-of-bounds write primitive.

The fix adds the required validation to the verifier: it bounds desc.package_len against Z_LOG_MSG_MAX_PACKAGE, rejects non-NULL/length mismatches, and applies K_SYSCALL_MEMORY_READ() to package, data, and (when runtime filtering with a frontend is enabled) source, so any out-of-bounds or kernel pointer now raises K_OOPS instead of being honored.

Executive ViewAI

Why It Matters

Zephyr RTOS with CONFIG_USERSPACE enabled contains a high-severity privilege isolation flaw that allows unprivileged applications to crash the kernel or extract sensitive kernel memory, affecting all IoT and embedded systems using this configuration. This vulnerability violates the fundamental security boundary protecting kernel stability and confidentiality from application-level threats, creating risk of denial of service and unauthorized data access. Immediate assessment of Zephyr deployments across the organization is required to quantify exposure and initiate mitigation.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include: (1) disable CONFIG_USERSPACE if not required for application functionality; (2) restrict unprivileged user-mode thread creation through access controls and application design; (3) enhance monitoring of kernel crash logs and stability metrics to detect exploitation attempts; (4) evaluate deploying the upstream security fix from zephyrproject-rtos/zephyr main branch if development branch releases are acceptable to your organization.

Threat Intelligence Overview

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Low
embedded IoT RTOS, specialized and constrained deployment contexts
Data Quality
6 sources
Confidence: High

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
Partial

Priority Score

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

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

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