È stata segnalata una nuova vulnerabilità ad alta gravità nel linguaggio di programmazione Rust. Il difetto potrebbe essere sfruttato per eliminare file e directory da un sistema esposto senza bisogno di autorizzazione.
“Il Rust Security Response WG è stato informato che lo std::fs::remove_dir_all La funzione della libreria standard è vulnerabile a una race condition che abilita il collegamento simbolico a seguire (CWE-363). Un utente malintenzionato potrebbe utilizzare questo problema di sicurezza per indurre un programma privilegiato a eliminare file e directory a cui l'attaccante non potrebbe altrimenti accedere o eliminare,” secondo l'avviso ufficiale.
Alla vulnerabilità è stato assegnato l'identificatore CVE-2022-21658.
Come si può sfruttare CVE-2022-21658?
Il difetto potrebbe funzionare nel caso in cui un utente malintenzionato possa ottenere l'accesso senza privilegi a un sistema vulnerabile per eliminare una directory di sistema chiamata sensibile/, ma non avevano i permessi per farlo.
Se std::fs::remove_dir_all ha seguito i collegamenti simbolici, potrebbero trovare un programma privilegiato che rimuove una directory a cui hanno accesso (chiamato temp/), crea un collegamento simbolico da temp/foo a sensitive/, e attendi che il programma privilegiato elimini foo/. Il programma privilegiato seguirebbe il collegamento simbolico da temp/foo a sensitive/ durante l'eliminazione ricorsiva, con conseguente sensibile/cancellazione, la consulenza detta.
Si noti che per prevenire questi attacchi, std::fs::remove_dir_all ha già una protezione contro l'eliminazione ricorsiva dei collegamenti simbolici. Tuttavia, quel controllo è stato implementato in modo errato nella libreria standard, risultando in un TOCTOU (Tempo di controllo Tempo di utilizzo) condizione di gara.
Piuttosto che dire al sistema di non seguire i collegamenti simbolici, la libreria standard ha prima verificato se la cosa che stava per eliminare era un collegamento simbolico. Altrimenti, procederebbe all'eliminazione ricorsiva della directory.
Il caso descritto ha creato una condizione di razza, dove un utente malintenzionato potrebbe creare una directory e sostituirla con un collegamento simbolico tra il controllo e l'effettiva eliminazione. Va detto che la probabilità che l'attacco abbia successo al primo tentativo non è grande. Ma gli esperimenti dei ricercatori hanno rivelato che potevano eseguirlo in modo affidabile in un paio di secondi.
Quali versioni di ruggine sono interessate?
CVE-2022-21658 interessa le versioni di Rust 1.0.0 attraverso Ruggine 1.58.0. Il piano del venditore era di rilasciare Rust 1.58.1 a gennaio 20, che includerebbe mitigazioni per questa vulnerabilità.
Va notato che macOS prima della versione 10.10 e REDOX non hanno API utilizzabili per mitigare adeguatamente l'attacco, e sono quindi ancora vulnerabili anche con una toolchain modificata.
È curioso ricordare che anche gli autori di malware usano Rust nella loro programmazione dannosa. Un nuovo giocatore ransomware-as-a-service è stato rilevato da Recorded Future e MalwareHunterTeam su due forum sotterranei. Conosciuto come ALPVH e BlackCat, il gruppo ransomware è il primo ad utilizzare il linguaggio Rust. Questo è stato il terzo ceppo di ransomware ad essere codificato in Rust, con gli altri due sperimentali.