В различных реализациях протокола DNSSEC выявлены две уязвимости, затрагивающие DNS-серверы BIND, PowerDNS, dnsmasq и Unbound. Уязвимости позволяют добиться отказа в обслуживании DNS-резолверов, выполняющих валидацию при помощи DNSSEC, через создание высокой нагрузки на CPU, мешающей обработке других запросов. Для совершения атаки достаточно отправить на DNS-резолвер, использующий DNSSEC, запрос, приводящий к обращению к специально оформленной DNS-зоне на сервере злоумышленника.
Выявленные проблемы:
- CVE-2023-50387 (кодовое имя KeyTrap) – при обращении к специально оформленным DNS-зонам приводит к отказу в обслуживании из-за создания значительной нагрузки на CPU и длительного выполнения проверки DNSSEC. Для совершения атаки необходимо разместить на подконтрольном атакующему DNS-сервере доменную зону с вредоносными настройками, а также добиться обращения этой зоне рекурсивного DNS-сервера, отказа в обслуживании которого добивается атакующий.
Вредоносные настройки сводятся к использованию для зоны комбинации из конфликтующих между собой ключей, записей RRSET и цифровых подписей. Попытка проверки с использованием данных ключей приводит к выполнению длительных ресурсоёмких операций, которые могут полностью нагружать CPU и блокировать обработку других запросов (например, утверждается, что при атаке на BIND удалось остановить обработку других запросов на 16 часов).
- CVE-2023-50868 (кодовое имя NSEC3) – отказ в обслуживании из-за выполнения значительных вычислений при вычислении хэшей в записях NSEC3 (Next Secure v3) при обработке специально оформленных ответов DNSSEC. Метод атаки напоминает первую уязвимость, за исключением того ,что на DNS-сервере злоумышленника создаётся специально оформленный набор записей NSEC3 RRSET.
Отмечается, что появление вышеупомянутых уязвимостей вызвано определением в спецификации DNSSEC возможности отправки DNS-сервером всех доступных криптографических ключей, при том, что резолверы должны использовать любые полученные ключи вплоть до успешного завершения проверки.
В качестве мер для блокирования уязвимостей в резолверах ограничено максимальное число ключей DNSSEC, задействованных в процессе построения цепочки доверия, и максимальное число вычислений хэшей для NSEC3, а также лимитированы повторные попытки проверки для каждого RRSET (комбинации ключей и подписей) и каждого ответа сервера.
Уязвимости устранены в обновлениях Unbound (1.19.1), PowerDNS Recursor (4.8.6, 4.9.3, 5.0.2), dnsmasq (2.90) и BIND (9.16.48, 9.18.24 и 9.19.21). Статус устранения уязвимостей в дистрибутивах можно оценить на данных страницах: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware, NetBSD, FreeBSD.
В версиях DNS-сервера BIND 9.16.48, 9.18.24 и 9.19.21 дополнительно устранено ещё несколько уязвимостей:
- CVE-2023-4408 – разбор больших DNS-сообщений может привести к созданию высокой нагрузки на CPU.
- CVE-2023-5517 – запрос специально оформленной обратной зоны может привести к аварийному завершению из-за срабатывания assert-проверки. Проблема проявляется только в конфигурациях с включённой настройкой “nxdomain-redirect”.
- CVE-2023-5679 – рекурсивное определение хоста может привести к аварийному завершению из-за срабатывания assert-проверки на системах с включённой поддержкой DNS64 и “serve-stale” (настройки, stale-cache-enable и stale-answer-enable) .
- CVE-2023-6516 – специально оформленный рекурсивные запросы могут привести к исчерпанию доступной процессу памяти.