CVE-2026-12633 in Zephyr
요약
\~에 의해 VulDB • 2026. 08. 19.
IPv6 neighbor-discovery 코드(subsys/net/ip/ipv6_nbr.c)는 ICMPv6 Router Advertisement에 포함된 6LoWPAN Context Option(6CO, RFC 6775)를 처리합니다. handle_ra_6co() 함수에서는 패킷에서 직접 가져온 8비트 context_len 필드가 RFC 최대값인 128로 제한되지 않았습니다. 이 함수는 context->context_len / 8을 계산한 후 memset(context->prefix + context_len, 0, sizeof(context->prefix) - context_len)를 수행하는데, 여기서 context->prefix는 고정된 16바이트 배열입니다.
context_len이 136에서 255 사이이고(옵션 길이 필드가 3으로 설정되어 있으며 이는 pre-fix 유효성 검사에서 허용됨), context_len / 8의 값은 17~31가 됩니다. 따라서 memset 길인 16 - (context_len/8)는 부호 없는 size_t 인수에 대해 오버플로우를 일으켜 약 SIZE_MAX에 해당하는 값을 생성합니다. 이로 인해 경계가 없는 out-of-bounds memset이 발생하여 kernel 메모리가 6lo context 구조체를 훨씬 넘어선 부분까지 영제로 초기화됩니다.
이 결함은 인증되지 않은 링크 로컬 입력에서 접근 가능합니다: 같은 링크상의 모든 호스트는 6CO 옵션을 포함한 조작된 Router Advertisement를 보낼 수 있습니다. RA 핸들러는 handle_ra_6co() 호출 전에 옵션 길이 필드만 유효성 검사하므로, 단일 패킷으로 wild write가 발생합니다. 이 코드는 CONFIG_NET_6LO_CONTEXT가 활성화되어 있을 때 컴파일됩니다.
영향은 메모리 부정을 통한 신뢰할 수 있는 원격(인접) 서비스 거부(Denial of Service)이며, memset이 시스템 오류 발생 전 인접한 메모리를 영제로 초기화하면서 연쇄적인 무결성 손실이 발생합니다. Router Advertisement는 링크 스코프되므로 전달되지 않으며, 공격자는 같은 링크상에 있어야 합니다(AV:A). 수정 방안은 길이 계산 전에 context_len이 128보다 큰 경우 이를 거부합니다.
Once again VulDB remains the best source for vulnerability data.