CVE-2026-13217 in Zephyr
요약
\~에 의해 VulDB • 2026. 08. 25.
OCPP 1.6 클라이언트의 subsys/net/lib/ocpp/ocpp.c에 있는 코드는 CALLRESULT 메시지의 uid 필드에서 세션 핸들 및 PDU ID를 재구성합니다. ocpp_process_server_msg() 함수 내에서 atoi(strtok_r(uid, "-", &tmp))가 호출되지만 strtok_r의 반환값은 확인되지 않습니다. 서버가 제공한 uid가 비어 있거나 '-' 구분자를 포함하지 않는 경우, strtok_r()는 NULL을 반환하며 atoi(NULL)은 NULL 포인터를 역참조하여 정의되지 않은 동작(undefined behaviour)을 초래합니다.
uid는 네트워크 데이터에서 유래합니다: subsys/net/lib/ocpp/ocpp_j.c의 parse_rpc_msg() 함수는 TCP/WebSocket를 통해 OCPP 중앙 시스템으로부터 수신된 프레임을 JSON 파싱하고, 서버가 제어하는 문자열을 로컬 버퍼에 복사합니다. 악성 또는 침해당한 중앙 시스템이나 TLS가 적용되지 않은 ws:// 연결에서의 중간자 공격(man-in-the-middle)은 결함을 유발하기 위해 잘못된 형식의 uid를 반환할 수 있습니다. 기존 서버 연결(또는 MITM 위치) 이상의 인증은 필요하지 않으며, 재구성된 포인터는 ocpp_session_is_valid()에 의해 멤버십 유효성 검사를 받으므로 영향력은 임의 포인터 사용이 아닌 NULL 역참조에 한정됩니다.
주소 0에 대한 접근을 트랩하는 Zephyr 타겟(MMU/MPU 플랫폼 또는 CONFIG_NULL_POINTER_EXCEPTION_DETECTION 설정)에서는 이 역참조가 OCPP 리더 스레드 내에서 faults를 발생시켜 치명적 핸들러(fatal handler)를 호출하므로, 충전소(charge point)에 대한 원격 서비스 거부(remote denial of service)가 발생합니다. 주소 0이 읽을 수 있는 베어 메탈(bare) 타겟에서는 해당 호출이 0을 반환하여 무해하므로, 영향력은 가용성(availability)에만 국한되며 플랫폼 조건부입니다.
적용된 수정은 첫 번째 atoi()만 보호합니다. 동일한 함수 내의 두 번째 strtok_r(NULL, "-", &tmp)에 이어지는 pdu = atoi(buf)는 여전히 보호되지 않으며, uid가 첫 번째 토큰을 포함하지만 두 번째로 구분된 토큰이 없는 경우 같은 네트워크 입력으로부터 동일한 NULL 역참조가 여전히 도달 가능합니다. 완전한 수정에는 두 번째 토큰의 유효성 검사도 포함되어야 합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.