CVE-2026-76787 in Zephyr
요약
\~에 의해 VulDB • 2026. 10. 19.
UpdateHub의 펌웨어 OTA(Over-The-Air) 클라이언트는 z_impl_updatehub_probe()(subsys/mgmt/updatehub/updatehub.c)에서 Zephyr의 JSON 라이브러리를 사용하여 CoAP probe 응답을 파싱합니다. 디코더는 모든 설명자 필드를 선택적(optional)으로 처리하며, json_obj_parse()는 실제로 디코딩된 필드의 비트마스크를 반환하고 누락된 경우에도 실패하지 않습니다. 따라서 "sha256sum" 문자열이 생략된 응답은 struct resp_probe_any_boards / struct resp_probe_some_boards 구조체 내 해당 const char *을 0으로 초기화된 상태로 NULL로 남깁니다. 두 메타데이터 분기 모두에서 검증 전에 sha256size = strlen(...objects.sha256sum) + 1가 계산되어 이 NULL 포인터를 역참조(dereferencing)합니다; 이후 수행되는 SHA256_HEX_DIGEST_SIZE 테스트는 이미 잘못된 읽기로 인해 생성된 값을 대상으로 하므로 이를 방지할 수 없습니다.
메타데이터는 네트워크 피어(peer)에 의해 완전히 제공됩니다: probe_cb()가 데이터그램을 수신하고 coap_packet_parse()를 실행하며 토큰 매칭이나 암호학적 검사가 없이 페이로드를 복사합니다. CONFIG_UPDATEHUB_DTLS 설정이 해제되어 있는 경우(기본값), start_coap_client()는 포트 5683에서 평문 CoAP over UDP를 사용하며 피어 인증 없이 서버를 비인증 DNS를 통해 해결하므로, 경로 상 공격자(on-path attacker), DNS 스푸퍼(DNS spoofer), 또는 위조된 소스 주소로 레이스 조건을 이기는 오프패스(off-path) 공격자가 손상된 메타데이터를 전달할 수 있습니다. "objects":[[{}],[{}]]와 같은 단순한 probe 응답으로도 충분하며, updatehub_autohandler()가 CONFIG_UPDATEHUB_POLL_INTERVAL에 따라 폴링하므로 사용자 상호작용은 필요하지 않습니다. CONFIG_UPDATEHUB_DTLS=y인 경우 트리거는 악성 또는 침해된 업데이트 서버로 좁혀집니다.
이 원시적 공격(primitive) 주소 0에서의 읽기(read)이며 쓰기가 아니므로, 영향도는 가용성(availability)에만 국한됩니다. 낮은 주소 범위가 매핑되지 않거나 보호되는 대상(MMU 기반 아키텍처, CONFIG_NULL_POINTER_EXCEPTION_DETECTION_DWT/_MPU/_PMP가 포함된 빌드, TrustZone 비보안(non-secure) 이미지, 0x0–0x400 창이 매핑되지 않은 nRF54L과 같은 SoC 등)에서는 로드 오류(load fault)가 발생하고 Zephyr의 기본 치명적 핸들러(fatal handler)가 시스템을 중단시켜, 모든 폴링 시 원격으로 재트리거 가능한 서비스 거부(Denial of Service)를 유발합니다. 주소 0에서 벡터 테이블이 읽을 수 있는 클래식 Cortex-M 대상에서는 순회(walk)가 일반적으로 즉시 종료되고 길이 검사에 의해 요청이 거절되므로, 결과는 구성 및 SoC에 따라 다릅니다. 메모리 쓰기가 없으며 복사된 바이트는 로컬로 계산된 이미지 해시와만 비교되므로 정보 유출 채널은 존재하지 않습니다.
해결책은 두 메타데이터 분기 모두에서 strlen() 이전에 sha256sum == NULL 검사를 명시적으로 추가하여 UPDATEHUB_METADATA_ERROR를 반환하도록 합니다. 디버그 빌드(CONFIG_UPDATEHUB_LOG_LEVEL=4)에서는 새로운 검사 전에 실행되는 LOG_DBG() 루프 내에서 동일한 포인터가 %s로 포맷되므로, 해당 변형은 디버그 구성에서만 유지됩니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.