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
Strumenti/GitHubGitHub/justinsteven/sudo_digest_toctou_poc_cve-2015-8239
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitApprendimento e FormazioneLab e Pratica
GitHubjustinsteven/sudo_digest_toctou_poc_cve-2015-8239

sudo_digest_toctou_poc_CVE-2015-8239

Proof-of-concept basato su Docker che dimostra un exploit di race condition TOCTOU contro la funzione Digest_Spec di sudo (CVE-2015-8239) utilizzando inotify per attacchi di sostituzione di file cross-user.

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
25 anni faNon ancora revisionato

POC TOCTOU del Digest_Spec di sudoers

Motivazione

Alyssa Milburn (https://twitter.com/noopwafel) ha scoperto un bug di condizione di gara TOCTOU in sudo quando viene utilizzata l'impostazione Digest_Spec. L'impostazione Digest_Spec può essere utilizzata per permettere a un utente di eseguire sudo su un binario se e solo se il suo hash corrisponde a un valore prescritto. Consultare man sudoers e cercare Digest_Spec per maggiori informazioni su questa funzionalità, e vedere http://noopwafel.net/notes/2015/sudo-digest-race-condition.html per maggiori informazioni sul bug scoperto da Alyssa. Il problema è stato assegnato CVE-2015-8239.

Il problema è stato mitigato aggiungendo documentazione a man sudoers che avverte del potenziale di una condizione di gara, e aggiungendo un po' di magia fexecve() a sudo per cercare di impedire che certi tipi di modifiche ai file siano efficaci.

È interessante notare che cve-assign ha detto quanto segue su https://seclists.org/oss-sec/2015/q4/256:

root@kitploit:~
As far as we know, the Digest_Spec feature can be useful if the user
invoking sudo doesn't have write access to the program file, but a
second (and potentially untrusted) user does have write access to the
program file. In the envisioned scenario, the second user is not
allowed to use sudo, the second user has no way to predict when anyone
else may use sudo, and the second user cannot use their write access
often. Thus, if the second user attempts a file-replacement attack,
the attack will almost certainly occur at an ineffective instant of
time, and the Digest_Spec feature will successfully prevent the
attacker's desired outcome.

Questo POC dimostra che questa affermazione non è necessariamente vera, a patto che l'utente "scrittore" possa eseguire codice persistente sul sistema. L'utente "scrittore" può sfruttare inotify per rilevare quando l'utente "esecutore" sta eseguendo il file usando sudo e può tentare un attacco di sostituzione del file in quel momento.

Informazioni

Questo progetto crea un'immagine Docker che:

  • Ha un file in /opt/sudoable che è scrivibile dall'utente editor, ed è eseguibile con sudo dall'utente executor se e solo se il suo hash SHA256 corrisponde a un valore particolare
  • Ha un file in /opt/hello (Il file "buono" il cui hash SHA256 è integrato in sudoers) e un file in /opt/goodbye (Un file "maligno")
  • Ha /opt scrivibile solo dall'utente root (E quindi l'utente editor può sostituire il contenuto di /opt/sudoable ma non può effettuare un'operazione di scambio di file a livello di filesystem)
  • Un exploit TOCTOU basato su inotify in /home/editor/exploit/exploit.py

Quando /home/editor/exploit/exploit.py viene eseguito dall'utente editor, inotify viene utilizzato per monitorare gli eventi del filesystem. Quando il file /opt/sudoable viene acceduto, viene sostituito con /opt/goodbye. Dopo che il file viene chiuso, viene sostituito con /opt/hello per lasciare le cose in uno stato "normale".

Supponendo che questa gara abbia successo quando l'utente executor esegue sudo /opt/sudoable (cosa che accade la maggior parte delle volte sulla mia macchina), l'utente editor può far sì che l'utente executor esegua un binario maligno come root indipendentemente dal fatto che l'hash SHA256 sia specificato come valore Digest_Spec in sudoers.

Costruzione

Esegui make all

Esecuzione

  1. Esegui ./instantiate.sh
  2. Esegui tmux new-session e dividi il riquadro (Ctrl+b poi "; usa Ctrl+b poi Su/Giù per cambiare riquadro)
  3. Nel riquadro superiore, esegui sudo -u executor sudo /opt/sudoable e osserva l'output Hello uid=0
  4. Nel riquadro inferiore, esegui sudo -u editor cp /opt/goodbye /opt/sudoable
  5. Nel riquadro superiore, esegui sudo -u executor sudo /opt/sudoable e osserva che ti viene chiesta una password (cioè l'operazione sudo è fallita a causa di una mancata corrispondenza del digest)
  6. Nel riquadro inferiore, esegui sudo -u editor /home/editor/exploit/exploit.py
  7. Nel riquadro superiore, esegui sudo -u executor sudo /opt/sudoable alcune volte e osserva l'output occasionale di

Esempio di output

Riquadro superiore:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Hello uid=0

Riquadro inferiore:

root@kitploit:~
root@c600efec2da8:/# sudo -u editor cp /opt/goodbye /opt/sudoable

Riquadro superiore:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for executor:

Riquadro inferiore:

root@kitploit:~
root@c600efec2da8:/# sudo -u editor /home/editor/exploit/exploit.py

Riquadro superiore:

root@kitploit:~
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for executor:
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
Goodbye uid=0
root@c600efec2da8:/# sudo -u executor sudo /opt/sudoable
sudo: unable to execute /opt/sudoable: Text file busy

Lavori futuri

In quali casi la mitigazione fexecve() è effettivamente efficace? Se un utente ha accesso in scrittura al file sudoable ma non alla directory in cui si trova, può modificare il file che viene aperto da sudo. Se l'utente ha accesso in scrittura alla directory ma non al file, può spostare il file e ricrearlo in modo da poterlo modificare, e siamo punto e a capo.

Ringraziamenti

Grazie a Luke (https://twitter.com/lukejahnke) per avermi parlato dell'impostazione Digest_Spec, per aver scambiato idee e per aver pensato di usare inotify per un POC pulito tra utenti diversi.

Scarica lo strumento
Goodbye uid=0