🔍 CVE-2026-102720

0.0
CVSS Score
UNKNOWN
2026-09-29
2026-09-29 19:17
✅ 완료

🇰🇷 한글 설명

DHCP 서버 또는 LAN 내의 공격자가 조작된 DHCP OFFER 패킷을 전송하여 클라이언트의 힙 버퍼 오버플로우를 유발할 수 있습니다. DHCP 옵션을 처리하는 과정에서 인덱스 계산 오류로 인해 메시지 경계를 초과하여 읽게 되며, 이는 메모리 정보 유출로 이어질 수 있습니다.

💡 쉬운 설명

네트워크 연결을 도와주는 DHCP 서버가 가짜 정보를 보내면, 컴퓨터가 정보를 읽다가 허용된 범위를 넘어서 메모리를 읽게 되는 문제입니다. 이 과정에서 컴퓨터 내부의 중요한 정보가 외부로 새 나갈 위험이 있습니다.

🇺🇸 원문 (English)

A DHCP server, or anyone on the LAN who answers a DISCOVER first, can make the client read about a kilobyte past the end of the received message. The option walk keeps a pointer and an offset in step, and the only bound check uses the offset: ```c /* addons/dhcp/nxd_dhcp_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 */ } ``` A TLV option occupies size + 2 bytes. `data` is advanced by size + 2 in total, `i` by size + 1, so the offset falls one byte behind the real read position for every option the walk skips. After enough skipped options the check `i < length - 1` still holds while `data` is already past the end of the message, and the subsequent read of the type and length bytes comes from whatever follows. A single OFFER carrying a long run of skippable options is enough: ``` 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 ``` A well formed OFFER through the same path is handled normally, the client records the offer and moves to REQUESTING, so the difference is the option layout rather than the harness. The read runs in the DHCP client thread while the client is still unconfigured, so it happens on every boot in reach of a hostile DHCP responder. The values read are used to configure the interface, which is how the disclosed bytes become observable. Advance `i` by size + 2, or derive the bound from `data` rather than keeping a second counter.

📍 영향받는 시스템

nxd_dhcp_client.c를 사용하는 DHCP 클라이언트 라이브러리 (NetX Duo 등)

⚔️ 공격 벡터

LAN 환경에서 조작된 DHCP OFFER 패킷을 전송하여 클라이언트의 메모리 경계를 초과 읽기 유도

🛡️ 대응 방법

옵션 처리 시 인덱스(i)를 실제 데이터 이동량(size + 2)과 일치하도록 수정하거나 데이터 포인터를 기준으로 경계 검사 수행

🔧 검증 코드

해당 소스 파일이 존재하는지 확인하고, 소스 코드 내의 옵션 처리 루프(i += size + 1 부분)가 취약한 로직인지 검토합니다.

Shell / Script
find / -name "nxd_dhcp_client.c" 2>/dev/null

💻 영향받는 소프트웨어

Windows DHCP Server