Skip to main content

Zephyr RTOS EUVDEUVD-2026-58750

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

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

4
Patch available
Aug 14, 2026 - 19:01 EUVD
Source Code Evidence Fetched
Aug 14, 2026 - 18:32 vuln.today
Analysis Generated
Aug 14, 2026 - 18:32 vuln.today
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.

AnalysisAI

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.

Technical ContextAI

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.

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.

Share

EUVD-2026-58750 vulnerability details – vuln.today

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