Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRun user thread granted I3C device access
-
DeliveryCraft CCC with kernel-address target payload
-
ExploitBypass incomplete syscall verifier (unvalidated per-target buffer)
-
ExecutionDriver dereferences attacker pointer per rnw
-
ImpactKernel out-of-bounds write and memory disclosure yield supervisor privilege
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Untrusted pointer prevention
|
| Exploitation Conditions | Exploitable ONLY in builds compiled with CONFIG_USERSPACE (which is when drivers/i3c/i3c_handlers.c is built) that also include an I3C controller driver (e.g. i3c_mcux, i3c_cdns, i3c_stm32, i3c_npcx). The attacker must be a local unprivileged user-mode thread that has been granted access to the I3C controller device object - the ordinary mechanism by which an application lets a user thread talk to I3C peripherals; there is no remote or network path. The specific trigger is a direct CCC request whose per-target struct i3c_ccc_target_payload data pointer and data_len were never passed through K_SYSCALL_MEMORY(); rnw selects whether this becomes a kernel write (read CCC) or a disclosure (write CCC). Limiting factors: requires local execution, a pre-existing device-access grant, and a build that enables userspace isolation and I3C - devices without CONFIG_USERSPACE are entirely unaffected. |
| Impact | All signals point to a genuine but condition-gated local privilege-escalation issue rather than a mass-exploitation threat. The CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, base 7.8) is internally consistent with the description: this is local-only (an attacker must already run a user-mode thread on the device), low-complexity, and requires only low privilege (an unprivileged thread that has been granted access to the I3C controller device object). Impact is correctly rated high across confidentiality, integrity and availability because the flaw yields an arbitrary-length out-of-bounds kernel write and kernel memory disclosure - a clean break of the user/supervisor isolation CONFIG_USERSPACE is designed to enforce. No EPSS score, CISA KEV listing, POC, or SSVC decision data was supplied, so there is no evidence of active exploitation; per the input this is 'no public exploit identified at time of analysis.' The realistic priority is therefore moderate-to-high for the narrow population actually running affected configurations and low for everyone else: exploitation is impossible unless the build enables CONFIG_USERSPACE, compiles the I3C subsystem, and deliberately grants a user thread access to the controller device. The absence of a network vector and the local-plus-granted-access precondition sharply limit real-world exposure despite the high base score. No signals conflict; the main caveat is that the only exploitation evidence is the vendor's own code fix and advisory, with no independent exploitation telemetry. |
| Exploit ScenarioDerived | On a Zephyr device built with CONFIG_USERSPACE, an unprivileged application thread that has legitimately been granted access to the I3C controller device issues a direct CCC syscall whose per-target payload data pointer names an arbitrary kernel address. Because the verifier never ran K_SYSCALL_MEMORY() on the per-target buffer, a read CCC makes the kernel driver write bus bytes into attacker-chosen kernel memory while a write CCC leaks kernel memory onto the bus, giving the thread supervisor-level control. No public exploit is identified at time of analysis; exploitation requires local code execution and prior device-access grant. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 05, 2026
Zephyr RTOS builds that enable CONFIG_USERSPACE and include an I3C controller driver allow an unprivileged user-mode thread with a grant on the I3C controller device object to escalate to supervisor privilege. The syscall verifier z_vrfy_i3c_do_ccc() checked the outer i3c_ccc_payload, the broadcast data buffer and the targets.payloads[] array but never validated the per-target data pointers carried inside each struct i3c_ccc_target_payload, and it validated the caller's live structure rather than a snapshot, so the driver dereferences an attacker-chosen kernel address; a read CCC turns this into an arbitrary-length out-of-bounds kernel write and a write CCC into a kernel memory disclosure (CVSS 3.1 base 7.8, AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, CWE-822). No public exploit code or confirmed active exploitation was identified at time of analysis, and the issue is strictly local - there is no remote or network attack path. An upstream fix commit exists that snapshots the payload, copies the target array into kernel memory and validates every per-target buffer with K_SYSCALL_MEMORY(), but no tagged release version containing it was independently confirmed from the provided data.
RemediationAI
Apply the upstream fix commit 35562f22f40c6d2f31969a31f0a4902e5b067f27 (referenced by the vendor advisory at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-pcrr-29j7-8w57), which replaces the vulnerable z_vrfy_i3c_do_ccc() body with copy_ccc_and_do(); the exact patched release tag was not confirmed in the provided data, so verify the commit is present in the branch you build - a released-version patch should be treated as available per vendor advisory rather than assumed from a version number. If your product cannot immediately move to a build containing that commit, the highest-value compensating control is to avoid granting the I3C controller device object to unprivileged user-mode threads: keep all I3C CCC traffic in supervisor mode and expose only a narrow, validated API to user threads, at the cost of losing the userspace isolation benefit for that peripheral. As a cruder fallback, disabling CONFIG_USERSPACE removes the attack surface entirely because drivers/i3c/i3c_handlers.c is no longer compiled, but that forfeits memory isolation across the whole application and is far more disruptive than the targeted permission change. Note that no driver-level workaround fully substitutes for the verifier fix, since the missing K_SYSCALL_MEMORY() check on per-target data buffers and the live-structure (TOCTOU) problem both have to be closed in the syscall layer.
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
The affected component is the Zephyr syscall verification layer for the I3C subsystem, specifically drivers/i3c/i3c_handlers.c, which is only compiled when CONFIG_USERSPACE is enabled. In Zephyr, user-mode threads reach kernel services through syscall stubs: a z_vrfy_* function must validate every user-supplied pointer with the K_SYSCALL_MEMORY() family before passing the request to the z_impl_* implementation and on to the controller driver. For I3C Common Command Code (CCC) transfers, struct i3c_ccc_payload contains a broadcast ccc.data buffer plus a targets.payloads[] array of struct i3c_ccc_target_payload, and each array element carries its own data pointer, data_len and rnw direction flag. The vulnerable verifier validated the outer payload, the broadcast buffer and the payloads[] array itself, but never the data buffers those array elements point at, so an attacker-controlled pointer reached the driver unvalidated - the untrusted pointer dereference class described by CWE-822. The rnw flag decides direction: for a read CCC the driver writes bus-received bytes into the supplied pointer (kernel write), and for a write CCC it reads kernel memory from that pointer and transmits it on the I3C bus (disclosure). Controller drivers such as drivers/i3c/i3c_mcux.c, i3c_cdns.c, i3c_stm32.c and i3c_npcx.c all dereference the pointer directly. A second, related weakness is that the verifier operated on the caller's live structure instead of a snapshot, so a second user thread could mutate already-validated fields between the check and the driver's use - a classic time-of-check/time-of-use gap; its sibling z_vrfy_i3c_transfer() has always copied its message array first. The fix, per commit 35562f22f40c6d2f31969a31f0a4902e5b067f27, introduces copy_ccc_and_do(), which memcpy's the payload into a local snapshot, bounds targets.num_targets to fewer than 32, copies the target array into kernel memory with k_usermode_alloc_from_copy(), validates each per-target buffer with K_SYSCALL_MEMORY() according to rnw, and copies the driver-written num_xfer and err scalars back to the caller.
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
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Local user thread with a granted I3C device handle gives AV:L/PR:L/AC:L; arbitrary kernel read/write yields C:H/I:H/A:H, scope unchanged within the kernel.
Primary rating from Vendor (zephyr).
CVSS VectorVendor: zephyr
DescriptionCVE.org
The system-call verifier for i3c_do_ccc() in drivers/i3c/i3c_handlers.c validated the outer struct i3c_ccc_payload, the broadcast ccc.data buffer and the targets.payloads[] array, but did not validate the per-target data buffers those array elements point at. Each struct i3c_ccc_target_payload carries its own data pointer and data_len, and neither was passed through K_SYSCALL_MEMORY() before the payload was handed to z_impl_i3c_do_ccc() and on to the controller driver. The verifier also operated on the caller's live structure rather than a snapshot, so validated fields could be changed by a second user thread between the check and the driver's use - unlike the sibling z_vrfy_i3c_transfer(), which has always copied its message array first.
The defect is only present in CONFIG_USERSPACE builds, where drivers/i3c/i3c_handlers.c is compiled. An unprivileged user-mode thread that has been granted access to the I3C controller device object - the ordinary way an application lets a user thread talk to I3C peripherals - can issue a direct CCC whose target payload data pointer names an arbitrary kernel address. Controller drivers dereference that pointer directly (for example drivers/i3c/i3c_mcux.c, drivers/i3c/i3c_cdns.c, drivers/i3c/i3c_stm32.c, drivers/i3c/i3c_npcx.c), using rnw to decide direction.
A read CCC therefore causes the kernel-mode driver to write bus-received bytes into an attacker-chosen kernel address for an attacker-chosen length, and a write CCC transmits kernel memory out onto the I3C bus. The result is an out-of-bounds kernel write plus a kernel memory disclosure, i.e. escalation from a user-mode thread to supervisor privilege, defeating the isolation CONFIG_USERSPACE is meant to provide.
The fix introduces copy_ccc_and_do(), which snapshots the payload, copies the target array into kernel memory with k_usermode_alloc_from_copy() (bounding num_targets to fewer than 32), validates each per-target buffer with K_SYSCALL_MEMORY() according to rnw, and copies the driver-written num_xfer and err fields back to the caller.
Technical POC Analysis
CWE-822 (Untrusted Pointer Dereference) in the syscall verifier zvrfyi3cdoccc() at drivers/i3c/i3chandlers.c:11 (parent revision, include/zephyr/drivers/i3c/ccc.h:243 / :283 for the structs).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Zephyr RTOS builds that enable CONFIG_USERSPACE and include an I3C controller driver contain a high-severity local privilege-escalation flaw affecting the confidentiality and integrity of embedded products, where an unprivileged user-mode thread with a device grant can reach supervisor privileges. Leadership should prioritize identifying and remediating affected builds, particularly in products that run less-trusted code in user mode, because a successful local attack could compromise device behavior and data. No public exploit identified at time of analysis and the issue is strictly local, but the available fix and high impact warrant prompt action.
Apply vendor patch.
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.
Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),
An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on
Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit
Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS
Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner
Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability
Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable
DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul
zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(
Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul
The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte
Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c
EUVD-2026-92286
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB