
Preuve de concept pour la vulnérabilité Polkit Pkexec: CVE-2021-4034(Pkexec Local Privilege Escalation)
Ce dépôt contient un exploit que j'ai développé pour comprendre le fonctionnement de la vulnérabilité Polkit Pkexec : CVE-2021-4034 (Pkexec Local Privilege Escalation). Polkit (anciennement connu sous le nom de PolicyKit) est un composant dont la fonction est de contrôler les privilèges sur les systèmes d'exploitation de type Unix. Il fournit de manière organisée un moyen pour les processus sans privilèges de communiquer avec des processus privilégiés. La vulnérabilité permet à n'importe quel utilisateur, un utilisateur normal du système, sans privilèges administratifs, d'atteindre le maximum de privilèges sur le système.
La vulnérabilité se produit lorsque la fonction main() de pkexec traite des arguments de ligne de commande où l'argument est 0. La fonction tente d'accéder à la liste des arguments et finit par essayer d'accéder à rgvvoid (un contrôleur d'arguments de ligne de commande), c'est-à-dire qu'elle se produit lorsque pkexec ne gère pas correctement les paramètres d'appel et finit par tenter d'exécuter des variables d'environnement comme des commandes. Il en résulte une lecture et une écriture de la mémoire hors limites, ce qui permet à un attaquant d'exploiter et d'injecter ainsi une variable d'environnement pouvant charger un code malveillant.
C'est simple à comprendre : le fait que ces variables d'environnement puissent être introduites rend le code vulnérable. La méthode que j'ai utilisée pour exploiter la vulnérabilité est la même que celle utilisée par Qualys. Le processus est simple : il suffit d'injecter une variable GCONV_PATH dans l'environnement de travail de pkexec, c'est-à-dire n'importe quel répertoire disponible pour les utilisateurs normaux du système. Cette variable exécutera une bibliothèque partagée en tant que root. Il faut préciser que cette technique est bruyante et laisse beaucoup de traces, car l'injection de la variable crée un répertoire et partage les privilèges avec l'utilisateur root.
Si vous constatez que votre système est vulnérable, mettez-le à jour dès que possible. Si vous pensez toujours qu'il est vulnérable, vous pouvez supprimer le bit SUID de pkexec comme mesure d'atténuation temporaire, de cette façon : # chmod 0755 /usr/bin/pkexec
Plus de détails sur le fonctionnement de la vulnérabilité ici.
L'exploit fonctionnera instantanément sur les distributions vulnérables basées sur Debian, Ubuntu, Fedora et CentOS. Il a été créé à des fins d'étude de la vulnérabilité et pour voir jusqu'où je peux aller actuellement seul avec le langage C :D. Ne l'utilisez pas pour faire ce qu'il ne faut pas.
$ git clone https://github.com/Nosferatuvjr/PwnKit
$ cd PwnKit
$ chmod +x ./PwnKit.sh
$ ./PwnKit.sh
# id
Ou
$ git clone https://github.com/Nosferatuvjr/PwnKit
$ cd PwnKit
$ chmod +x ./PwnKit
$ ./PwnKit
$ ./PwnKit id #shell interativa

gcc -shared PwnKit.c -o PwnKit -Wl,-e,entry -fPIC