В различни реализации на протокола DNSSEC са открити две уязвимости, засягащи DNS резолверите BIND, PowerDNS, dnsmasq, Knot Resolver и 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), Knot Resolver (5.7.1), 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 — специално оформените рекурсивни заявки могат да доведат до изчерпване на наличната памет на процеса.
Източник: opennet.ru
