Skip to main content

Zephyr RTOS CVE-2026-19571

| EUVDEUVD-2026-95527 MEDIUM
Race Condition (CWE-362)
2026-10-09 zephyr
6.7
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Access
    Gain SPI host-controller control over SHI bus
  2. Delivery
    Send well-formed first SHI request
  3. Exploit
    De-assert CS and inject header with data_len=0xFFFF
  4. Execution
    Win race before thread reads packet length
  5. Impact
    Leak ~64KiB adjacent EC memory or fault controller

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a device running Zephyr with the ITE IT8xxx2 SHI host-command backend (ec_host_cmd_backend_shi_ite.c) active as the EC host-command transport. The attacker must control the SPI host controller - i.e., a compromised host OS driving chip-select and clock, or physical access to the SPI lines - and must win a timing race: after a valid first request, de-assert chip select (returning the driver to ready and re-enabling the FIFO) and start a second transaction carrying a header with data_len=0xFFFF, landing those 8 bytes in in_msg during the window before the host-command thread executes args.input_buf_size = rx_header->data_len. Meaningful disclosure further depends on the registered command handler copying or echoing input_buf_size bytes. Limiting factors: local bus access only (no network vector), high attack complexity due to the race, and the fact that the pre-patch bug needs interrupts accepted in states other than SHI_STATE_DISABLED; note the fix leaves a residual bounded race (an end-of-transaction interrupt still resets to ready while the buffer is owned), unlike the NPCX backend which parks in SHI_STATE_CNL_RESP_NOT_RDY.

Impact

This is a genuine but access-gated vulnerability rather than a high-urgency internet-facing one. The CVSS 3.1 vector (AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:H, 6.7 Medium) is internally consistent with the description: the attack is LOCAL because it requires driving the inter-processor SHI/SPI bus, and AC:H correctly reflects that exploitation hinges on winning a timing race against the host-command thread. PR:N is technically accurate - there is no authentication on the SHI bus itself - but this should not be read as 'remote unauthenticated' in the network sense; the attacker must already be the SPI controller (a compromised host OS or physical SPI-line access), which is a substantial precondition. There is no EPSS score, no CISA KEV listing, and no public POC provided, so exploitation status is 'no public exploit identified at time of analysis.' The race is retryable indefinitely by the SPI controller, which somewhat offsets the AC:H difficulty for a determined local attacker. Impact is real: C:H reflects disclosure of up to ~64 KiB of adjacent embedded-controller memory, and A:H reflects a controller fault when the read runs past SRAM. No key signals are in direct conflict; the main caveat is that the high C/A impact is only reachable by an attacker already positioned on the inter-processor bus, so prioritization should weigh the deployment's threat model (is the host OS trusted?) heavily.

Exploit ScenarioDerived

An attacker who has compromised the host operating system (or has physical access to the SPI lines) acts as the SHI/SPI controller, sends a well-formed host-command request, then immediately de-asserts chip select and begins a second transaction whose 8-byte header declares data_len = 0xFFFF. If the second header lands in the window before the embedded-controller host-command thread reads rx_header->data_len, the framework hands a registered command handler a 65535-byte input length over a 256-byte buffer, producing an out-of-bounds read that leaks adjacent EC memory back to the host or faults the controller. No public exploit code is identified, but the SPI controller can retry the race indefinitely until it wins.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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 – Oct 09, 2026

Out-of-bounds read of up to roughly 64 KiB in Zephyr's ITE IT8xxx2 SHI host-command backend allows an attacker who drives the SPI host controller to disclose adjacent embedded-controller SRAM to the host, or to fault the controller by reading past the end of SRAM. The root cause is a race: the 8-byte host-command header is copied from the SPI Rx FIFO directly into the shared in_msg buffer before the protocol version and derived packet length are validated, so a second transaction carrying data_len = 0xFFFF can deposit its header into a buffer that verify_rx() has already accepted; if those bytes land before the host-command thread assigns args.input_buf_size = rx_header->data_len, a registered handler is handed a 65535-byte length over a 256-byte buffer. Exploitation requires local control of the inter-processor SHI bus (a compromised host OS driving chip select and clock, or physical access to the SPI lines) plus a timing race the host can retry indefinitely, and is unauthenticated per the CVSS vector (PR:N); no public exploit code or confirmed active exploitation was identified at time of analysis.

RemediationAI

Primary fix: apply the upstream Zephyr commit 0636e65c825e810ad97f154606365870152d402f (advisory GHSA-4x98-6536-cwjv), which parses the host-command header into a local struct ec_host_cmd_request_header, copies it into in_msg only after the length is bounded by sizeof(data->in_msg), and rejects chip-select and RVLI interrupts outside SHI_STATE_READY_TO_RECV/SHI_STATE_RECEIVING; because the input only confirms patch availability from the vendor and a commit reference, an exact patched release tag is not independently confirmed, so track the advisory for the supported release that carries the change. If patching must be deferred: audit every registered host-command handler and remove or wrap any that copy or echo input_buf_size bytes into the response, which removes the memory-disclosure path but not the underlying out-of-bounds read or the fault-on-SRAM-overrun; treat the host OS as untrusted and avoid granting it a host-command channel over the SHI bus, understanding this breaks normal EC management; and enforce physical protection of the SPI lines, since physical access alone is sufficient to exploit the race. Note the side effects and residual risk: the fix does not eliminate a bounded race in which a valid second request can still overwrite an in-flight request's buffer, because the ITE backend does not park in a buffer-in-use state equivalent to the NPCX backend's SHI_STATE_CNL_RESP_NOT_RDY; fully disabling the SHI ITE backend removes exposure but eliminates EC host-command transport on that SoC.

Affected VersionsENISA

