
Эксплойт-доказательство концепции для CVE-2021-4034 (PwnKit), уязвимости локального повышения привилегий в утилите pkexec из Polkit, затрагивающей большинство дистрибутивов Linux.
PoC для Polkit
Policy Toolkit (или Polkit) с момента выпуска в 2009 году позволяет любому атакующему без прав root легко получить административный доступ к любой системе Linux с установленным пакетом Polkit. К сожалению (или к счастью), он установлен по умолчанию в большинстве дистрибутивов Linux. Из-за этого данная уязвимость получила широкое распространение.
К счастью (или к сожалению), данную уязвимость нельзя эксплуатировать удаленно, что делает её уязвимостью локального повышения привилегий (LPE).
Polkit является частью большинства систем авторизации Linux. Когда выполняется любое действие, требующее административных прав, Polkit определяет, есть ли у вас необходимые разрешения для его выполнения. Он встроен в systemd (замена init). Фактически, systemd называют «sudo для systemd», согласно THM.
При взаимодействии с polkit мы можем использовать pkexec (программа, содержащая уязвимость Pwnkit). Например, при попытке выполнить useradd с помощью pkexec в сеансе GUI появляется окно с запросом учетных данных. В CLI мы можем получить нечто подобное:
user@user:~$ pkexec useradd test1
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run '/usr/sbin/useradd' as the super user
Authenticating as: user,,, (user)
Password:
Очевидно, Canonical уже выпустила исправленные версии этого пакета в менеджере пакетов APT. Если в каком-либо дистрибутиве не были опубликованы исправленные версии, просто удалите SUID-бит у pkexec.
sudo chmod 0777 'which pkexec'