Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
dnsmasq-cve-2026 — Автоматизированный инструмент проверки уязвимостей для 6 CVE dnsmasq (CVE-2026-2291, 4890, 4891, 4892, 4893, 5172) | Kitploit
Инструменты/GitHubGitHub/jianrongxiao-linksys/dnsmasq-cve-2026
Анализ уязвимостейЭксплуатацияФаззингСетевая безопасностьТестирование на ПроникновениеАнализ Бинарных ФайловАнализ DNS
GitHubjianrongxiao-linksys/dnsmasq-cve-2026

dnsmasq-cve-2026

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Автоматизированный инструмент проверки уязвимостей для 6 CVE dnsmasq (CVE-2026-2291, 4890, 4891, 4892, 4893, 5172)

Репозиторий
2 месяцев назадЕщё не проверено

Инструмент верификации CVE-2026 для dnsmasq

Автоматизированный инструмент «чёрного ящика» для проверки 6 уязвимостей dnsmasq (май 2026 г.). Отправляет атакующие пакеты на работающее устройство (DUT) и сообщает PASS/FAIL — доступ к исходному коду не требуется.

Быстрый старт

root@kitploit:~
# Установите DNS DUT на WAN-IP вашего ноутбука через GUI, затем:
sudo python3 dnsmasq_cve_verify.py --laptop <ВАШ_WAN_IP> --dut <LAN_IP_DUT> --dut-pass <SSH_ПАРОЛЬ>

# Пример:
sudo python3 dnsmasq_cve_verify.py --laptop 10.0.0.211 --dut 192.168.1.1 --dut-pass '12345Asdf@'

Проверяемые CVE

CVECVSSТипВектор атакиЗатрагиваемая функция
CVE-2026-22919.2Переполнение буфера кучиУдалённыйextract_name() — всегда активна
CVE-2026-51727.5Чтение за границами (OOB) / сбойУдалённыйextract_addresses() — всегда активна
CVE-2026-48907.5DoS через бесконечный циклУдалённыйРазбор битовой карты NSEC (--dnssec)
CVE-2026-48915.3Чтение за границами кучи (OOB)УдалённыйПроверка RRSIG (--dnssec)
CVE-2026-48928.4Переполнение кучи → rootЛокальный/СоседнийCLID DHCPv6 (--dhcp-script + DHCPv6)
CVE-2026-48935.3Обход проверкиУдалённыйПроверка источника ECS (--add-subnet)

Как работает каждый тест

CVE-2026-2291 (Критическая — Переполнение кучи в extract_name)

Корневая причина: union bigname объявляет char name[MAXDNAME], но управляющие символы могут расширить имя до 2*MAXDNAME+1 байт, вызывая переполнение кучи.

Метод тестирования: Отправляет DNS-запросы с доменными именами, содержащими символы с высоким битом (0x80+), которые внутренне преобразуются в \DDD (4 байта на байт ввода). Если dnsmasq аварийно завершается или перестаёт отвечать, он уязвим.

Исправленное поведение: Отвергает имена с превышением размера корректно (FORMERR/REFUSED) или использует увеличенный буфер.

CVE-2026-5172 (Высокая — Чтение за границами в extract_addresses)

Корневая причина: Поддельное поле rdlen позволяет extract_name() продвинуть указатель за конец записи. Отрицательное значение оставшихся байтов даёт огромное значение → массовое чтение OOB → сбой.

Метод тестирования: Отправляет DNS-ответы с записями CNAME, где rdlen меньше, чем фактическая закодированное имя. Если dnsmasq аварийно завершается — уязвим.

Исправленное поведение: Проверяет, что указатель остаётся в пределах объявленной границы rdlen после extract_name().

CVE-2026-4890 (Высокая — DNSSEC NSEC бесконечный цикл)

Корневая причина: Разбор битовой карты NSEC продвигает указатель на p[1] вместо p[1]+2 (пропущен размер заголовка окна). При bitmap_length=0 указатель никогда не двигается → бесконечный цикл.

