Executive Summary
CVE-2026-13214 is a critical stack buffer overflow (CVSS 9.8) discovered in the OCPP 1.6 (Open Charge Point Protocol) client implementation found in embedded RTOS networking subsystems. The vulnerability exists in parse_getconfig_msg() within subsys/net/lib/ocpp/ocpp_j.c, where an attacker-controlled JSON "key" string from a malicious central charging station is copied without bounds checking into a fixed 50-byte stack buffer (skey[CISTR50]).
Because OCPP's central system acts as the controlling authority for charge point clients — and the overflow requires no authentication — a compromised or rogue central system can execute arbitrary code on every connected charge point.
| Attribute | Value |
|---|---|
| CVE ID | CVE-2026-13214 |
| CVSS Score | 9.8 (Critical) |
| Type | Stack Buffer Overflow → Remote Code Execution |
| Attack Vector | Network (WebSocket/JSON-RPC) |
| Authentication | None required |
| User Interaction | None |
| Published | 2026-08-25 |
Vulnerability Details
Root Cause
OCPP 1.6 uses a JSON-over-WebSocket protocol where the central system sends GetConfiguration requests to charge points to retrieve configuration keys. The vulnerable handler reads the "key" array element from the incoming JSON and copies it into a caller-supplied buffer declared as:
char skey[CISTR50]; /* 50-byte fixed stack buffer */The copy operation does not validate the length of the attacker-supplied string before writing it into skey. An attacker who controls or compromises the central system — or who can man-in-the-middle the WebSocket connection — can send a GetConfiguration message with a "key" value exceeding 50 bytes, overflowing the buffer and overwriting adjacent stack data including the saved return address.
Attack Scenario
Central System (attacker-controlled)
│
│ GetConfiguration { "key": "A" * 500 } ← oversized key
│
▼
Charge Point OCPP Client
└─ parse_getconfig_msg() called
└─ strcpy(skey, json_key) ← no length check
└─ 500 bytes → 50-byte buffer
└─ Stack smash → RCEBecause the central system is the trusted authority in OCPP architecture, charge points accept messages without additional authentication. A rogue or compromised central system operator can target the entire fleet of connected charge points simultaneously.
Affected Systems
The vulnerability is present in the OCPP 1.6 client implementation within the embedded networking subsystem at subsys/net/lib/ocpp/ocpp_j.c. Systems affected include:
- Zephyr RTOS — OCPP 1.6 networking stack (prior to patch)
- Any downstream firmware or product integrating this OCPP 1.6 client code without the bounds-checking fix
- EV charge point hardware running RTOS builds that include this subsystem
Impact
Successful exploitation of CVE-2026-13214 allows an attacker to:
- Execute arbitrary code on the charge point's main processor
- Disable or brick charging stations (denial of service to EV infrastructure)
- Pivot into local networks — many commercial charge points are connected to enterprise or building networks
- Modify billing logic — enabling free charging or fraudulent transactions
- Install persistent firmware implants — surviving reboots if flash write capabilities exist
Why This Is High Risk
EV charging infrastructure is increasingly integrated into enterprise campuses, parking structures, and grid-connected energy management systems. A compromised charge point with network access can:
- Exfiltrate network credentials observed in transit
- Serve as a pivot point for lateral movement into corporate or industrial networks
- Participate in coordinated grid-load attacks if multiple charge points are controlled simultaneously
Remediation
Immediate Actions
-
Apply the upstream patch — The fix validates the JSON key length against
CISTR50before copying. Upgrade to any build that includes the bounds-checking fix inparse_getconfig_msg(). -
Restrict central system access — Ensure charge points only connect to trusted, authenticated central system endpoints. Enforce TLS with certificate pinning where possible.
-
Network segmentation — Place EV charging networks on isolated VLANs with no direct access to corporate infrastructure.
-
Monitor WebSocket traffic — Alert on
GetConfigurationmessages with key values exceeding 50 characters from unexpected sources.
Fix Overview
The correct implementation validates input length before the copy:
/* Patched version */
if (strlen(json_key) >= sizeof(skey)) {
return -EINVAL; /* reject oversized key */
}
strncpy(skey, json_key, sizeof(skey) - 1);
skey[sizeof(skey) - 1] = '\0';Detection
Indicators of Exploitation Attempt
| Indicator | Description |
|---|---|
OCPP GetConfiguration with key length > 50 chars | Likely overflow attempt |
| Charge point crash/reboot after central system contact | Possible successful overflow |
| Unexpected outbound connections from charge point IP | Post-exploitation C2 activity |
| Charge point accepting connections from unknown central system IPs | MitM or rogue central system |
Network Monitoring
Monitor the WebSocket connection to the OCPP central system for malformed GetConfiguration payloads. Legitimate OCPP key names are well-defined in the specification and do not approach 50 characters.
Key Takeaways
- CVSS 9.8 Critical — Unauthenticated stack buffer overflow via attacker-controlled JSON input
- No authentication required — Central system trust model means any rogue/compromised central system can attack the entire charge point fleet
- Patch immediately — Apply the upstream bounds-checking fix; rebuild and redeploy affected firmware
- Segment EV networks — Charge points should not have direct access to enterprise systems
- EV infrastructure is OT — Apply operational technology (OT) security principles: assume compromise, monitor deeply, isolate aggressively
References
- NVD — CVE-2026-13214
- Zephyr Project Security Advisories
- OCPP 1.6 Specification — Open Charge Alliance