Найти тему

Повышение привилегий Linux: PwnKit (CVE 2021-4034).

Здравствуйте, дорогие друзья. Сегодня поговорим про повышение привилегий в Linux, на примере уязвимости PwnKit (CVE 2021-4034). Ссылка: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-4034

Введение

Команда Qualys обнаружила локальную уязвимость повышения привилегий в инструменте setuid pkexec PolicyKit (polkit), который позволяет пользователям низкого уровня запускать команды как привилегированные пользователи. По данным Qualys, уязвимость существует в коде pkexec.c, который неправильно обрабатывает подсчет параметров вызова и прекращает попытки выполнить переменные среды как команды. Таким образом, злоумышленник может создать переменные среды таким образом, чтобы заставить pkexec выполнить произвольный код. В этой демонстрации мы используем более старую уязвимую версию Ubuntu 20.04, которую можно загрузить со страницы старых выпусков Ubuntu. Более новые версии уже поставляются с исправленной платформой polkit.

Polkit и pkexec

Polkit и pkexec: PolicyKit также известен как polkit в системах Linux. Это API авторизации, используемый программами для повышения своих разрешений до уровня пользователя с повышенными правами и запуска процессов от имени пользователя с повышенными правами (обычно root). Если пользователь не указан, он пытается выполнить эту команду от имени пользователя root. Sudo делает то же самое, позволяя пользователю запускать команды от имени пользователя root, однако с помощью pkexec администраторы могут точно контролировать выполнение определенных программ, определяя для них политики. Sudo не имеет ограничений, и пользователь может запускать любую команду с повышенными правами, если он знает пароль. Pkexec также требует некоторых усилий при настройке, но варианты Debian, включая популярную Ubuntu, поставляются с предустановленными polkit и pkexec. Эти правила авторизации для сторонних пакетов определены в файлах JavaScript *.rules, хранящихся в каталоге /usr/share/polkit-1/rules.d/.

Подробности о PwnKit

Код Pkexec можно посмотреть на github: https://github.com/wingo/polkit/blob/master/src/programs/pkexec.c. В основной функции Вы можете увидеть два передаваемых параметра: argc и argv[].

-2

Если мы не передаем в эту функцию никаких аргументов, argc = 0 и argv = NULL. В цикле for n теперь установлено в 1, и цикл не выполняется, поскольку условие не выполнено.

-3

Когда программа выполняется, аргументы, переменные среды и указатели размещаются в стеке последовательно. Переменная пути имеет значение NULL. Это делает argv[argc] равным Null и, наконец, argv[n] становится argv[1] (поскольку n=11), который становится envp[] или переменной среды. Автор называет это «ценностью».

-4

Поскольку путь имеет значение NULL, он не начинается с «/» (указывающего абсолютный путь), и, следовательно, функция g_find_program_in_path ищет значение в переменных среды.

-5

Наконец, переменной s присвоено значение этой переменной среды.

-6

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

Демонстрация

PoC этой уязвимости был загружен на github: https://github.com/berdav/CVE-2021-4034. Чтобы запустить атаку, нам просто нужно клонировать репозиторий, создать исполняемый файл и запустить его. Программа будет использовать эту слабость повреждения памяти, как описано выше.

cd /tmp

git clone https://github.com/berdav/CVE-2021-4034 pwnkit

make

./cve-2021-4034

whoami

cat /etc/passwd

-7

И всего двумя командами мы воспользовались уязвимостью pkexec и перешли к root-доступу!

Последствия

· Уязвимость уже исправлена соответствующими поставщиками. В Ubuntu 20.04 policykit-1 — версия 0.105-26ubuntu1.2 устраняет этот недостаток.

· Если для Вашей операционной системы нет доступных исправлений, Вы можете удалить бит SUID из pkexec в качестве временного решения.

chmod 07555 /usr/bin/pkexec

Заключение

Все необновленные старые версии Debian и Red Hat подвержены этой атаке, что представляет собой серьезный риск для организации. Простота использования этой атаки делает ее еще более опасной. Настоятельно рекомендуется системным администраторам обновить установленные пакеты polkit уже сегодня. Спасибо за прочтение.