Метод тестирования: Отправляет сфабрикованную запись NSEC с window=0, bitmap_length=0. Если dnsmasq перестаёт отвечать на ВСЕ запросы (зависает, не вылетает), он уязвим. Эксплуатируется ДО проверки RRSIG.

Исправленное поведение: Продвигает указатель на p[1]+2 и пропускает битовые карты нулевой длины.

CVE-2026-4891 (Умеренная — Чтение за границами кучи в RRSIG)

Корневая причина: rdlen в RRSIG не проверяется на минимальный размер (18 + имя подписывающего). Вычисленная длина подписи становится отрицательной → трактуется как огромная → чтение OOB.

Метод тестирования: Отправляет записи RRSIG с rdlen=10 (значительно ниже минимума в 31+ байт). Сбой = уязвим.

Исправленное поведение: Проверяет rdlen >= fixed_fields + signer_name_length перед вычислением длины подписи.

CVE-2026-4892 (Высокая — Локальный root через CLID DHCPv6)

Корневая причина: CLID DHCPv6 (до 65535 байт) кодируется в hex через sprintf("%.2x") в daemon->packet (5131 байт). CLID размером 3000 байт → hex-строка 6000 байт → переполнение. Вспомогательный процесс работает от root.

Метод тестирования: Отправляет DHCPv6 SOLICIT с Client Identifier размером 3000 байт. Требуется IPv6-соседство и настроенный --dhcp-script. Сбой вспомогательного процесса = уязвим.

Исправленное поведение: Усекает или проверяет длину CLID перед hex-кодированием.

Примечание: Некоторые сборки скомпилированы с -DNO_DHCP6 и НЕ подвержены этой CVE.

CVE-2026-4893 (Умеренная — Обход проверки источника ECS)

Корневая причина: process_reply() передаёт длину OPT-записи (~23 байта) вместо полной длины пакета в check_source(). Все проверки границ не срабатывают → функция всегда возвращает 1 (допустимо).

Метод тестирования: Отправляет DNS-запросы с опцией EDNS Client Subnet, содержащей поддельные префиксы источника. Если dnsmasq эхом возвращает ECS без проверки, он уязвим.

Исправленное поведение: Передаёт полную длину пакета в check_source(), что позволяет проводить корректные проверки границ согласно RFC 7871, раздел 9.2.

Устранение

Обновление до dnsmasq 2.92rel2 (рекомендуется)

  • Исходники: https://thekelleys.org.uk/dnsmasq/dnsmasq-2.92rel2.tar.xz
  • Патчи от разработчиков: https://thekelleys.org.uk/dnsmasq/CVE/

Инструмент автоматической верификации дефектов (dnsmasq_cve_verify.py)

Основной инструмент контроля качества. Запускается на тестовом ноутбуке, отправляет атакующие пакеты на DUT и выдаёт чёткий результат PASS/FAIL для каждой CVE. Не требует модификации DUT, кроме SSH-доступа только для чтения для проверки состояния.

Сетевая топология

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│                        Testing Laptop                                │
│                                                                      │
│   LAN interface                   WAN interface                      │
│   <LAPTOP_LAN_IP>                 <LAPTOP_WAN_IP>                   │
│        │                               │                            │
│        │                          ┌────┴──────────────┐             │
│        │                          │ Malicious DNS     │             │
│        │                          │ Server (port 53)  │             │
│        │                          └────┬──────────────┘             │
│        │                               │                            │
└────────┼───────────────────────────────┼────────────────────────────┘
         │ LAN subnet                    │ WAN subnet
         │                               │
┌────────┼───────────────────────────────┼────────────────────────────┐
│        │                               │                            │
│   LAN: <DUT_LAN_IP>              WAN: <DUT_WAN_IP>                  │
│   (LAN gateway)                   (WAN uplink)                      │
│                                                                      │
│              DUT (Linksys Router)                                    │
│              dnsmasq (any version < 2.92rel2)                        │
│                                                                      │
│   resolv-file=/etc/resolv.conf                                      │
│   → nameserver <LAPTOP_WAN_IP>  ← set via GUI, forwards to us      │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

Data flow:
  1. Tool sends DNS query to DUT LAN IP (port 53)
  2. DUT's dnsmasq can't resolve locally → forwards upstream to LAPTOP_WAN_IP
  3. Our malicious server on WAN interface replies with exploit payload
  4. DUT's dnsmasq processes the malicious response → crash/hang/survive
  5. Tool checks DUT state via SSH (read-only)

Пример настройки (ваши IP будут отличаться):

РольIP (пример)
LAN ноутбука192.168.1.254
WAN ноутбука10.0.0.211
LAN DUT192.168.1.1
WAN DUT10.0.0.214

Ключевое требование: WAN-IP ноутбука и WAN-IP DUT должны быть в одной подсети, чтобы DUT мог обращаться к ноутбуку как к вышестоящему DNS-серверу.

Как это работает

root@kitploit:~
┌──────────┐     ┌───────────┐     ┌──────────────────┐     ┌──────────┐
│  SETUP   │ ──► │  TRIGGER  │ ──► │  STATE INSPECT   │ ──► │  VERDICT │
│          │     │           │     │                  │     │          │
│ Start    │     │ Send DNS  │     │ SSH to DUT:      │     │ PASS:    │
│ malicious│     │ query to  │     │ - pidof dnsmasq  │     │ survived │
│ DNS srv  │     │ DUT→DUT   │     │ - PID changed?   │     │          │
│ on WAN   │     │ forwards  │     │ - dmesg crash?   │     │ FAIL:    │
│ interface│     │ to us→we  │     │ - /var/log/msg   │     │ crashed/ │
│ (10.0.0. │     │ reply w/  │     │                  │     │ hung     │
│  211:53) │     │ exploit   │     │ Liveness query   │     │          │
│          │     │ payload   │     │ (version.bind)   │     │          │
└──────────┘     └───────────┘     └──────────────────┘     └──────────┘

ПРИМЕЧАНИЕ: Инструмент НЕ изменяет настройки DUT. Пользователь должен установить DNS на 10.0.0.211 через GUI.

Процедура QA-тестирования

Предварительные требования

  • Тестовый ноутбук с двумя сетевыми интерфейсами (LAN + WAN)
  • Python 3.6+ с установленным paramiko (pip install paramiko)
  • SSH-доступ к DUT (учётные данные root)
  • Доступ к административной панели DUT

Шаг 1: Физическое подключение

Подключите тестовый ноутбук к DUT двумя кабелями:

Порт ноутбукаПодключение кНазначение
Порт LANПорт LAN DUTSSH-доступ + отправка DNS-запросов на DUT
Порт WANПодсеть WAN DUT (например, порт вышестоящего коммутатора/модема)Выступать в роли вышестоящего DNS-сервера

После подключения запишите IP-адреса вашего ноутбука:

root@kitploit:~
# Найдите свои IP
ip addr show | grep "inet "
# Пример вывода:
#   inet 192.168.1.254/24 ...  ← это ваш LAN IP
#   inet 10.0.0.211/24 ...     ← это ваш WAN IP (используйте его для --laptop)

Шаг 2: Установите DNS DUT на ноутбук через GUI

  1. Откройте браузер и перейдите на страницу администрирования DUT:
    • например, http://192.168.1.1 или http://myrouter.local
  2. Войдите с правами администратора
  3. Перейдите в: Подключение → Настройки Интернета → Изменить (рядом с IPv4)
  4. В разделе DNS: выберите Статический DNS
  5. Установите DNS 1 как WAN-IP вашего ноутбука (например, 10.0.0.211)
  6. Нажмите Применить
  7. Подождите 5-10 секунд, чтобы настройки вступили в силу

Шаг 3: Запустите инструмент

root@kitploit:~
cd /путь/к/dnsmasq-cve-2026/

# Запуск всех 6 тестов CVE:
sudo python3 dnsmasq_cve_verify.py --laptop <ВАШ_WAN_IP> --dut <LAN_IP_DUT> --dut-pass <SSH_ПАРОЛЬ>

# Пример:
sudo python3 dnsmasq_cve_verify.py --laptop 10.0.0.211 --dut 192.168.1.1 --dut-pass '12345Asdf@'

Инструмент:

  1. Подключается к DUT по SSH (только чтение)
  2. Запускает вредоносный DNS-сервер на WAN-IP ноутбука
  3. Проверяет, что DUT перенаправляет DNS-запросы на него
  4. Отправляет эксплойт-полезные нагрузки для каждой CVE
  5. Проверяет, не упал ли и не завис ли dnsmasq
  6. Выдаёт PASS/FAIL для каждой CVE

Шаг 4: Прочитайте результаты

  • PASS = DUT безопасен (функция не активна или атака не удалась)
  • FAIL = dnsmasq упал или завис (уязвим!)
  • ERROR = Не удалось подключиться или DUT не перенаправляет

Шаг 5: Восстановите DNS DUT

  1. Вернитесь в административную панель DUT
  2. Подключение → Настройки Интернета → Изменить
  3. В разделе DNS: выберите Автоматический (от провайдера) или удалите статическую запись
  4. Нажмите Применить

Устранение неполадок


Результаты тестов (2026-05-31)

Платформа dnsmasq 2.78 (ОБЩИЙ РЕЗУЛЬТАТ: PASS)

Платформа dnsmasq 2.90 (ОБЩИЙ РЕЗУЛЬТАТ: PASS)

Заключение

Все протестированные маршрутизаторы Linksys практически не эксплуатируемы для любой из 6 CVE в их производственных конфигурациях сборки. Опасные функции (DNSSEC, DHCPv6 через dnsmasq) либо не скомпилированы, либо не настроены. Патчи всё же рекомендуются как защита от будущих угроз.

Ожидаемые результаты

До исправления (dnsmasq 2.78, сборка без DNSSEC):

До исправления (dnsmasq 2.90 с включённым DNSSEC):

После исправления (dnsmasq 2.92rel2 или применённые патчи): Все 6 CVE → PASS

Требования

  • Python 3.6+ с paramiko (pip install paramiko)
  • root/sudo на ноутбуке (для привязки DNS на порту 53)
  • SSH-доступ к DUT (только чтение — используется для проверки состояния процессов)
  • Ноутбук, подключённый к LAN DUT (сеть 192.168.1.x)

Справочник параметров


Другие инструменты

Удалённый тестер «чёрного ящика» (test_dnsmasq_cve_remote.py)

Облегчённая проверка только версии — запрашивает version.bind, чтобы определить, ниже ли версия dnsmasq исправленной. Без SSH, настройки и эксплойт-полезных нагрузок.

root@kitploit:~
python3 test_dnsmasq_cve_remote.py 192.168.1.1

Скрипт на устройстве (test_dnsmasq_cve_on_device.sh)

Запускается напрямую на DUT через SSH/последовательный порт. Проверяет версию бинарного файла и параметры компиляции.

root@kitploit:~
scp test_dnsmasq_cve_on_device.sh [email protected]:/tmp/
ssh [email protected] "sh /tmp/test_dnsmasq_cve_on_device.sh"

Вредоносный DNS-сервер (malicious_dns_server.py)

Автономный сервер эксплойтов для ручного тестирования. Запустите его, укажите DUT вышестоящий DNS на этот хост, затем отправляйте запросы к crash-5172.evil.test, crash-2291.evil.test и т.д.

root@kitploit:~
sudo python3 malicious_dns_server.py --port 53
# Затем на DUT: настройте вышестоящий DNS → этот хост
# Затем отправьте: dig @192.168.1.1 crash-5172.evil.test

Проверка после исправления

После применения патчей и прошивки новой прошивки запустите повторно:

root@kitploit:~
sudo python3 dnsmasq_cve_verify.py --laptop <ВАШ_WAN_IP> --dut <LAN_IP_DUT> --dut-pass <SSH_ПАРОЛЬ>
# Ожидается: все 6 PASS

Сводка требований

