Vulnerabilità nella libreria standard del linguaggio Rust

È stata identificata una vulnerabilità nella libreria standard del linguaggio Rust (CVE-2022-21658), relativa a uno stato di gara nella funzione std::fs::remove_dir_all(). Se questa funzione viene utilizzata per eliminare file temporanei in un'applicazione privilegiata, un aggressore può provocare la cancellazione di file e directory di sistema arbitrari, ai quali di norma non ha accesso.

La vulnerabilità è causata da un'implementazione errata del controllo dei collegamenti simbolici prima della rimozione ricorsiva delle directory. Invece di vietare il seguire i collegamenti simbolici, la funzione remove_dir_all() verifica inizialmente se il file è un collegamento simbolico. Se viene definito un collegamento, viene rimosso come file, mentre se è una directory, viene chiamata l'operazione di cancellazione ricorsiva del contenuto. Il problema è che tra il controllo e l'inizio dell'operazione di cancellazione c'è un breve ritardo.

Nel momento in cui il controllo è già stato eseguito, ma l'operazione di attraversamento delle directory per la cancellazione non è ancora iniziata, un aggressore può sostituire la directory contenente i file temporanei con un collegamento simbolico. Se avviene al momento giusto, la funzione remove_dir_all() tratterà il collegamento simbolico come una directory e inizierà a rimuovere il contenuto a cui punta il collegamento. Nonostante il successo dell'attacco dipenda dalla tempistica esatta della sostituzione della directory e la probabilità di colpirlo al primo tentativo sia bassa, durante gli esperimenti i ricercatori sono riusciti a eseguire ripetutamente l'attacco con successo dopo aver eseguito l'exploit in pochi secondi.

Tutte le versioni di Rust dalla 1.0.0 alla 1.58.0 inclusa sono vulnerabili. Il problema è stato temporaneamente risolto mediante una patch (la correzione sarà inclusa nella versione 1.58.1, prevista nell'arco delle prossime ore). È possibile monitorare la risoluzione della vulnerabilità nelle distribuzioni alle seguenti pagine: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Si raccomanda a tutti gli utenti di programmi in Rust, eseguiti con privilegi elevati e che utilizzano la funzione remove_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, nei sistemi operativi REDOX e nelle versioni di macOS inferiori alla 10.10 (Yosemite) la vulnerabilità non viene bloccata a causa della mancanza del flag O_NOFOLLOW, che disabilita il seguire i collegamenti simbolici.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster