CVE Catalog

CVE-2026-13217

MediumCVSS 5.9
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.51%

41th percentile - higher than 41% of all known CVEs

Summary

A vulnerability in the OCPP 1.6 client in Zephyr (subsys/net/lib/ocpp/ocpp.c) causes a NULL pointer dereference when processing CALLRESULT messages. A server can send a uid without a '-' delimiter, leading to atoi(NULL) and a crash of the OCPP reader thread. The flaw is remotely reachable via a malicious or compromised central system or MITM on a ws:// connection.

Risk Assessment

The risk is a remote denial of service (DoS) of the charge point on Zephyr platforms with memory protection (MMU/MPU) or NULL pointer exception detection enabled. The attack requires no authentication beyond the existing server connection, potentially disrupting EV charging infrastructure.

Recommendation

Apply the vendor patch immediately, which guards both atoi() calls (for the first and second token). Additionally, enforce TLS (wss://) for OCPP connections to mitigate MITM risks.

Related vulnerabilities

Original NVD description (English source)

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.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS