Skip to main content

Zephyr RTOS OCPP CVE-2026-10848

| EUVDEUVD-2026-52008 HIGH
Out-of-bounds Read (CWE-125)
2026-08-02 zephyr
8.6
CVSS 3.1 · NVD
Share

Severity by source

Vendor (zephyr) PRIMARY
HIGH
qualitative
NVD
8.6 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H
vuln.today AI
8.2 HIGH

C:N because vendor explicitly confirms over-read data is not reflected to the peer; I:L for the stray NUL stack write; AV:N and PR:N because the attack originates from the remote OCPP central server.

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

Primary rating from Vendor (zephyr).

CVSS VectorNVD

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

Lifecycle Timeline

6
Analysis Updated
Aug 10, 2026 - 14:30 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Aug 10, 2026 - 14:22 vuln.today
cvss_changed
CVSS changed
Aug 10, 2026 - 14:22 NVD
7.0 (HIGH) 8.6 (HIGH)
Source Code Evidence Fetched
Aug 02, 2026 - 16:52 vuln.today
Analysis Generated
Aug 02, 2026 - 16:52 vuln.today
CVE Published
Aug 02, 2026 - 16:12 cve.org
HIGH 7.0

DescriptionNVD

The OCPP 1.6 client in subsys/net/lib/ocpp parsed inbound WAMP RPC frames in parse_rpc_msg() (subsys/net/lib/ocpp/ocpp_j.c) using a hand-rolled helper, extract_string_field(), that copied the message's uid and action fields with strncpy(out_buf, token + 1, outlen - 1) and then scanned the result with strchr(out_buf, '"'). Because strncpy does not NUL-terminate the destination when the source is at least outlen - 1 (127) bytes long, the subsequent strchr reads past the 128-byte destination buffer into adjacent stack memory; if a " byte is found beyond the buffer, a one-byte out-of-bounds NUL write also occurs. A related defect in extract_payload() runs strchr/strrchr over the receive buffer, which may not be NUL-terminated when a maximal-length frame fills it.

The parsed bytes come directly from the OCPP central-system server over a websocket: the reader thread fills recv_buf via websocket_recv_msg() and calls parse_rpc_msg() on each inbound DATA frame (subsys/net/lib/ocpp/ocpp.c). A malicious or compromised central server, or an on-path attacker (OCPP is commonly deployed over plain ws://), can send an RPC frame whose uid or action field is 127+ bytes with no closing quote, triggering the out-of-bounds access.

The primary impact is a remotely triggerable denial of service: the unbounded scan can fault on an unmapped page, and the stray NUL write can corrupt adjacent stack state. The over-read data is not reflected to the peer, so disclosure is limited. The feature is EXPERIMENTAL and must be explicitly enabled (CONFIG_OCPP). The fix replaces the manual parser with the bounds-respecting json_mixed_arr_parse() and copies the extracted uid with an explicitly NUL-terminated buffer, eliminating both over-reads.

AnalysisAI

Stack buffer over-read and stray one-byte NUL write in Zephyr RTOS's experimental OCPP 1.6 client allow a malicious or compromised OCPP central server - or an on-path attacker exploiting the commonly unencrypted ws:// transport - to crash a connected embedded device by sending a crafted WAMP RPC frame with an oversized uid or action field. The vulnerable helper extract_string_field() uses strncpy() without guaranteeing NUL-termination, causing a subsequent strchr() call to scan unbounded into adjacent stack memory; a secondary defect in extract_payload() compounds this on maximal-length frames. No active exploitation has been confirmed by CISA KEV, but SSVC classification indicates publicly available proof-of-concept code, and EPSS sits at a low 0.19% (10th percentile), consistent with a niche embedded RTOS attack surface.

Technical ContextAI

The vulnerability originates in the OCPP 1.6 (Open Charge Point Protocol) WebSocket JSON client within Zephyr's networking subsystem at subsys/net/lib/ocpp/ocpp_j.c. OCPP 1.6 encodes RPC messages as WAMP (Web Application Messaging Protocol) arrays over WebSocket, and the Zephyr implementation parses these in parse_rpc_msg(). CWE-125 (Out-of-bounds Read) maps precisely to the root cause: extract_string_field() calls strncpy(out_buf, token + 1, outlen - 1) with outlen=128, copying at most 127 bytes but never writing the NUL terminator when the source string is exactly 127 or more bytes - a well-documented C pitfall. The immediately following strchr(out_buf, '"') then walks unbounded into adjacent stack frames; if a double-quote byte is found beyond the 128-byte boundary, a one-byte NUL is written at that out-of-bounds address, potentially corrupting a saved return address, local variable, or canary. A secondary defect in extract_payload() calls strchr/strrchr on recv_buf, which may be unterminated when a maximal-length OCPP frame exactly fills the buffer. The commit diff confirms the fix replaces both helpers with the bounds-safe json_mixed_arr_parse() API and explicitly NUL-terminates the uid copy with uid[uidlen-1]='\0'. The affected CPE is cpe:2.3:a:zephyrproject:zephyr:*:*:*:*:*:*:*:*, covering versions 4.3.0 through pre-4.5.0 on all supported architectures, but only when CONFIG_OCPP=y is set at build time.

RemediationAI

Upgrade to Zephyr 4.5.0 or later, which incorporates the fix from commit e500f7b81b5b8a867e28b2f4e59512cbfdd5ae75 (https://github.com/zephyrproject-rtos/zephyr/commit/e500f7b81b5b8a867e28b2f4e59512cbfdd5ae75); the patched version is confirmed by the upstream Zephyr project security advisory at GHSA-jgqq-7mjj-w642. If an immediate firmware rebuild and deployment is not feasible, the most effective compensating control is to disable CONFIG_OCPP at build time and re-flash, which eliminates the vulnerable code entirely with no functional impact on non-OCPP workloads. For operators who require OCPP functionality and cannot patch immediately, two network-layer mitigations reduce (but do not eliminate) risk: first, configure the OCPP WebSocket connection to use TLS (wss://) with certificate pinning to the legitimate central server, which defeats on-path injection attacks though not a compromised server; second, isolate the device's network segment so the OCPP central server endpoint is reachable only from a trusted management VLAN, reducing the on-path attacker surface. Note that neither network-layer measure addresses the case of a legitimately compromised central server, so patching remains the only complete fix.

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-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-2026-1678 CRITICAL POC
9.4 Mar 05

Buffer overflow in Zephyr RTOS dns_unpack_name() function causing OOB writes. PoC available.

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

Share

CVE-2026-10848 vulnerability details – vuln.today

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