Skip to main content

Zephyr OCPP CVE-2026-13217

| EUVDEUVD-2026-65598 MEDIUM
NULL Pointer Dereference (CWE-476)
2026-08-25 zephyr
5.9
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Recon
    Intercept unencrypted ws:// OCPP connection via MitM
  2. Delivery
    Wait for charge point CALL request
  3. Exploit
    Return CALLRESULT with empty or delimiter-free uid
  4. Install
    strtok_r returns NULL in ocpp_process_server_msg()
  5. C2
    atoi(NULL) triggers NULL dereference
  6. Execute
    Fatal handler terminates OCPP reader thread
  7. Impact
    Charge point remote denial of service

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Null pointer safety, defensive checks
MITRE ATT&CK

1 technique across 1 tactic: Impact

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

Exploitation Conditions

Exploitation requires that the target device runs Zephyr with the OCPP subsystem compiled in (CONFIG_OCPP enabled) and that the OCPP connection uses an unencrypted ws:// WebSocket transport (enabling MitM) OR that the attacker has already compromised or controls the OCPP central system the charge point is configured to trust. No additional authentication is required beyond occupying one of these two positions. Observable denial-of-service impact is further conditioned on the Zephyr target having an MMU, MPU, or CONFIG_NULL_POINTER_EXCEPTION_DETECTION configured - bare-metal targets without null-pointer trapping are not impacted, as reading address 0 returns 0 and execution continues normally. The fix in commit 4d8a9eb removes only the first exploitable path; a uid with exactly one hyphen-delimited token still triggers the identical bug via the second unguarded atoi() call in the same function.

Impact

The CVSS 3.1 vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H scores 5.9, reflecting network reachability tempered by high attack complexity: the attacker must either control or compromise the OCPP central system, or occupy a MitM position on an unencrypted ws:// connection. This AC:H rating appropriately captures the constraint. EPSS data was not supplied, so exploitation probability cannot be quantified numerically; however, OCPP-over-plain-WebSocket deployments in poorly segmented networks (common in legacy EV infrastructure) lower the practical bar for MitM. The vulnerability is not listed in CISA KEV and no public exploit or proof-of-concept code has been identified at time of analysis. The impact is strictly availability and platform-conditional, significantly limiting blast radius: bare-metal Zephyr targets are immune, and the affected scope is a single charge point device rather than a backend server. The partial patch status is a material risk factor - applying only the first commit (4d8a9eb) leaves the second strtok_r/atoi path reachable via a carefully shaped uid. Defenders should treat this as a medium-priority embedded-IoT issue elevated by the patch incompleteness.

Exploit ScenarioDerived

An attacker occupying a MitM position on an unencrypted ws:// OCPP connection - achievable via ARP spoofing on a shared charging-station LAN or via a rogue access point - waits for the charge point to issue a CALL request, then returns a CALLRESULT whose uid field contains no hyphen delimiter or is empty. The ocpp_process_server_msg() function calls strtok_r on the malformed uid, receives NULL, and passes it directly to atoi(); on an MMU-equipped Zephyr device, the resulting NULL dereference faults the OCPP reader thread and invokes the fatal handler, taking the charge point offline. No public proof-of-concept code exists, but the attack primitive is straightforward network packet injection requiring no binary exploit skill.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 25, 2026

NULL pointer dereference in the Zephyr RTOS OCPP 1.6 client allows a malicious or compromised OCPP central system - or a man-in-the-middle on an unencrypted ws:// connection - to remotely crash the OCPP reader thread of an EV charge point by returning a malformed CALLRESULT uid field. Impact is availability-only and platform-conditional: on MMU/MPU-equipped or CONFIG_NULL_POINTER_EXCEPTION_DETECTION-enabled Zephyr targets, the fault invokes the fatal handler and produces a remote denial of service; on bare-metal targets where address 0 is readable, the call returns 0 and is benign. No public exploit is identified at time of analysis, and the vendor-supplied patch at the referenced commits is known to be incomplete - a second unguarded strtok_r/atoi pair in the same function path remains exploitable via a uid containing one token but no second hyphen-delimited segment.

RemediationAI

Upstream fix is available as two commits on the Zephyr repository: commit 4d8a9eb (https://github.com/zephyrproject-rtos/zephyr/commit/4d8a9eb1448061ccee557ef20a2a58aec91d9cad) adds a NULL check after the first strtok_r call, and commit 3a55507 (https://github.com/zephyrproject-rtos/zephyr/commit/3a55507dd8011d877dc89eff949e70b42d45bacf) addresses related issues. A released patched version has not been independently confirmed - this is an upstream fix available as commits, not yet tied to a tagged Zephyr release at time of analysis. Critically, the description notes the fix remains incomplete: the second strtok_r(NULL, "-", &tmp)/atoi(buf) call for PDU id extraction in the same function is still unguarded. A complete remediation must also add a NULL check before this second atoi() call. As compensating controls, operators should enforce TLS (wss://) for all OCPP connections to eliminate MitM exposure; restrict network access to the OCPP central system endpoint at the firewall level to prevent rogue server connections; and consider disabling the OCPP subsystem (CONFIG_OCPP) on deployments that do not require it. Enforcing wss:// has no functional trade-offs for standard OCPP 1.6S deployments. Consult the GHSA advisory for vendor guidance on affected release timelines.

Affected VersionsENISA

Zephyr 4.3.0 <4.4.2

Affected Packages

euvd zephyr fix: 4.4.2

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 code resides in the Zephyr RTOS networking subsystem at subsys/net/lib/ocpp/ocpp.c, which implements the OCPP 1.6 JSON-RPC protocol (OCPP-J) used by EV charge points to communicate with central management systems over TCP/WebSocket. CWE-476 (NULL Pointer Dereference) is the root cause class: in ocpp_process_server_msg(), the uid string field from a server-sent CALLRESULT message is tokenized using strtok_r(uid, "-", &tmp). The return value of strtok_r is not checked before being passed directly to atoi(), which is undefined behaviour in C when its argument is NULL. The uid originates from untrusted network data: parse_rpc_msg() in subsys/net/lib/ocpp/ocpp_j.c JSON-parses the raw TCP/WebSocket frame and copies the server-controlled uid string into a local buffer. The CPE cpe:2.3:a:zephyrproject:zephyr:*:*:*:*:*:*:*:* covers all Zephyr versions with the OCPP subsystem. The partial fix (commit 4d8a9eb) guards only the first atoi() call; the second strtok_r(NULL, "-", &tmp)/atoi(buf) pair in the same function, used to extract the PDU id, remains unguarded and reachable via a uid string containing exactly one hyphen-separated token.

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 5.9 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 5.9 MEDIUM

Network vector applies via WebSocket; AC:H reflects MitM or server-compromise prerequisite; C/I:N because impact is strictly availability through thread crash.

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

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

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

DescriptionCVE.org

The OCPP 1.6 client in subsys/net/lib/ocpp/ocpp.c reconstructs a session handle and PDU id from the uid field of a CALLRESULT message. In ocpp_process_server_msg() the code calls atoi(strtok_r(uid, "-", &tmp)) without checking the strtok_r return value. When the server-supplied uid is empty or contains no - delimiter, strtok_r() returns NULL and atoi(NULL) dereferences a NULL pointer, which is undefined behaviour.

The uid originates from network data: parse_rpc_msg() in subsys/net/lib/ocpp/ocpp_j.c JSON-parses a frame received from the OCPP central system over TCP/WebSocket and copies the server-controlled string into the local buffer. A malicious or compromised central system, or a man-in-the-middle on a non-TLS ws:// connection, can return a malformed uid to reach the defect. No authentication beyond the existing server connection (or MITM position) is required, and the reconstructed pointer is membership-validated by ocpp_session_is_valid(), so the impact is limited to the NULL dereference rather than arbitrary pointer use.

On Zephyr targets that trap access to address 0 (MMU/MPU platforms or CONFIG_NULL_POINTER_EXCEPTION_DETECTION), the dereference faults inside the OCPP reader thread and invokes the fatal handler, producing a remote denial of service of the charge point; on bare targets where address 0 is readable the call returns 0 and is benign, so the impact is availability-only and platform-conditional.

The applied fix guards only the first atoi(); the second strtok_r(NULL, "-", &tmp) followed by pdu = atoi(buf) in the same function remains unguarded and the identical NULL dereference is still reachable from the same network input when the uid has a first token but no second --delimited token. A complete fix should validate the second token as well.

Threat Intelligence Overview

EPSS Score
0.5%
Top 59% exploitable
Prevalence
Low
niche embedded RTOS; OCPP subsystem specific to EV charging deployments
Data Quality
6 sources
Confidence: High

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.5%
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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

31
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

A null pointer dereference occurs when a program attempts to access memory through a pointer that has been set to NULL (address 0x0).

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

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