В Корее выявлены две атаки на веб-серверы под управлением IIS, где так и не установили обновление для компонента Telerik UI для ASP.NET AJAX. Обе кампании опирались на уязвимость CVE-2019-18935, о которой публично рассказали ещё в 2019 году. В первом случае злоумышленник получил полный контроль над сервером, установил скрытую программу управления и попробовал повысить свои права. Во втором он ограничился разведкой: запустил сканер и занялся поиском новых жертв. Тактика в этих инцидентах различалась, а результат оказался одинаковым - сервер перешёл под чужое управление. Одна и та же уязвимость годится и для захвата машины, и для подготовки следующей волны атак. Публично известная ошибка не перестаёт работать от того, что о ней написали много лет назад.
Описание
Telerik UI для ASP.NET AJAX - набор готовых интерфейсных элементов для веб-приложений на платформе Microsoft. Внутри есть модуль загрузки файлов, который принимает данные от пользователя и собирает из них объекты языка .NET. Ошибка в этом механизме позволяет подсунуть серверу специально подготовленный файл. В итоге чужой код исполняется прямо в процессе веб-сервера и с его правами. Подобные модули встречаются в корпоративных порталах, системах документооборота и личных кабинетах. Отдельный вход в систему злоумышленнику не нужен, поэтому смена пароля или двухфакторная аутентификация здесь не помогут. Закрывает вопрос только обновление самого компонента.
По данным AhnLab SEcurity intelligence Center, интерес к этой уязвимости не угасает уже несколько лет. В 2020 году компания Red Canary описала случай, когда группировка Blue Mockingbird применяла CVE-2019-18935 для запуска вредоносной библиотеки на сервере IIS, а затем использовала машину для скрытого майнинга криптовалюты Monero. Три года спустя Агентство по кибербезопасности и защите инфраструктуры США, ФБР и центр MS-ISAC сообщили о серии взломов в федеральных ведомствах. Там разные злоумышленники загружали вредоносные библиотеки и добивались удалённого исполнения кода на тех же серверах. Обе корейские кампании продолжают эту линию, только цели у них другие.
Первый инцидент развивался по схеме глубокого закрепления. Сразу после эксплуатации уязвимости атакующий запустил обратную оболочку: сервер сам подключается к внешнему узлу и ждёт команд. Через неё он собрал сведения о машине - имя узла, уровень прав, список работающих процессов. Дальше последовала попытка повысить привилегии. Для этого применялись инструменты семейства Potato, включая изменённую версию SweetPotato, подогнанную под работу внутри веб-оболочки. Такие утилиты подменяют служебные маркеры доступа и позволяют выполнять команды от имени системной учётной записи. Цель у злоумышленника была простая - закрепиться как можно глубже и не потерять доступ при перезагрузке сервера.
Финал первой атаки - веб-оболочка Godzilla, работающая целиком в памяти сервера. Отдельного файла на диске она не создаёт, поэтому поиск подозрительных страниц ничего не даёт. Вредоносная библиотека дожидается загрузки штатного интерфейсного модуля и подключается к его потоку. Затем она регистрирует собственный обработчик запросов и получает те же права, что и сам веб-сервер. Управление идёт через обычные обращения к сайту, внутри которых передаются зашифрованные команды и полезная нагрузка. Ответы возвращаются так же - в зашифрованном виде. Что именно станет следующим шагом, зависит от оператора: кража информации, установка дополнительных программ или расширение присутствия в сети.
Второй случай выглядит скромнее, но по последствиям он не менее неприятен. Оболочку здесь не строили, хватило одной команды - запустить сканер. Инструмент написан на языке Rust и обрабатывает много адресов одновременно. Список целей он получает с удалённого узла, а потом перебирает 53 типовых веб-адреса и ищет установки WordPress. Отдельно проверяются страницы первичной настройки и установки системы. Если такая страница открыта наружу, сервер попадает в отчёт. Результаты вместе с публичным адресом машины уходят в мессенджер Telegram отдельным файлом. Ни обратной оболочки, ни веб-оболочки в этом инциденте не нашли: полезная нагрузка содержала только команду запуска сканера. Проще говоря, один взломанный сервер стал источником сведений о новых целях.
Обе кампании показывают, что срок жизни уязвимости почти не зависит от даты её раскрытия. Пока в организациях остаются серверы без обновлений, старый публичный эксплойт сохраняет ценность. Тем более если речь о компоненте, который принимает файлы и потому доступен напрямую из интернета. Обновление в таких случаях откладывают месяцами, ведь компонент встроен в готовый продукт и требует проверки совместимости. Риски конкретны: простой сервисов, утечка клиентских данных, использование инфраструктуры компании для атак на третьи стороны. Репутационные потери обычно оказываются дороже технических.
Обновление Telerik UI до версии 2020.1.114 или более поздней закрывает вопрос с CVE-2019-18935. Ещё одна мера - просмотреть общедоступные папки пользователя на предмет посторонних файлов и проверить, не запускаются ли от имени веб-сервера командные оболочки. Страницы установки и настройки WordPress, открытые в интернет, лучше закрыть или ограничить по доступу. Эти шаги не выглядят сложными, но именно их отсутствие сделало обе корейские атаки возможными.