Vulnerabilità nella libreria standard di Rust

È stata identificata una vulnerabilità (CVE-2022-21658) nella libreria standard Rust a causa di una race condition nella funzione std::fs::remove_dir_all(). Se questa funzione viene utilizzata per eliminare file temporanei in un'applicazione privilegiata, un utente malintenzionato può ottenere l'eliminazione di file e directory di sistema arbitrari che normalmente non avrebbe accesso per eliminare.

La vulnerabilità è causata da un'errata implementazione del controllo dei collegamenti simbolici prima dell'eliminazione ricorsiva delle directory. Invece di impedire che i collegamenti simbolici vengano seguiti, Remove_dir_all() controlla prima se il file è un collegamento simbolico. Se viene definito un collegamento, viene eliminato come file e, se si tratta di una directory, viene richiamata un'operazione ricorsiva di rimozione del contenuto. Il problema è che c'è un leggero ritardo tra il controllo e l'inizio dell'operazione di cancellazione.

Nel momento in cui il controllo è già stato effettuato, ma l'operazione di enumerazione delle directory da cancellare non è ancora iniziata, l'attaccante può sostituire la directory con file temporanei con un collegamento simbolico. Se arriva al momento giusto, la funzioneremove_dir_all() tratterà il collegamento simbolico come una directory e inizierà a rimuovere il contenuto a cui punta il collegamento. Nonostante il fatto che il successo dell'attacco dipenda dalla precisione del momento scelto per sostituire la directory e che sia improbabile colpire il momento giusto la prima volta, durante gli esperimenti i ricercatori sono stati in grado di ottenere un attacco ripetibile con successo dopo aver eseguito l'exploit all'interno pochi secondi.

Sono interessate tutte le versioni di Rust dalla 1.0.0 alla 1.58.0 inclusa. Per ora il problema è stato risolto sotto forma di patch (la correzione sarà inclusa nella release 1.58.1, prevista entro poche ore). Puoi monitorare l'eliminazione della vulnerabilità nelle distribuzioni in queste pagine: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Si consiglia a tutti gli utenti di programmi Rust in esecuzione con privilegi elevati e che utilizzano la funzioneremove_dir_all di aggiornare urgentemente Rust alla versione 1.58.1. È interessante notare che la patch rilasciata non risolve il problema su tutti i sistemi; ad esempio, nel sistema operativo REDOX e nelle versioni di macOS precedenti alla 10.10 (Yosemite), la vulnerabilità non viene bloccata a causa dell'assenza del flag O_NOFOLLOW, che disabilita i seguenti simboli collegamenti.

Fonte: opennet.ru

Aggiungi un commento