Спецпроекты

ПО Свободное ПО Безопасность Администратору Пользователю Стратегия безопасности

Microsoft нашла в Linux две «дыры», позволяющие захватывать систему

В демоне networkd-dispatcher содержатся два «бага», которые в комбинации могут позволить злоумышленникам запускать произвольный код в системе с правами root.

Время проверки, время использования

Эксперты Microsoft выявили две уязвимости в компоненте ОС Linux, которые в комбинации позволяют повышать привилегии в уязвимой системе. В случае успеха хакеры получают возможность устанавливать вредоносное ПО на уязвимой машине.

Уязвимости CVE-2022-29799 и CVE-2022-29800 содержатся в компоненте networkd-dispatcher, который отвечает за отправку изменений в статусе сетевого соединения на машинах под Linux.

В своей публикации эксперт Microsoft Джонатан Бар Ор (Jonathan Bar Or) отметил, что уязвимости вызваны ошибками обхода каталогов, гонки символических ссылок и проблемами состояния гонки TOCTOU («время проверки - время использования»).

linux600.jpg
Эксперты Microsoft выявили две уязвимости в компоненте ОС Linux, позволяющие повышать привилегии в уязвимой системе

Состояние гонки - это ошибка, допущенная при разработке и приводящая к нежелательному поведению программы в процессе её исполнения из-за временных задержек в работе. Как раз такое состояние возникает вследствие ошибки CVE-2022-29800: демон networkd-dipsatcher, в зависимости от состояния сети, запускает определённые скрипты из каталога /etc/networkd-dispatcher/.d с помощью процедуры _run_hooks_for_state и процесса subprocess.Popen.

Между моментом определения нужного скрипта и его запуском проходит некоторое время. У злоумышленников есть возможность воспользоваться этим для подмены скриптов - с тех, что легитимно наследуют права root, на посторонние.

В свою очередь уязвимость CVE-2022-29799 позволяет производить обход каталогов из-за некорректной обработки некоторых ключевых параметров, так что появляется возможность чтения и записи данных за пределами базового каталога.

Сверх этого процессы определения и запуска скриптов следуют за символическими ссылками.

В результате злоумышленник с низкими привилегиями в системе может использовать комбинацию этих уязвимостей и повысить свои права до уровня Root с помощью отправки «произвольного сигнала», т.е., по-видимому, специально сформированных пакетов данных.

Структура эксплуатации

Схема атаки выглядит примерно следующим образом.

Вначале подготавливается каталог /tmp/nimbuspwn и символическая ссылка /tmp/nimbuspwn/poc.d, которая указывает на каталог /sbin; этот каталог используется для прохождение проверки на наличие файлов, принадлежащих пользователю с правами root.

Затем для исполняемых файлов из /sbin создаются подменные «двойники» с идентичными именами в каталоге /tmp/nimbuspwn; естественно, у них совершенно другая «полезная нагрузка». Например, для файла /sbin/vgs создаётся исполняемый файл /tmp/nimbuspwn/vgs, относящийся к непривилегированному пользователю. В него помещается код, который злоумышленник хочет запустить.

Процессу networkd-dispatcher отправляется специальный сигнал с указанием в OperationalState значения ../../../tmp/nimbuspwn/poc для выхода из каталога.

Средства обработки сигнала networkd-dispatcher включается в процесс и формирует список скриптов - из каталога /etc/networkd-dispatcher/../../../tmp/nimbuspwn/poc.d, который в реальности является символической ссылкой (/tmp/nimbuspwn/poc.d), указывающей на /sbin. Подменив указатель ссылки с /sbin на /tmp/nimbuspwn, злоумышленник может вызвать состояние гонки уязвимости TOCTOU. При этом networkd-dispatcher считает, что путь к скриптам остался прежним.

Далее networkd-dispatcher начинает запускать файлы, изначально располагавшиеся в /sbin, но теперь в действительности размещённые в /tmp/nimbuspwn; поскольку демон этого не понимает, он запускает их с правами root.

«Таким образом с правами root запускается подменный код, который в другом контексте запущен быть не мог, - поясняет Дмитрий Кирюхин, эксперт по информационной безопасности компании SEQ. - Всё упирается в отсутствие нужных механизмов очистки вводимых данных, что и создаёт условия для возникновения уязвимости. Её эксплуатация, возможно, не самая простая задача, но конечный результат оправдывает усилия».

Исследователь также обнаружил несколько процессов, запускающихся от имени пользователя systemd-network и что этому процессу разрешено использовать имя шины, необходимое для запуска произвольного кода из доступных для записи мест (в частности, org.freedesktop.network1). Уязвимые процессы включают несколько подключаемых модулей gpgv, запускающихся при установке или обновлении apt-get, а также демон Erlang Port Mapper, позволяющий запускать произвольный код в некоторых скриптах.

Уязвимость в networkd-dispatcher была исправлена, однако неизвестно, когда и в какой версии. Пользователям Linux-систем настоятельно рекомендуется обновиться до последней версии.

Роман Георгиев

Короткая ссылка