Ссылки

  • ISPreview: https://www.ispreview.co.uk/index.php/2026/05/string-of-dnsmasq-vulnerabilities-threatens-uk-broadband-routers.html
  • Help Net Security: https://www.helpnetsecurity.com/2026/05/12/dnsmasq-vulnerabilities-cve/
  • Патчи разработчиков: https://thekelleys.org.uk/dnsmasq/CVE/
  • Список изменений dnsmasq: https://thekelleys.org.uk/dnsmasq/CHANGELOG
Скачать инструмент
ПроблемаРешение
«DUT не перенаправляет запросы на нас»Проверьте, что Шаг 2 выполнен корректно. Убедитесь, что WAN-IP ноутбука совпадает с введённым в GUI.
«Не удаётся подключиться к DUT»Проверьте учётные данные SSH. Попробуйте вручную: ssh [email protected]
«Не удаётся привязать порт 53»Запустите с sudo. Или используйте --dns-port 5353 (требует ручной настройки DUT).
«Версия: неизвестна»Возможно, dnsmasq не находится в стандартном пути. Инструмент всё равно тестирует корректно.
CVEРезультатПричина
CVE-2026-2291PASSDNSSEC не скомпилирован
CVE-2026-4890PASSDNSSEC не скомпилирован
CVE-2026-4891PASSDNSSEC не скомпилирован
CVE-2026-4892PASSdnsmasq не обслуживает DHCPv6 (используется отдельный DHCPv6-сервер)
CVE-2026-4893PASSТолько логическая ошибка — без сбоя
CVE-2026-5172PASSПережил эксплойт (код уязвимости отсутствует в версии 2.78)
CVEРезультатПричина
CVE-2026-2291PASSDNSSEC не скомпилирован
CVE-2026-4890PASSDNSSEC не скомпилирован
CVE-2026-4891PASSDNSSEC не скомпилирован
CVE-2026-4892PASSDHCPv6 не скомпилирован
CVE-2026-4893PASSТолько логическая ошибка — без сбоя
CVE-2026-5172PASSПережил варианты эксплойта
CVEРезультатПричина
CVE-2026-2291PASSDNSSEC не скомпилирован — не эксплуатируется
CVE-2026-4890PASSDNSSEC не скомпилирован — не эксплуатируется
CVE-2026-4891PASSDNSSEC не скомпилирован — не эксплуатируется
CVE-2026-4892PASS/FAILDHCPv6 скомпилирован + активирован dhcp-script
CVE-2026-4893PASSЛогическая ошибка — без сбоя (только по версии)
CVE-2026-5172PASSПуть blockdata_expand отсутствует в 2.78
CVEРезультатПричина
CVE-2026-2291FAILПереполнение кучи через управляющие символы
CVE-2026-4890FAILБесконечный цикл (зависание)
CVE-2026-4891FAILСбой при чтении OOB в RRSIG
CVE-2026-4892PASS/FAILЗависит от настройки DHCPv6 + скрипта
CVE-2026-4893PASSЛогическая ошибка — без сбоя
CVE-2026-5172FAILЧтение OOB через поддельный rdlen
ФлагПо умолчаниюОписание
--laptop(обязательно)WAN-IP ноутбука (привязывает вредоносный DNS-сервер сюда)
--dut192.168.1.1LAN-IP DUT (сюда отправляются SSH и DNS-запросы)
--dut-userrootИмя пользователя SSH на DUT
--dut-pass(запрашивается)Пароль SSH на DUT
--dns-port53Порт для вредоносного DNS-сервера
--cveвсе 6Конкретная CVE для тестирования (можно повторять)
ИнструментPythonrootSSHСеть
dnsmasq_cve_verify.py3.6+ paramikoДа (порт 53)Да (только чтение)LAN + WAN до DUT
test_dnsmasq_cve_remote.py3.6+ stdlibНетНетUDP 53 до DUT
test_dnsmasq_cve_on_device.shН/Д (shell)НетЗапуск на DUTН/Д
malicious_dns_server.py3.6+ stdlibДа (порт 53)НетDUT перенаправляет на нас