Zephyr 3.3.0 <4.5.0

Affected Packages

euvd zephyr fix: 4.5.0

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's embedded-controller host command framework (subsys/mgmt/ec_host_cmd) lets a host processor issue structured commands to an EC over a transport backend; on ITE IT8xxx2 SoCs that transport is the SPI-based SHI interface implemented in subsys/mgmt/ec_host_cmd/backends/ec_host_cmd_backend_shi_ite.c. Each request starts with a fixed 8-byte struct ec_host_cmd_request_header carrying prtcl_ver, data_len, checksum, cmd_id and cmd_ver; verify_rx() in ec_host_cmd_handler.c validates the checksum and the framework then derives args.input_buf_size from rx_header->data_len before dispatching to the registered command handler. The vulnerable code wrote the header from the Rx FIFO straight into the long-lived shared buffer data->in_msg and only then bounded the length, and the interrupt handler accepted a chip-select assertion and an Rx-valid-length (RVLI) interrupt in any driver state other than SHI_STATE_DISABLED, so a new header could be parsed while the host-command thread was still consuming the previous request from that same buffer. This is a classic CWE-362 concurrent-execution-on-a-shared-resource flaw: a check (verify_rx and the version/length validation) is performed on a buffer that can be rewritten afterwards, producing a TOCTOU-style oversized length (CWE-362) that surfaces as an out-of-bounds read and a possible SRAM access fault. The fix parses the header into a local struct ec_host_cmd_request_header, memcpy's it into in_msg only after the length is bounded by sizeof(data->in_msg), and restricts chip-select and RVLI interrupt handling to SHI_STATE_READY_TO_RECV/SHI_STATE_RECEIVING; a residual bounded race remains because an end-of-transaction interrupt can still reset the state to ready while the host-command thread owns the buffer, unlike the NPCX backend which parks in SHI_STATE_CNL_RESP_NOT_RDY.

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

Vendor (zephyr) PRIMARY 6.7 MEDIUM
AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:H
vuln.today AI 6.7 MEDIUM

AV:L because the attacker must drive the inter-processor SHI/SPI bus; AC:H for the required timing race; PR:N as the bus has no auth; C:H/A:H for ~64KiB memory disclosure and controller fault, I:N.

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

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

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

DescriptionCVE.org

The ITE IT8xxx2 SHI host-command backend (subsys/mgmt/ec_host_cmd/backends/ec_host_cmd_backend_shi_ite.c) copied the 8-byte host-command request header from the SPI Rx FIFO directly into the shared receive buffer data->in_msg and only afterwards checked the protocol version and the derived packet length. The interrupt handler also accepted a chip-select assertion and an Rx-valid-length (RVLI) interrupt in any driver state other than SHI_STATE_DISABLED, so a new header could be parsed while the host-command thread was still processing the previous request out of the very same buffer.

The host processor is the SPI controller and drives both chip select and the clock. After sending a well-formed request it can immediately de-assert chip select - which returns the driver to the ready state and re-enables the FIFO - and start a second transaction carrying a header with data_len = 0xFFFF. Those eight bytes are written into in_msg before the oversized length is rejected, so they land in a buffer whose contents verify_rx() in subsys/mgmt/ec_host_cmd/ec_host_cmd_handler.c has already validated. If this lands in the window before the host-command thread executes args.input_buf_size = rx_header->data_len, the framework hands the registered command handler a 65535-byte input length over a 256-byte buffer.

The result is an out-of-bounds read of up to roughly 64 KiB beyond the request buffer: command handlers that copy or echo input_buf_size bytes disclose adjacent embedded-controller memory back to the host or overflow the response buffer, and a read past the end of SRAM faults the controller. The same race also allows cmd_id and cmd_ver to be swapped after checksum verification and after handler lookup. Exploitation requires the ability to drive the inter-processor SHI bus (a compromised host OS or physical access to the SPI lines) and winning a timing race, which the SPI controller can retry indefinitely.

The fix parses the header into a local struct ec_host_cmd_request_header and copies it into in_msg only after the length has been bounded by sizeof(data->in_msg), and ignores chip-select and RVLI interrupts outside SHI_STATE_READY_TO_RECV/SHI_STATE_RECEIVING. A residual, bounded race remains: an end-of-transaction interrupt still resets the state to ready while the host-command thread owns the buffer, so a valid second request can still overwrite the in-flight request's contents, unlike the NPCX backend which parks in SHI_STATE_CNL_RESP_NOT_RDY while the buffer is in use.

Threat Intelligence Overview

EPSS Score
0.1%
Top 100% exploitable
Prevalence
Low
niche embedded driver, specific ITE IT8xxx2 EC SHI backend only
Data Quality
5 sources
Confidence: Medium

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Defer
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).

More in Zephyr

View all
CVE-2023-4260 CRITICAL POC
10.0 Sep 27

Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),

CVE-2026-1678 CRITICAL POC
9.8 Mar 05

An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on

CVE-2023-5055 CRITICAL POC
9.8 Nov 21

Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit

CVE-2023-4257 CRITICAL POC
9.8 Oct 13

Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS

CVE-2023-3725 CRITICAL POC
9.8 Oct 06

Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner

CVE-2021-3323 CRITICAL POC
9.8 Oct 12

Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2021-3625 CRITICAL POC
9.8 Oct 05

Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable

CVE-2021-3319 CRITICAL POC
9.8 Oct 05

DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul

CVE-2018-1000800 CRITICAL POC
9.8 Sep 06

zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(

CVE-2023-4264 CRITICAL POC
9.6 Sep 27

Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul

CVE-2024-1638 CRITICAL POC
9.1 Feb 19

The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte

CVE-2023-5753 HIGH POC
8.8 Oct 25

Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c

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