CVE-2026-102720 in NetX Duo
요약
\~에 의해 VulDB • 2026. 09. 29.
DHCP 서버 또는 DISCOVER에 가장 먼저 응답하는 LAN 상의 모든 사용자는 수신된 메시지 끝에서 약 1킬로바이트 이후를 읽도록 클라이언트를 조작할 수 있습니다.
옵션 순회 로직은 단계(step) 내에서 포인터와 오프셋을 유지하며, 유일한 경계 검사(bound check)는 오프셋에 대해 수행됩니다:
```c /* addons/dhcp/nxd_dcp_client.c:7538, 7572 */ while (i < length - 1) {
... size = *(++data); /* data moves 1: type -> length byte */ data += size + 1; /* data moves size + 1 more */ i += size + 1; /* i moves only size + 1 */
} ```
TLV 옵션은 총 `size + 2` 바이트를 차지합니다. `data`는 전체적으로 `size + 2`만큼 전진하는 반면, `i`는 `size + 1`만큼만 이동하므로, 순회가 건너뛰는 각 옵션마다 오프셋(`i`)은 실제 읽기 위치보다 1바이트 뒤처지게 됩니다. 충분히 많은 옵션이 건너뛰어진 후에도 검사 조건 `i < length - 1`은 여전히 참으로 유지되지만, `data`는 이미 메시지 끝을 넘어선 상태가 되며, 이로 인해 이어지는 타입 및 길이 바이트의 읽기 작업은 그 뒤에 있는 임의의 데이터를 참조하게 됩니다.
길게 연속된 건너뛸 수 있는 옵션들을 포함하는 단일 OFFER 메시지로도 충분합니다:
``` ERROR: AddressSanitizer: heap-buffer-overflow READ of size 1 at 0x61b000000794 thread T5 #0 _nx_dhcp_search_buffer addons/dhcp/nxd_dhcp_client.c:7541 #1 _nx_dhcp_get_option_value addons/dhcp/nxd_dhcp_client.c:7082
0x61b000000794 is located 164 bytes to the right of 1648-byte region ```
동일한 경로를 통해 전달된 정형화된(well-formed) OFFER는 정상적으로 처리되며, 클라이언트는 해당 오퍼를 기록하고 REQUESTING 상태로 이동합니다. 따라서 차이는 하네스(harness)가 아닌 옵션 레이아웃에 기인합니다.
이 읽기 작업은 DHCP 클라이언트 스레드에서 실행되며, 클라이언트가 아직 구성되지 않은(unconfigured) 상태에서 발생하므로 적대적인 DHCP 응답자(DHCP responder)의 접근 범위 내에서 부팅 시마다 발생합니다. 읽힌 값들은 인터페이스 설정에 사용되므로, 노출된 바이트들이 관찰 가능한 상태가 됩니다.
`i`를 `size + 2`만큼 전진시키거나, 두 번째 카운터를 유지하는 대신 경계를 `data`로부터 유도하십시오.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.