subsys/net/ip/utils.c의 parse_ipv4()("a.b.c.d:port" 형식의 문자열에 대해 net_ipaddr_parse()를 통해 도달)는 str_len - end - 1의 길이를 사용하여 포트 하위 문자열을 고정 17바이트 스택 버퍼(char ipaddr[NET_IPV4_ADDR_LEN + 1])에 복사합니다. 여기서 str_len은 제한되지 않은 전체 입력 길이이고 end는 ':' 구분 기호의 (<=15바이트) 오프셋만 있습니다. 대상 크기는 절대 참조되지 않으므로 콜론 뒤에 긴 접미사가 있는 조작된 주소 문자열(예: "1.2.3.4:" 뒤에 100이 옴)
subsys/net/ip/utils.c의 parse_ipv4()("a.b.c.d:port" 형식의 문자열에 대해 net_ipaddr_parse()를 통해 도달)는 str_len - end - 1의 길이를 사용하여 포트 하위 문자열을 고정 17바이트 스택 버퍼(char ipaddr[NET_IPV4_ADDR_LEN + 1])에 복사합니다. 여기서 str_len은 제한되지 않은 전체 입력 길이이고 end는 ':' 구분 기호의 (<=15바이트) 오프셋만 있습니다. 대상 크기는 절대 참조되지 않기 때문에 콜론 뒤에 긴 접미사가 있는 조작된 주소 문자열(예: "1.2.3.4:" 뒤에 수백 바이트가 옴)은 길이와 내용이 완전히 공격자가 제어하는(접미사의 memcpy와 후행 NUL) 범위를 벗어난 스택 쓰기를 유발하여 메모리 손상과 최소한 서비스 거부 및 잠재적으로 제어 흐름 하이재킹을 가능하게 합니다. 파서는 표준 소켓 API(zsock_getaddrinfo / 리터럴 주소 확인), DNS 서버 문자열 구성 및 eswifi Wi-Fi 보조 프로세서 DNS 응답 경로에서 도달하므로 네트워크에 영향을 받는 주소 문자열을 확인하는 애플리케이션이 노출됩니다. 이 버그는 파서가 추가되고(Zephyr v1.9.0) v4.4.0을 통한 모든 릴리스에 제공될 때 도입되었습니다. 수정 사항은 제한되지 않은 복사본을 제거하고 작은 전용 버퍼에 복사하기 전에 포트 길이의 유효성을 검사합니다. 참고:parse_ipv6()의 동등한 IPv6 "[addr]:port" 경로는 이 커밋에서 동일한 제한되지 않은 복사본을 유지하고 별도의 여전히 도달 가능한 결함 인스턴스로 유지됩니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 81.00 |
| 악용 신호(PoC 존재) | ×1.20 |
| VPI | 97.20 |
VPI 공식 vpi-v1 기준