CVE-2026-13217 in Zephyr
Zusammenfassung
von VulDB • 25.08.2026
Der OCPP 1.6-Client in subsys/net/lib/ocpp/ocpp.c rekonstruiert einen Session-Handle und eine PDU-ID aus dem uid-Feld einer CALLRESULT-Nachricht. In ocpp_process_server_msg() ruft der Code atoi(strtok_r(uid, "-", &tmp)) auf, ohne den Rückgabewert von strtok_r zu überprüfen. Wenn das vom Server bereitgestellte uid leer ist oder kein "-"-Trennzeichen enthält, gibt strtok_r() NULL zurück und atoi(NULL) dereferenziert einen NULL-Zeiger, was undefiniertes Verhalten darstellt.
Das uid stammt aus Netzwerkdaten: parse_rpc_msg() in subsys/net/lib/ocpp/ocpp_j.c parst ein über TCP/WebSocket vom OCPP-Central-System empfangenes Frame im JSON-Format und kopiert den serverkontrollierten String in einen lokalen Puffer. Ein böswilliges oder kompromittiertes Central-System bzw. ein Man-in-the-Middle bei einer nicht-TLS ws://-Verbindung kann ein fehlerhaftes uid zurückgeben, um die Schwachstelle auszunutzen. Es ist keine Authentifizierung über die bestehende Serververbindung (oder MITM-Position) hinaus erforderlich, und der rekonstruierte Zeiger wird durch ocpp_session_is_valid() auf Gültigkeit überprüft, sodass die Auswirkung auf den NULL-Dereferenzierungsfehler beschränkt bleibt und nicht zu einer beliebigen Zeigernutzung führt.
Auf Zephyr-Zielen, die Zugriffe auf Adresse 0 abfangen (MMU/MPU-Plattformen oder CONFIG_NULL_POINTER_EXCEPTION_DETECTION), verursacht der Dereferenzierungsfehler im OCPP-Leserthread den Aufruf des fatal handlers und erzeugt einen Remote-Denial-of-Service für das Ladepunkt; auf Bare-Metal-Zielen, bei denen Adresse 0 lesbar ist, gibt der Aufruf 0 zurück und ist harmlos, sodass die Auswirkung nur die Verfügbarkeit betrifft und plattformabhängig ist.
Die angewendete Korrektur schützt nur den ersten atoi()-Aufruf; der zweite strtok_r(NULL, "-", &tmp) gefolgt von pdu = atoi(buf) in derselben Funktion bleibt ungeschützt, und die identische NULL-Dereferenzierung ist weiterhin über dieselbe Netzwerkeingabe erreichbar, wenn das uid ein erstes Token, aber kein zweites durch "-" getrenntes Token enthält. Eine vollständige Korrektur sollte auch das zweite Token validieren.
If you want to get best quality of vulnerability data, you may have to visit VulDB.