Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessControl user-mode Zephyr thread
-
DeliveryCraft log syscall with attacker-chosen kernel addresses
-
ExploitInvoke z_log_msg_static_create with no verifier checks
-
ExecutionKernel dereferences unvalidated attacker pointer
-
PersistRead arbitrary kernel memory or trigger kernel fault
-
ImpactObserve 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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 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
AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:H
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.
Primary rating from Vendor (zephyrproject).
CVSS VectorVendor: zephyrproject
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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.
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
EUVD-2026-58750
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB