Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIntercept unencrypted ws:// OCPP connection via MitM
-
DeliveryWait for charge point CALL request
-
ExploitReturn CALLRESULT with empty or delimiter-free uid
-
Installstrtok_r returns NULL in ocpp_process_server_msg()
-
C2atoi(NULL) triggers NULL dereference
-
ExecuteFatal handler terminates OCPP reader thread
-
ImpactCharge 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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 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
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Network vector applies via WebSocket; AC:H reflects MitM or server-compromise prerequisite; C/I:N because impact is strictly availability through thread crash.
Primary rating from Vendor (zephyr).
CVSS VectorVendor: zephyr
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
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 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.
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-65598
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB