CVE-2026-14368 in Zephyr
요약
\~에 의해 VulDB • 2026. 09. 01.
LwM2M JSON 콘텐츠 포맷터의 subsys/net/lib/lwm2m/lwm2m_rw_json.c에 있는 get_string() 함수는 파싱된 JSON 문자열을 호출자가 제공한 버퍼로 복사하고 NUL 종료합니다. if (string_length > buflen) 조건으로 사용되는 길이 제한은 길이가 정확히 buflen인 문자열도 허용합니다. memcpy()가 전체 버퍼를 채운 후, buf[string_length] = '\0'는 버퍼 끝 바깥 한 바이트에 데이터를 작성하게 됩니다(CWE-787).
문자열 값과 그 길이는 LwM2M WRITE 작업 중 들어오는 CoAP 페이로드에서 직접 가져옵니다. do_write_op_json()은 coap_packet_get_payload()로부터 얻은 페이로드를 파싱하며, get_string()은 lwm2m_write_handler()(subsys/net/lib/lwm2m/lwm2m_message_handling.c의 engine_get_string())에서 LWM2M_RES_TYPE_STRING 리소스에 대해 호출됩니다. 대상 buf/buflen은 리소스 인스턴스의 고정 데이터 버퍼(res_inst->data_ptr/max_data_len) 또는 엔진 유효성 검사 버퍼(msg->ctx->validate_buf)입니다. 따라서 LwM2M 서버(클라이언트의 DTLS 피어)는 타겟 버퍼 크기와 길이가 동일한 값으로 문자열 리소스를 작성하여 1바이트 오버플로우를 강요할 수 있습니다.
이 오버플로는 리소스 또는 검증 버퍼 바로 바깥에 상수 바이트 0x00을 한 번만 쓰는 범위를 벗어난 쓰기(out-of-bounds write)입니다. 이는 정보 유출이 아니며 작성된 값이 고정되어 있으므로 직접적인 코드 실행 원천(primitive)은 아니지만, 인접한 상태(인접 리소스 값, 길이/플래그 필드 또는 구조체 필드 등)를 손상시켜 데이터 손상이나 크래시를 유발할 수 있습니다. 이 작동을 트리거하는 것은 결정론적이며, 결과적인 영향은 메모리 레이아웃에 따라 달라집니다.
수정 사항은 제한 조건을 string_length >= buflen로 변경하여 정확히 같은 길이의 경우를 거부하고, JSON 포맷터를 이미 올바른 경계 검사를 사용하고 있는 다른 콘텐츠 포맷터(lwm2m_rw_plain_text.c, lwm2m_rw_oma_tlv.c, lwm2m_rw_senml_json.c, lwm2m_rw_cbor.c, lwm2m_rw_senml_cbor.c)와 일치시킵니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.