
Prova di concetto per la vulnerabilità Polkit Pkexec: CVE-2021-4034(Pkexec Local Privilege Escalation)
Questo repository contiene un exploit che ho sviluppato per capire come funziona la vulnerabilità Polkit Pkexec: CVE-2021-4034 (Pkexec Local Privilege Escalation). Polkit (precedentemente noto come PolicyKit) è un componente che ha il compito di controllare i privilegi nei sistemi operativi Unix. Fornisce in modo organizzato un modo per i processi senza privilegi di comunicare con processi che possiedono privilegi. La vulnerabilità permette a qualsiasi utente, un utente comune del sistema, senza privilegi amministrativi, di raggiungere il massimo privilegio nel sistema.
La vulnerabilità si verifica quando la funzione main() di pkexec elabora argomenti della riga di comando in cui l'argomento è 0. La funzione tenta di accedere alla lista degli argomenti e finisce per accedere a rgvvoid (un controllore di argomenti della riga di comando), cioè, si verifica quando pkexec non gestisce correttamente i parametri di chiamata e finisce per tentare di eseguire variabili d'ambiente come comandi. Il risultato è che la memoria viene letta e scritta fuori dai limiti, dove un aggressore può sfruttare e in questo modo iniettare una variabile d'ambiente che può causare il caricamento di codice malevolo.
È semplice da capire, il fatto che queste variabili d'ambiente possano essere introdotte rende il codice vulnerabile. Il modo che ho usato per sfruttare la vulnerabilità è lo stesso usato da Qualys. Il processo è semplice, basta iniettare una variabile GCONV_PATH nell'ambiente di lavoro di pkexec, cioè, qualsiasi directory disponibile per utenti comuni del sistema. Questa variabile eseguirà una libreria condivisa come root. Dobbiamo chiarire che questa tecnica è rumorosa e lascia molte tracce, poiché l'iniezione della variabile crea una directory e condivide i privilegi con l'utente root.
Se vedi che il tuo sistema è vulnerabile, aggiornalo il prima possibile. Se ancora credi di essere vulnerabile, puoi rimuovere il bit SUID di pkexec come forma di mitigazione temporanea, in questo modo: # chmod 0755 /usr/bin/pkexec
Maggiori dettagli su come funziona la vulnerabilità qui.
L'exploit funzionerà istantaneamente su distribuzioni vulnerabili basate su Debian, Ubuntu, Fedora e CentOS. È stato creato per scopi di studio sulla vulnerabilità e per vedere fin dove posso arrivare adesso da solo con il linguaggio C :D. Non usarlo per fare ciò che non dovresti.
$ git clone https://github.com/Nosferatuvjr/PwnKit
$ cd PwnKit
$ chmod +x ./PwnKit.sh
$ ./PwnKit.sh
# id
Oppure
$ git clone https://github.com/Nosferatuvjr/PwnKit
$ cd PwnKit
$ chmod +x ./PwnKit
$ ./PwnKit
$ ./PwnKit id #shell interattiva

gcc -shared PwnKit.c -o PwnKit -Wl,-e,entry -fPIC