Критическая уязвимость в ядре Linux, позволяющая любому локальному пользователю стать пользователем root и затрагивающая львиную долю основных дистрибутивов, звучит как кошмар. И всё же это правда, которая происходит на наших глазах. Давайте подробнее рассмотрим CVE-2022-0847, также известную как Dirty Pipes.
Несмотря на то, что сообщество разработчиков Linux находится в авангарде исправления последующих уязвимостей, трудно предположить, что когда-нибудь Linux станет на сто процентов безопасной системой.
Это не было бы особой проблемой, если бы это был нишевый редактор кода. Перспективы меняются из-за масштаба – Linux сегодня везде, от Raspberry Pi до гигантских облачных сервисов крупнейших провайдеров. Если в Linux есть крупная дыра, проблема будет у всего мира.
«Грязная труба»
Что ещё хуже, эксплойт находится в открытом доступе. Первый вариант PoC был опубликован Максом Келлерманом и предполагал, что неавторизованные локальные пользователи могут внедрять свои данные в наиболее конфиденциальную файловую систему только для чтения, полностью обходя ограничения и свободно повышая разрешения до root.
На практике дело кроется в файлах GZ. В Linux можно связать все журналы, хранящиеся в этом формате, в обход механизмов безопасности, используемых в процессоре. Ссылка создается с помощью API Synced Flush, который злоумышленник использует для перезаписи последнего свободного блока и, таким образом, внедрения данных.
Таким образом злоумышленник может изменить ключевой файл для конфигурации экземпляра – /etc/passwd. Достаточно, чтобы после предыдущих шагов вы поставили флаг «x» за блоком конфигурации root, чтобы сбросить его пароль. Затем просто введите команду su root, и система даже не будет запрашивать пароль.
Dirty Pipes – как защититься?
Радует то, что уязвимость уже пропатчена в ядрах из веток 5.16.11, 5.11.25 и 5.10.102, но не стоит слишком оптимистично – не так уж и очевидно, что в повседневной практике мы сталкиваемся с серверами со столь свежими Линукс.
Решение проблемы, конечно, в обновлении ядра. Но было бы наивно говорить, что глобально это можно сделать за несколько недель.