Разделы

Безопасность Стратегия безопасности Техника Открытое ПО

Очевидная ошибка программиста, которую никто не замечал 12 лет, позволяет кому угодно легко стать админом в ОС Linux, Solaris и BSD

Новая уязвимость в компоненте Polkit (pkexec) затрагивает стандартные конфигурации всех крупных дистрибутивов Linux. Брешь, которую разработчики не замечали более 12 лет, позволяет злоумышленнику запросто заполучить права администратора Linux-системы. Машины под управлением Solaris и некоторых BSD-систем также в опасности.

12-летняя уязвимость Polkit

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

Опасная брешь имеется в одном из компонентов Polkit (ранее – PolicyKit), инструментария для предоставления непривилегированным процессам возможности выполнения действий, требующих повышенных прав доступа. Этим компонентом является pkexec – утилита, позволяющая выполнить команду от имени другого пользователя, которым может быть и root (администратор). Ввиду специфической функциональности программы исполняемый файл pkexec принадлежит root и имеет установленный атрибут SUID, что позволяет любому пользователю системы свободно отправлять его на запуск.

По словам Бхарата Джоги (Bharat Jogi), специалиста ИБ-компании Qualys, наличие бреши удалось подтвердить в стандартных конфигурациях дистрибутивов Ubuntu, Debian, Fedora и CentOS. В блоге компании говорится, что другие популярные сборки Linux скорее всего тоже подвержены уязвимости. Не исследованы, но, вероятно, под угрозой находятся Solaris и BSD-системы за исключением OpenBSD.

Уязвимость в Polkit позволяет получить привилегированный доступ в большинстве дистрибутивов Linux

Примечательно, что ошибка присутствует в pkexec с самой ее первой версии, которая вышла в мае 2009 г. Таким образом, уязвимости уже более 12 лет. К счастью для администраторов Linux, ее удаленная эксплуатация невозможна – злоумышленнику необходимо иметь доступ к непривилегированной учетной записи в системе, на которую совершается атака, а вредоносную активность в некоторых случаях можно заметить при анализе логов.

Время принимать меры

Уязвимости присвоены идентификатор CVE-2021-4034 и имя PwnKit, опасность оценена в 7,8 балла из 10 возможных (высокий уровень).

Qualys обнаружила ее еще в ноябре 2021 г., но в соответствии с политикой ответственного раскрытия сперва уведомила о ней разработчиков Polkit и затронутых дистрибутивов. Таким образом, к моменту выхода публикации о бреши вендоры «больших» дистрибутивов успели выпустить патчи. Администраторы машин, работающих под управлением дистрибутивов, в которых проблема еще не была исправлена, могут в качестве временной меры вручную убрать атрибут SUID с pkexec.

Qualys не планирует публиковать эксплойт, однако, по словам представителей ИБ-компании, методика использования уязвимости настолько тривиальна, что различные версии эксплойтов начнут циркулировать в Сети в ближайшие несколько дней и без дополнительной помощи со стороны.

Некоторые технические подробности

Как объясняет Джоги, к возникновению уязвимости привели ошибки программистов, допущенные при написании функции main() утилиты pkexec.

Функция main() является точкой входа в программу. Среди ее аргументов – переменные argc и argv. При запуске программы операционная система помещает в argv перечень всех параметров командой строки, заданных пользователем, argc, в свою очередь, содержит информацию о количестве этих параметров.

В случае с pkexec в функции main() происходит разбор аргументов и производится поиск отправленной на выполнение пользователем программы в файловой системе. Если задан относительный путь (то есть упомянуто название программы без места ее расположения, например, nano вместо /usr/bin/nano), вызывается специальная функция, которая восстанавливает абсолютный путь при помощи анализа переменной окружения PATH, которая в Linux объясняет системе, где нужно искать те или иные исполняемые объекты. Затем осуществляется системный вызов execve() для выполнения программы, вопрос поиска местоположения которой был ранее решен.

Что следует учесть при выборе системы резервного копирования для сложной ИТ-инфраструктуры
Безопасность

Проблема заключается в том, что разработчики неправильно реализовали разбор аргументов функции main(). В результате, упрощенно говоря, даже если pkexec запускается без параметров, код все равно обращается к массиву argv, выполняя в конечном счете как чтение, так и запись за пределами выделенного ему участка памяти.

Важно, что в этой области памяти как раз находится массив envp, содержащий переменные окружения, в том числе PATH. Благодаря этому злоумышленник может при помощи нехитрых манипуляций с именами файлов подменить значение переменной окружения, к примеру, LD_PRELOAD, и заставить систему загрузить разделяемую библиотеку и выполнить ее код с полномочиями root.

В рабочем эксплойте, подготовленном Qualys, осуществляются подмена значения переменной GCONV_PATH, обычно содержащей путь к утилите iconv, которая служит для преобразования текста из одной кодировки в другую. Манипуляции с LD_PRELOAD и другими «небезопасными» переменными окружения на практике не проходят, поскольку динамический компоновщик ld.so устраивают их «зачистку» при запуске программ с атрибутом SUID еще до выполнения функции main().

Дмитрий Степанов



Будущее IT и цифровых коммуникаций обсудят на Толк Шоу Будущее IT и цифровых коммуникаций обсудят на Толк Шоу

erid: 2W5zFH93NQ8

Рекламодатель: Акционерное общество «Производственная фирма "СКБ Контур"

ИНН/ОГРН: 6663003127/1026605606620