Обработка ключей DNSSEC в Unbound приводит к переполнению буфера и удалённому выполнению кода

Unbound DNS resolver

NLnet Labs исправила девять уязвимостей в DNS-сервере Unbound. Одна из них позволяет выполнить произвольный код на чужой машине, остальные ведут к порче памяти и отказам в обслуживании. Затронуты операторы связи, крупные компании и все, кто держит собственный резолвер (программу, которая переводит доменные имена в сетевые адреса) с доступом из интернета.

Детали уязвимостей

Unbound - рекурсивный сервер с открытым кодом. Его используют провайдеры, государственные организации и публичные DNS-службы. Открытый резолвер принимает запросы от кого угодно, поэтому ошибки в разборе ответов здесь особенно опасны. Злоумышленнику не нужны ни учётные данные, ни доступ во внутреннюю сеть. Достаточно, чтобы жертва обратилась к домену, которым он управляет.

Самая тяжёлая из девяти - CVE-2026-81642. Она лежит в DNSSEC, наборе расширений, которые подтверждают подлинность DNS-ответов с помощью цифровых подписей. Проверяя подпись, Unbound считает хеш от открытого ключа домена. Если ключ составлен особым образом, а именно указатель на имя владельца ведёт внутрь самого ключа, буфер под хеш переполняется. Данные для этой операции приходят извне, поэтому в переполненную область попадает то, что подготовил атакующий. Так переполнение буфера перерастает в удалённое выполнение кода. Злоумышленнику нужно лишь держать собственную зону и добиться, чтобы сервер её запросил. Оценка по CVSS v4 - десять баллов из десяти, эксплуатировать уязвимость можно без привилегий и без участия пользователя.

Рядом стоит вторая проблема с переполнением - CVE-2026-81634. Она срабатывает в другой ветке DNSSEC, когда записи приводят к каноническому виду для расчёта подписи. Проверка длины не учитывала имя владельца записи. Запрос имени предельной длины и большой ответ по TCP выводят данные за границы выделенной памяти. Подтолкнуть к этому может и вредоносный сервер имён, и тот, кто по пути подменяет ответ. Существенно, что канонизация идёт до проверки подписи, поэтому испорченные данные обрабатываются раньше, чем DNSSEC отсеет их.

Третья уязвимость, CVE-2026-82717, связана с синтезом записей CNAME: сервер переписывает в пакете значение времени жизни. Указатель на сжатое имя после такой правки указывает на изменённые байты, а ветка обработки ошибки не переставляет позицию в буфере. Память портится шаг за шагом. Итог зависит от устройства кучи и параметров сборки. На части систем это заканчивается удалённым выполнением кода, на остальных - аварийным завершением процесса.

Ещё две уязвимости дают обращения к уже освобождённой памяти. Одна живёт в коде DNS-over-QUIC, вторая - в DNS-over-HTTPS. Оба протокола добавляют серверу новые транспорты, и оба затронуты только при сборке с соответствующими библиотеками. В первом случае клиент удерживает подтверждения, затем сбрасывает поток и ждёт тайм-аут, после чего сервер пересылает данные из освобождённого буфера. Во втором достаточно одного соединения и подходящего трафика, чтобы сорванный поток увлёк за собой всю сессию. Защитный механизм распределения памяти распознаёт такое обращение и завершает процесс.

Оставшиеся три уязвимости не дают захватить сервер, но мешают ему работать. Одна позволяет клиенту бесконечно слать по TCP новые имена и держать занятым весь обработчик. Другая описывает семейство приёмов против DNSSEC: атакующий заставляет резолвер проверять заведомо несогласованные ключи и подписи, тратя на это вычислительные ресурсы. Третья открывает окно, в котором проверка целостности зоны ещё не завершилась, а подделанное содержимое уже отдаётся клиентам и успевает попасть на диск. Среди них есть и та, что отменяет счётчик, добавленный после истории с DNSBomb в 2024 году: одна и та же последовательность запросов от одного адреса больше не упирается в ограничение, и число незавершённых запросов растёт бесконтрольно.

Нашли эти уязвимости несколько независимых групп. Основную часть сообщили исследователи из Нанкайского университета и лаборатории AOSP Lab, к ним добавились специалисты Marlink Cyber, Anthropic, Palo Alto Networks и Университета науки и технологий Китая. Проблемы копились не один месяц, поэтому выпуск собирает исправления за длительный период, а не закрывает одну свежую ошибку.

Исправления собраны в версии 1.26.1. Большинство проблем затрагивает сборки по 1.26.0 включительно, но описания отдельных уязвимостей указывают и на 1.26.1, поэтому надёжнее поставить последний выпуск. Обновиться стоит и тем, кто использует Unbound как форвардер внутри закрытого контура: сервер всё равно разбирает ответы внешних источников. Если обновление откладывается, закрывайте рекурсивный сервер от посторонних запросов. Открытый резолвер в интернете принимает запросы от всех, а значит, остаётся доступным для всех девяти уязвимостей сразу.

Практика последних лет показывает, куда смещается внимание исследователей. Резолверы выбирают целью не за заметный интерфейс, а за роль посредника между пользователем и внешним миром. Злоумышленник не ломает их напрямую, он подсовывает ответ на запрос, который сервер сам же и отправил. Именно так работают обе самые тяжёлые уязвимости в этом выпуске. Для оператора это означает простую вещь: доверия к сети недостаточно, а своевременная установка исправлений остаётся основным способом защиты.

Ссылки

Комментарии: 0