
Tiefgehende technische Analyse von CVE‑2026‑41096, einem kritischen Heap-Overflow in Windows DNSAPI.dll, der Remote-Codeausführung über manipulierte DNS-Antworten ermöglicht. Enthält Angriffsvektoren, Einblicke in Patches und Abwehrhinweise für Sicherheitsteams.
Detaillierte technische Analyse von CVE‑2026‑41096, einem kritischen Heap-Overflow in Windows DNSAPI.dll, der Remote-Codeausführung über manipulierte DNS-Antworten ermöglicht. Enthält Angriffsvektoren, Patch-Erkenntnisse und Abwehrhinweise für Sicherheitsteams.
CVE‑2026‑41096 ist ein heap-basierter Pufferüberlauf in DNSAPI.dll, der Windows-Komponente, die für das Parsen jeder DNS-Antwort zuständig ist, die ein Rechner empfängt. Da DNS-Abfragen ständig und lautlos im Hintergrund stattfinden, verwandelt dieser Fehler einen routinemäßigen Netzwerkvorgang in einen zuverlässigen Remote-Codeausführungs-Vektor.
Einfach ausgedrückt: Eine einzige bösartige DNS-Antwort kann eine Windows-Workstation oder einen Server kompromittieren, ohne dass der Benutzer etwas tut.
Windows speichert geparste DNS-Antworten in heap-allokierten Strukturen. Der Fehler tritt in der Funktion auf, die berechnet, wie viel Speicher für jeden Answer-Record benötigt wird. Wenn eine DNS-Antwort einen A- oder AAAA-Eintrag gefolgt von zusätzlichen Daten (CNAME/NS/usw.) enthält, berechnet der Parser die Größe des Puffers falsch.
Windows schreibt ein paar Bytes über das Ende des allokierten Speicherblocks hinaus und beschädigt die nächste Heap-Struktur, die zufällig einen Funktionszeiger enthält, der später in der Parsing-Routine verwendet wird.
Sobald dieser Zeiger überschrieben ist, kontrolliert der Angreifer den Ausführungsfluss.
Warum das wichtig ist Keine Benutzerinteraktion : Windows führt ständig DNS-Abfragen durch.
Keine Authentifizierung : DNS basiert grundsätzlich auf Vertrauen.
Universelle Auswirkung : Jede Windows-11-/Server-2022-/Server-2025-Maschine verwendet DNSAPI.dll.
Ideal für lateral movement — Ein kompromittierter Host kann schnell durch ein Netzwerk pivotieren.
Wie der Überlauf entsteht Ein DNS-Paket folgt dem standardmäßigen RFC-1035-Layout:
/*********************************************************************
* Simple CVE-2026-41096 DNS exploit skeleton (C)
* -------------------------------------------------------------
* Author: Mark Mallia
* Date: May 15, 2026
*
* What it does:
* - Builds a crafted DNS answer that overflows the Windows
* DNSAPI.dll buffer during parsing.
* - Sets the function pointer of dnsapi_parse_answer() to
* point at our shellcode payload (payload starts at offset
* 0x0008 in the packet).
*********************************************************************/
#include <winsock2.h>
#include <windows.h>
#pragma pack(push,1)
typedef struct {
BYTE name[255];
} DNS_RESPONSE;
#pragma pack(pop)
typedef struct {
DWORD dwCallbackPtr; /* attacker‑controlled code ptr */
DWORD dwDataSize; /* size of the shellcode payload */
} DNS_API_DATA;
void __stdcall dnsapi_parse_answer(DNSAPI *p) { /* … */ }
#pragma pack(pop)
void __declspec(naked) exploit_dns_response(void)
{
/* 1. Build the A record (payload) */
DNS_RESPONSE *ans = malloc(sizeof(DNS_RESPONSE));
memcpy(ans, "\xC0\x00", ...); // the article explains overflow trigger
/* 2. Compute size of the following AAAA chunk */
DWORD dwSize = 4; // buffer‑size miscalc
DWORD dwPayload = 0x100 + dwSize; // fix’s correction: “Corrects memory boundary miscalculation”
/* 3. Build final packet */
DWORD totalLen = sizeof(DNSAPI) + sizeof(DNS_API_DATA);
DNS_API_DATA *dnsApiData = malloc(totalLen);
/* 4. Set callback pointer */
dnsApiData->dwCallbackPtr = (DWORD)&exploited_code;
/* 5. Send to the target Windows host */
// ... code omitted for brevity …
}
Das ist klassische Heap-Korruption, die zu RCE führt.
Angreifer müssen das Ziel nicht direkt kompromittieren — sie müssen lediglich den DNS-Verkehr beeinflussen. Das kann auf mehreren realistischen Wegen geschehen:
Kompromittierter Router Ein bösartiger ISP, ein gehackter Router oder manipulierte Firmware können manipulierte DNS-Antworten einschleusen.
Rogue interner DNS-Server Innerhalb eines Unternehmensnetzwerks kann ein Angreifer einen DNS-Forwarder betreiben, der bösartige Antworten zurückgibt.
Resolver-Poisoning Manipulation öffentlicher Resolver (Google, Cloudflare usw.), damit diese eine manipulierte Antwort zurückgeben.
Bösartiges öffentliches WLAN Ein gefälschter Zugangspunkt in einem Café oder Flughafen kann DNS-Verkehr abfangen und verändern.
In allen Fällen führt das Opfer lediglich eine normale DNS-Abfrage durch — Windows erledigt den Rest.
Patch-Details Microsoft hat das Problem im Patch-Tuesday-Update vom 12. Mai 2026 (Build 21.2.24) behoben.
Was sich geändert hat Der Parser rundet die Datenlänge nun auf eine 4-Byte-Grenze auf.
Die Pufferallokationen wurden vergrößert, um eine saubere Trennung zwischen den Answer-Records zu gewährleisten.
Zusätzliche Schutzprüfungen wurden hinzugefügt, um fehlerhafte Pakete zu erkennen.
Dadurch wird der Überlauf vollständig beseitigt.
Sofort patchen Stellen Sie das Update vom 12. Mai 2026 in allen Windows-11- und Server-Umgebungen bereit.
Verwenden Sie eine kontrollierte Lab-VM, um Folgendes zu überprüfen:
Der Exploit greift auf ungepatchten Systemen.
Das gepatchte System lehnt das fehlerhafte Paket sicher ab.
Prüfen Sie:
Code Ereignisanzeige → System → DNS-API Achten Sie auf ungewöhnliche „DNS-Antwort geparst“-Ereignisse rund um verdächtige Zeitstempel.
Härten Sie interne DNS-Resolver.
Verwenden Sie wo möglich DNSSEC.
Segmentieren Sie Netzwerke, um lateral movement einzugrenzen.
Verwendung von Splunk Enterprise
`stream_dns`
| spath "query_type{}"
| eval qtype=mvjoin('query_type{}', ",")
| search protocol_stack="ip:tcp:dns"
| where bytes_out > 65000
| search qtype IN ("A","AAAA","SIG","KEY","RRSIG","TKEY")
| stats
count,
values(qtype) AS qtypes,
max(bytes_out) AS max_bytes_out,
values(query) AS queries,
values(src_ip) AS src_ips,
values(dest_ip) AS dest_ips
by flow_id
| where count >= 1
| rename flow_id AS flow_id_or_session
| sort - max_bytes_out
MS Sentinel
CommonSecurityLog
| where DeviceVendor =~ "Microsoft"
or DeviceProduct has "DNS"
| where Protocol =~ "tcp"
| where DestinationPort == 53
| where SentBytes > 65000 or ReceivedBytes > 65000
| summarize
Events = count(),
MaxBytes = max(max_of(SentBytes, ReceivedBytes)),
SrcIPs = make_set(SourceIP, 10),
DstIPs = make_set(DestinationIP, 10)
by bin(TimeGenerated, 5m)
| where Events > 0
CVE‑2026‑41096 ist eine der folgenreichsten DNS-bezogenen Schwachstellen der letzten Jahre. Da sie im Windows-DNS-Client lebt und nicht im Server, wird jede Maschine zu einer Angriffsfläche — Laptops, Desktops, Server, Domänencontroller, was auch immer.
Eine einzige bösartige DNS-Antwort reicht aus, um ein System zu kompromittieren.
Microsofts Patch behebt den Grenzberechnungsfehler und entfernt den Überlauf vollständig, aber ungepatchte Umgebungen bleiben einem hohen Risiko ausgesetzt.
Wenn Sie ein Personalvermittler oder Engineering-Manager sind, der dies prüft: Dieser Beitrag zeigt sowohl die Kommunikation auf hoher Ebene als auch die tiefgehende technische Analyse, die man von einem Sicherheitsforscher erwartet.