
Prova de conceito de exploit para CVE-2021-4034 (PwnKit), uma vulnerabilidade de escalonamento local de privilégios no utilitário pkexec do Polkit que afeta a maioria das distribuições Linux.
PoC do Polkit
O Policy Toolkit (ou Polkit) desde que foi lançado em 2009 permite que qualquer atacante sem permissões de root obtenha facilmente acesso administrativo sobre qualquer sistema Linux com o pacote Polkit. Infelizmente, (ou não) está instalado por padrão na maioria das distribuições Linux. Com isso, tornou esta vulnerabilidade disseminada.
Felizmente, (ou não) esta vulnerabilidade não pode ser explorada remotamente, o que a torna uma vulnerabilidade de escalada de privilégios local (LPE).
O Polkit faz parte da maioria dos sistemas de autorização do Linux. Quando é realizada qualquer ação que requer uma permissão administrativa. O Polkit determina se tem as permissões necessárias para poder executar a ação. Está integrado ao systemd (substituto do init). De fato, o Systemd é conhecido como "sudo do systemd", segundo THM.
Quando interagimos com o polkit, podemos usar o pkexec (programa que contém a vulnerabilidade Pwnkit). Como exemplo, quando tentamos executar useradd com pkexec em uma sessão GUI, aparece uma janela que nos pede as credenciais. Na CLI podemos obter algo semelhante a isto:
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:
Obviamente, a Canonical já lançou versões corrigidas deste pacote no gerenciador de pacotes APT. Se em alguma distribuição não foram publicadas versões corrigidas, simplesmente remove-se o bit SUID do pkexec.
sudo chmod 0777 'which pkexec'