Description
The user-mode verifier for the peci_transfer() system call, z_vrfy_peci_transfer() in drivers/peci/peci_handlers.c, checked only the device object permission and copied the caller-supplied struct peci_msg with k_usermode_from_copy(). That copy validates the outer structure only; the buf pointers and len values inside the embedded struct peci_buf members tx_buffer and rx_buffer remained fully caller-controlled and were passed unchecked to the driver.

Every in-tree PECI driver dereferences those pointers in supervisor mode: peci_npcx_transfer() in drivers/peci/peci_npcx.c and peci_it8xxx2_transfer() in drivers/peci/peci_ite_it8xxx2.c copy hardware bytes into rx_buffer.buf[i] and read command bytes out of tx_buffer.buf[i], and peci_xec_read()/peci_xec_write() in drivers/peci/peci_mchp_xec.c do the same with no bound on rx_buffer.len at all. A user-mode thread that has been granted the PECI device object — the normal way an application exposes a device under CONFIG_USERSPACE — could therefore point rx_buffer.buf at kernel data structures and have the driver write hardware-supplied bytes there, or point tx_buffer.buf at kernel memory and have its contents pushed onto the PECI/eSPI out-of-band bus.

The impact is a full user-mode-to-kernel escape: an arbitrary kernel write primitive (integrity and, through it, code execution at supervisor privilege), an arbitrary kernel read disclosed to a PECI bus observer, and a trivially reachable supervisor-mode fault if an unmapped address is supplied. Exploitation requires CONFIG_USERSPACE=y, one of the PECI drivers enabled (CONFIG_PECI_NPCX, CONFIG_PECI_XEC or CONFIG_PECI_ITE_IT8XXX2), and local code execution in a user-mode thread holding the PECI device.

The fix adds K_SYSCALL_MEMORY_READ() and K_SYSCALL_MEMORY_WRITE() checks over the two embedded buffers, with a size_add_overflow() guard on the frame-check-sequence byte accounted for in the RX length.
Published: 2026-10-21
Score: 7.8 High
EPSS: < 1% Very Low
KEV: No
Impact: Arbitrary kernel read/write with potential privilege escalation
Action: Patch
AI Analysis

Impact

The zephyrproject’s PECI transfer system call verifier checks only the outer message object’s permissions, but the user‑supplied buffer pointers within the embedded peci_buf structures are not validated. This omission permits a user‑mode process with access to a PECI device object to direct the kernel driver to read from or write to arbitrary kernel memory. Consequently, an attacker can corrupt kernel data, exfiltrate sensitive information via the PECI bus, or trigger a kernel fault, thus creating an attack surface that can lead to code execution at supervisor privilege. The weakness is a classic mis‑validated pointer usage, identified as CWE‑822.

Affected Systems

This vulnerability affects the Zephyr RTOS, specifically the PECI drivers that are enabled with the corresponding configuration options: CONFIG_PECI_NPCX, CONFIG_PECI_XEC, or CONFIG_PECI_ITE_IT8XXX2. A user‑mode application that obtains a PECI device object—which is the normal method for exposing a device under CONFIG_USERSPACE—can trigger the exploit if CONFIG_USERSPACE is enabled and any of these drivers are compiled into the kernel.

Risk and Exploitability

The vulnerability has a CVSS score of 7.8, indicating a high severity. EPSS is not available and the flaw is not listed in the CISA KEV catalog, but the lack of EPSS does not diminish the risk; the conditions required for exploitation are relatively common in Zephyr deployments that enable userspace and expose PECI drivers. The attack vector is local, relying on user‑mode code executed within the same process space as the kernel driver, and requires no network access. Given the serious potential for kernel compromise, the threat level warrants immediate remediation.

Generated by OpenCVE AI on October 22, 2026 at 04:14 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the latest Zephyr OS release that includes the patch from commit d7faf323d52b7e8845a63b1f854a82bdda44c261, which adds K_SYSCALL_MEMORY_READ() and K_SYSCALL_MEMORY_WRITE() checks for the PECI buffers.
  • If upgrading immediately is not possible, disable CONFIG_USERSPACE for the PECI device or ensure that no untrusted user applications hold PECI device objects.
  • For additional hardening, disable the unused PECI driver configuration options (CONFIG_PECI_NPCX, CONFIG_PECI_XEC, CONFIG_PECI_ITE_IT8XXX2) when the hardware does not need PECI support.

Generated by OpenCVE AI on October 22, 2026 at 04:14 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 23 Oct 2026 22:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Thu, 22 Oct 2026 02:15:00 +0000

Type Values Removed Values Added
First Time appeared Zephyrproject
Zephyrproject zephyr
Vendors & Products Zephyrproject
Zephyrproject zephyr

Wed, 21 Oct 2026 18:30:00 +0000

Type Values Removed Values Added
Description The user-mode verifier for the peci_transfer() system call, z_vrfy_peci_transfer() in drivers/peci/peci_handlers.c, checked only the device object permission and copied the caller-supplied struct peci_msg with k_usermode_from_copy(). That copy validates the outer structure only; the buf pointers and len values inside the embedded struct peci_buf members tx_buffer and rx_buffer remained fully caller-controlled and were passed unchecked to the driver. Every in-tree PECI driver dereferences those pointers in supervisor mode: peci_npcx_transfer() in drivers/peci/peci_npcx.c and peci_it8xxx2_transfer() in drivers/peci/peci_ite_it8xxx2.c copy hardware bytes into rx_buffer.buf[i] and read command bytes out of tx_buffer.buf[i], and peci_xec_read()/peci_xec_write() in drivers/peci/peci_mchp_xec.c do the same with no bound on rx_buffer.len at all. A user-mode thread that has been granted the PECI device object — the normal way an application exposes a device under CONFIG_USERSPACE — could therefore point rx_buffer.buf at kernel data structures and have the driver write hardware-supplied bytes there, or point tx_buffer.buf at kernel memory and have its contents pushed onto the PECI/eSPI out-of-band bus. The impact is a full user-mode-to-kernel escape: an arbitrary kernel write primitive (integrity and, through it, code execution at supervisor privilege), an arbitrary kernel read disclosed to a PECI bus observer, and a trivially reachable supervisor-mode fault if an unmapped address is supplied. Exploitation requires CONFIG_USERSPACE=y, one of the PECI drivers enabled (CONFIG_PECI_NPCX, CONFIG_PECI_XEC or CONFIG_PECI_ITE_IT8XXX2), and local code execution in a user-mode thread holding the PECI device. The fix adds K_SYSCALL_MEMORY_READ() and K_SYSCALL_MEMORY_WRITE() checks over the two embedded buffers, with a size_add_overflow() guard on the frame-check-sequence byte accounted for in the RX length.
Title PECI transfer syscall verifier does not validate embedded user buffer pointers, allowing arbitrary kernel memory read/write from user mode
Weaknesses CWE-822
References
Metrics cvssV3_1

{'score': 7.8, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'}


Subscriptions

Zephyrproject Zephyr
cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-11-04T05:01:13.935Z

Reserved: 2026-08-12T22:25:11.381Z

Link: CVE-2026-19676

cve-icon Vulnrichment

Updated: 2026-10-23T20:45:37.533Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-21T19:17:02.650

Modified: 2026-11-04T05:18:49.827

Link: CVE-2026-19676

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-22T04:15:09Z

Weaknesses
  • CWE-822

    Untrusted Pointer Dereference