Security Week 32: уязвимость в GRUB2
29 июля компания Eclypsium опубликовала исследование новой уязвимости в загрузчике Grub2, массово используемом в системах на базе Linux — от ноутбуков и IoT-устройств до серверов. Суть уязвимости довольно простая: ошибки при обработке текстового конфигурационного файла grub.cfg приводят к переполнению буфера и открывают возможность выполнения произвольного кода. Последствия тоже понятные: взлом системы на ранней стадии загрузки обеспечивает полный контроль над ней, затрудняет обнаружение проблемы. Уязвимости был присвоен идентификатор CVE-2020–10713. Это не единственная уязвимость, закрытая в Grub2 за последнее время: после уведомления мейнтейнеров популярных дистрибутивов в коде загрузчика было исправлено еще как минимум 7 похожих проблем с рейтингом опасности по CVSS от 5,7 до 6,4. Оригинальная уязвимость по тому же методу оценки получила 8,2 балла.
Для эксплуатации уязвимости атакующему требуется получить высокий уровень доступа к системе. Настолько высокий, что в большинстве сценариев дополнительно взламывать Grub2 вроде бы и не обязательно. Варианты, когда это действительно приносит пользу злоумышленнику, еще предстоит исследовать. Основная проблема данной уязвимости заключается в сложных взаимоотношениях между Grub2 и UEFI Secure Boot — универсальным инструментом инициализации железа, помимо прочего гарантирующим, что на следующих этапах будет запущен только проверенный код с цифровой подписью. Из-за особенностей лицензии, под которой распространяется Grub2, между UEFI и Grub2 «вставлен» посредник, известный как shim — небольшой загрузчик, проверяющий версию Grub2. Перевыпуск этих самых shim, а заодно обновление UEFI огромного числа систем, блокирующее старые shim, — это, если выражаться простыми словами, Гигантская Головная Боль всей индустрии.
Технические особенности уязвимости достаточно подробно (но без примеров эксплуатации) расписаны в отчете Eclypsium. В коде Grub2, отвечающем за парсинг текстового конфигурационного файла, предусмотрена обработка ситуации, когда входящая строка слишком длинная. Ошибка в коде может привести к тому, что данные все же будут загружены, и произойдет переполнение буфера. В данном случае важнее не уязвимость, а ее последствия. Ранее уже происходили ситуации, когда незащищенную версию Grub (из-за ошибки конфигурации) приходилось добавлять в так называемый UEFI Revocation List — список shim, которые обновленная система откажется запускать. Этот список нужно как-то доставить на конкретную систему, что может сделать либо поставщик железа, либо разработчик операционной системы, например компания Microsoft, помимо прочего отвечающая за сертификацию загрузочного кода, в том числе и для Linux-систем. Любая ошибка в апдейте, применяемом на ранней стадии, может сделать компьютер или сервер полностью неработоспособным.
Иными словами, обновления Grub, закрывающего свежеобнаруженные уязвимости, недостаточно для решения проблемы. Требуется запретить выполнение старых версий Grub2 путем добавления связанных с ними shim в UEFI Revocation List. По данным Eclypsium, более 80 промежуточных загрузчиков потребуется заблокировать, и вот это уже исключит возможность запуска произвольного кода, если обновление так или иначе доберется до конкретной материнской платы с конкретной версией UEFI. И кстати, так как уязвимость была найдена в универсальном, не зависящем от платформы коде, устройства на архитектуре arm64 также подвержены.
Кроме того, понадобится обновить системы экстренного восстановления компьютеров или серверов, иначе в будущем может сложиться ситуация, когда инструмент восстановления не сработает. Потребуется протестировать и патчи для Grub, и новые промежуточные загрузчики, и обновления Revocation List. Уже сейчас даже простое обновление Grub2 вызывает проблемы: см. отчет на Хабре о неработоспособности серверов под управлением CentOS после установки багфикса RHSA-2020:3216, закрывающего данную уязвимость. Решаться проблема будет долго, и именно поэтому код Grub2 был проверен на наличие похожих уязвимостей, чтобы не пришлось проходить этот процесс несколько раз. С одной стороны, реальной опасности данная уязвимость прямо сейчас не несет. С другой — она включает сложный механизм взаимодействия разработчиков софта и железа, который в данном случае неизбежен. Хорошее подтверждение расхожей фразы о том, что безопасность — это процесс, а не результат.
Что еще произошло:
Компания Garmin устраняет последствия атаки на собственную инфраструктуру, подробно описанной в предыдущем дайджесте. По состоянию на 3 августа полностью восстановлены сервисы Garmin Aviation, включая FlyGarmin. Функциональность облачного сервиса Garmin Connect для умных часов компании восстановлена частично. Сайт Bleeping Computer, снова со ссылкой на анонимные источники, сообщает о том, что ключ для расшифровки данных, пострадавших от трояна-вымогателя, компания получила. Как именно — непонятно, но возможных вариантов здесь немного. Эксперты «Лаборатории Касперского» опубликовали подробный разбор сэмпла WastedLocker, который (скорее всего) атаковал Garmin.
Еще одна крупная атака с вымогательством произошла в компании CWT, занятой организацией командировок. Злоумышленники требуют выкуп в размере 4,5 миллиона долларов.
В США арестованы подозреваемые во взломе десятков аккаунтов Twitter в середине июля. Так быстро идентифицировать взломщиков удалось благодаря их беспечности. Например, один почтовый адрес использовался на хакерском форуме и на бирже криптовалют, а взлом форума позволил сопоставить учетную запись с реальным IP. Подробнее — в публикации ZDNet и на Хабре.
Уязвимость в VoIP-адаптерах Grandstream позволяет взломать их на стадии первоначальной настройки, в том числе с использованием подготовленного SIP-пакета.
В Zoom закрыли «детскую» уязвимость, позволявшую взламывать пароли для доступа к телеконференции. Пароли в Zoom используются шестизначные, а число попыток ввода никак не ограничено — можно было взломать грубой силой, зная только идентификатор встречи (как правило, постоянный).
Найдена свежая десятибалльная уязвимость в плагине wpDiscuz для обработки комментариев на сайтах под управлением Wordpress с возможностью выполнения произвольного кода. Подвержены 70 тысяч сайтов.