Критическая уязвимость в PolKit, позволяющая получить root-доступ в большинстве дистрибутивов Linux
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Компания Qualys выявила уявзвимость (CVE-2021-4034) в системном компоненте Polkit (бывший PolicyKit), используемом в дистрибутивах для организации выполнения непривилегированными пользователями действий, требующих повышенных прав доступа. Уязвимость позволяет непривилегированному локальному пользователю повысить свои привилегии до пользователя root и получить полный контроль за системой. Проблема получила кодовое имя PwnKit и примечательная подготовкой рабочего эксплоита, работающего в конфигурации по умолчанию в большинстве дистрибутивов Linux.
Проблема присутствует во входящей в состав PolKit утилите pkexec, поставляемой с флагом SUID root и предназначенной для запуска команд с привилегиями другого пользователя в соответствии с заданными правилами
PolKit. Из-за некорректной обработки передаваемых в pkexec аргументов командной строки непривилегированный пользователь мог обойти аутентификацию и добиться запуска своего когда с правами root, независимо от установленных правил доступа. Для атаки не важно какие настройки и ограничения в PolKit заданы, достаточно чтобы для исполняемого файла с утилитой pkexec был выставлен признак SUID root.
Pkexec не проверяет корректность счётчика аргументов командной строки (argc), передаваемых при запуске процесса. Разработчиками pkexec подразумевалось, что первая запись массива argv всегда содержит имя процесса (pkexec), а вторая либо значение NULL, либо имя запускаемой через pkexec команды. Так как счётчик аргументов не проверялся на соответствие фактическому содержимому массива и полагалось, что он всегда больше 1, в случае передачи процессу пустого массива argv, что допускает функция execve в Linux, pkexec воспринимал значение NULL как первый аргумент (имя процесса), а следующую за пределами буфера память, как далее идущее содержимое массива.
|---------+---------+-----+------------|---------+---------+-----+------------|
| argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] |
|----|----+----|----+-----+-----|------|----|----+----|----+-----+-----|------|
V V V V V V
"program" "-option" NULL "value" "PATH=name" NULL
Проблема в том, что следом за массивом argv в памяти размещается массив envp, содержащий переменные окружения. Таким образом, при пустом массиве argv, pkexec извлекает данные о запускаемой с повышенными привилегиями команде из первого элемента массива с переменными окружения (argv[1] становился идентичен envp[0]), содержимое которого может контролировать атакующий.
Получив значение argv[1], pkexec пытается с учётом файловых путей в PATH определить полный путь к исполняемому файлу и записать указатель на строку с полный путём обратно в argv[1], что приведёт к перезаписи и значения первой переменной окружения, так как argv[1] идентичен envp[0]. Через манипуляцию с именем первой переменной окружения, атакующий может осуществить подстановку другой переменной окружения в pkexec, например, подставить переменную окружения "LD_PRELOAD", которая недопускается в suid-программах, и организовать загрузку в процесс своей разделяемой библиотеки.
В рабочем эксплоите осуществляется подстановка переменной GCONV_PATH, которая используется для определения пути к библиотеке перекодирования символов, динамически загружаемой при вызове функции g_printerr(), в коде которой используется iconv_open(). Переопределив путь в GCONV_PATH атакующий может добиться загрузки не штатной библиотеки iconv, а своей библиотеки, обработчики из которой будут выполнены во время вывода сообщения об ошибке на стадии, когда pkexec ещё выполняется с правами root и до проверки полномочий запуска.
Отмечается, что несмотря на то, что проблема вызвана повреждением памяти, она может надёжно и повторяемо эксплуатироваться независимо от используемой аппаратной архитектуры. Подготовленный эксплоит успешно протестирован в Ubuntu, Debian, Fedora и CentOS, но может быть использован и в других дистрибутивах. Оригинальный эксплоит пока не доступен публично, что утверждается, что он является тривиальным и может быть легко воссоздан другими исследователями, поэтому на многопользовательских системах важно как можно скорее установить обновление с исправлением. Polkit также доступен для BSD-систем и Solaris, но изучение возможности эксплуатации в них не производилось. Известно только то, что атака не может быть осуществлена в OpenBSD, так как ядро OpenBSD не допускает передачу при вызове execve() нулевого значения argc.
Проблема присутствует с мая 2009 года, со времени добавления команды pkexec. Исправление уявзимости в PolKit пока доступно в виде патча (корректирующий выпуск не сформирован), но так как разработчики дистрибутивов были заранее уведомлены о проблеме, большинство дистрибутивов опубликовало обновление одновременно с раскрытием информации об уязвимости. Проблема устранена в RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux и ROSA. Проблема пока не исправлена в Gentoo и Arch Linux. В качестве временной меры для блокирования уязвимости можно убрать флаг SUID root с программы /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").
Извините, данный ресурс не поддреживается. :(
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://www.openwall.com/lists...)
- OpenNews: Уязвимость в Polkit, позволяющая повысить свои привилегии в системе
- OpenNews: Уязвимости в OpenSMTPD, позволяющие удалённо и локально получить права root
- OpenNews: Удалённо эксплуатируемая уязвимость в почтовом сервере qmail
- OpenNews: Критическая уязвимость в sudo, позволяющая получить привилегии root
- OpenNews: Root-уязвимость в ядре Linux и отказ в обслуживании в systemd
Похожие новости:
- В Polkit добавлена поддержка JavaScript-движка Duktape
- Уязвимость в VFS ядра Linux, позволяющая повысить свои привилегии
- В программу защиты Linux от патентных претензий включено 337 новых пакетов
- Доступен полностью свободный вариант ядра Linux-libre 5.16
- Релиз ядра Linux 5.16
- Вторая версия патчей c реструктуризацией заголовочных файлов ядра Linux
- Новые версии дистрибутива GeckoLinux
- Опубликован набор патчей, ускоряющих сборку ядра Linux на 50-80%
- Выпуск Simply Linux и Альт Сервер Виртулизации на 10 Платформе ALT
- Выпуск модуля LKRG 0.9.2 для защиты от эксплуатации уязвимостей в ядре Linux
Теги для поиска: #_polkit, #_linux
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:11
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Компания Qualys выявила уявзвимость (CVE-2021-4034) в системном компоненте Polkit (бывший PolicyKit), используемом в дистрибутивах для организации выполнения непривилегированными пользователями действий, требующих повышенных прав доступа. Уязвимость позволяет непривилегированному локальному пользователю повысить свои привилегии до пользователя root и получить полный контроль за системой. Проблема получила кодовое имя PwnKit и примечательная подготовкой рабочего эксплоита, работающего в конфигурации по умолчанию в большинстве дистрибутивов Linux. Проблема присутствует во входящей в состав PolKit утилите pkexec, поставляемой с флагом SUID root и предназначенной для запуска команд с привилегиями другого пользователя в соответствии с заданными правилами PolKit. Из-за некорректной обработки передаваемых в pkexec аргументов командной строки непривилегированный пользователь мог обойти аутентификацию и добиться запуска своего когда с правами root, независимо от установленных правил доступа. Для атаки не важно какие настройки и ограничения в PolKit заданы, достаточно чтобы для исполняемого файла с утилитой pkexec был выставлен признак SUID root. Pkexec не проверяет корректность счётчика аргументов командной строки (argc), передаваемых при запуске процесса. Разработчиками pkexec подразумевалось, что первая запись массива argv всегда содержит имя процесса (pkexec), а вторая либо значение NULL, либо имя запускаемой через pkexec команды. Так как счётчик аргументов не проверялся на соответствие фактическому содержимому массива и полагалось, что он всегда больше 1, в случае передачи процессу пустого массива argv, что допускает функция execve в Linux, pkexec воспринимал значение NULL как первый аргумент (имя процесса), а следующую за пределами буфера память, как далее идущее содержимое массива. |---------+---------+-----+------------|---------+---------+-----+------------|
| argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |----|----+----|----+-----+-----|------|----|----+----|----+-----+-----|------| V V V V V V "program" "-option" NULL "value" "PATH=name" NULL Получив значение argv[1], pkexec пытается с учётом файловых путей в PATH определить полный путь к исполняемому файлу и записать указатель на строку с полный путём обратно в argv[1], что приведёт к перезаписи и значения первой переменной окружения, так как argv[1] идентичен envp[0]. Через манипуляцию с именем первой переменной окружения, атакующий может осуществить подстановку другой переменной окружения в pkexec, например, подставить переменную окружения "LD_PRELOAD", которая недопускается в suid-программах, и организовать загрузку в процесс своей разделяемой библиотеки. В рабочем эксплоите осуществляется подстановка переменной GCONV_PATH, которая используется для определения пути к библиотеке перекодирования символов, динамически загружаемой при вызове функции g_printerr(), в коде которой используется iconv_open(). Переопределив путь в GCONV_PATH атакующий может добиться загрузки не штатной библиотеки iconv, а своей библиотеки, обработчики из которой будут выполнены во время вывода сообщения об ошибке на стадии, когда pkexec ещё выполняется с правами root и до проверки полномочий запуска. Отмечается, что несмотря на то, что проблема вызвана повреждением памяти, она может надёжно и повторяемо эксплуатироваться независимо от используемой аппаратной архитектуры. Подготовленный эксплоит успешно протестирован в Ubuntu, Debian, Fedora и CentOS, но может быть использован и в других дистрибутивах. Оригинальный эксплоит пока не доступен публично, что утверждается, что он является тривиальным и может быть легко воссоздан другими исследователями, поэтому на многопользовательских системах важно как можно скорее установить обновление с исправлением. Polkit также доступен для BSD-систем и Solaris, но изучение возможности эксплуатации в них не производилось. Известно только то, что атака не может быть осуществлена в OpenBSD, так как ядро OpenBSD не допускает передачу при вызове execve() нулевого значения argc. Проблема присутствует с мая 2009 года, со времени добавления команды pkexec. Исправление уявзимости в PolKit пока доступно в виде патча (корректирующий выпуск не сформирован), но так как разработчики дистрибутивов были заранее уведомлены о проблеме, большинство дистрибутивов опубликовало обновление одновременно с раскрытием информации об уязвимости. Проблема устранена в RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux и ROSA. Проблема пока не исправлена в Gentoo и Arch Linux. В качестве временной меры для блокирования уязвимости можно убрать флаг SUID root с программы /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec"). Извините, данный ресурс не поддреживается. :( =========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:11
Часовой пояс: UTC + 5