Обнаружена опаснейшая уязвимость в Windows DNS Server
Исследователи в области кибербезопасности из компании Check Point раскрыли новую критическую уязвимость, которая затрагивает версии Windows Server 2003–2019 с оценкой критичности 10 из 10 по шкале CVSS.
17-летний программный недостаток приводит к удаленному выполнению кода (CVE-2020–1350), названному Check Point «SigRed» и может позволить удаленному злоумышленнику, не прошедшему проверку подлинности, получить права администратора домена над целевыми серверами и получить полный контроль над ИТ-инфраструктурой организации.
Атакующий может использовать уязвимость SigRed, отправляя специально созданные вредоносные DNS-запросы на DNS-сервер Windows и выполнять произвольный код, позволяя хакеру перехватывать и обрабатывать электронные письма пользователей и сетевой трафик, собирать учетные данные пользователей и многое другое.
В отчете, опубликованном в блоге компании, исследователь Check Point Саги Цадик подтвердил, что этот недостаток имеет ужасный характер, позволяя атакующим начать атаку, которая может распространиться с одного уязвимого компьютера на другой без какого-либо вмешательства человека. Т.е. уязвимость носит явный «wormable»-характер.
После того, как Check Point ответственно сообщила о своих выводах Microsoft, производитель Windows подготовил исправление для этой уязвимости и выпустил его, начиная с сегодняшнего дня, в рамках своего июльского исправления во вторник, которое также включает в себя обновления безопасности для 122 других уязвимостей.
В Microsoft заявили, что не нашли никаких доказательств того, что эта ошибка активно использовалась злоумышленниками, и посоветовали пользователям немедленно устанавливать исправления.
«Windows DNS Server — это основной сетевой компонент. Хотя в настоящее время неизвестно, чтобы эта уязвимость использовалась в активных атаках, важно, чтобы клиенты применяли обновления Windows для ее устранения как можно скорее».
Детали
Переадресованный запрос происходит, когда DNS-сервер не может разрешить IP-адрес для данного доменного имени (например, www.google.com), в результате чего запрос перенаправляется на официальный DNS-сервер имен (NS).
Чтобы использовать эту архитектуру, SigRed включает в себя настройку записей ресурсов NS домена («deadbeef.fun») для указания на вредоносный сервер имен («ns1.41414141.club») и запрос целевого DNS-сервера для домена, чтобы последний анализировал ответы от сервера имен для всех последующих запросов, связанных с доменом или его поддоменами.
Таким образом злоумышленник может вызвать ошибку целочисленного переполнения в функции, которая анализирует входящие ответы для перенаправленных запросов («dns.exe! SigWireRead»), чтобы отправить ответ DNS, содержащий запись ресурса SIG размером более 64 КБ, и вызвать контролируемое переполнение кучи примерно исходя из небольшого выделенного буфера.
Ошибка выявлена в функции, ответственной за выделение памяти для записи ресурса («RR_AllocateEx»), чтобы генерировать результат размером более 65 535 байт, что вызывает переполнение целых чисел, которое приводит к гораздо меньшему выделению, чем ожидалось.
Но с одним сообщением DNS, ограниченным 512 байтами в UDP (или 4096 байтами, если сервер поддерживает механизмы расширения) и 65 535 байтами в TCP, исследователи обнаружили, что ответа SIG с одной только длинной сигнатурой было недостаточно, чтобы вызвать уязвимость.
Чтобы достичь этого, атака использует преимущества сжатия DNS-имен в ответах DNS, чтобы создать переполнение буфера с использованием вышеупомянутого метода для значительного увеличения размера выделения.
SigRed может быть запущен удаленно через браузер в ограниченных сценариях (например, Internet Explorer и браузеры Microsoft Edge не на основе Chromium), позволяя злоумышленнику злоупотреблять поддержкой DNS-серверов Windows в функциях повторного использования соединений и конвейерной обработки запросов, чтобы «переправить» DNS-запрос внутри полезной нагрузки HTTP-запроса к целевому DNS-серверу при посещении веб-сайта под их контролем.
DNS-клиенты («dnsapi.dll») не подвержены этой ошибке, что заставляет исследователей подозревать, что Microsoft управляет двумя совершенно разными базами кода для DNS-сервера и DNS-клиента и не синхронизирует исправления ошибок между ними.
Исправление
Учитывая серьезность уязвимости и высокие шансы на активную эксплуатацию, пользователям рекомендуется срочно обновить уязвимые DNS-серверы Windows для снижения риска.
В качестве временного обходного пути, максимальная длина сообщения DNS (через TCP) может быть установлена в значение »0xFF00», чтобы исключить вероятность переполнения буфера:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters” /v "TcpReceivePacketSize” /t REG_DWORD /d 0xFF00 /f net stop DNS && net start DNS