Vulnerabilità nella libreria standard del linguaggio Rust

È stata identificata una vulnerabilità (CVE-2022-21658) nella libreria standard del linguaggio Rust, legata a una condizione di corsa nella funzione std::fs::remove_dir_all(). Se questa funzione viene utilizzata per eliminare file temporanei in un'applicazione privilegiata, un aggressore può ottenere l'eliminazione di file e directory di sistema arbitrari, a cui normalmente non avrebbe accesso.

La vulnerabilità è causata da un'implementazione non corretta del controllo dei collegamenti simbolici prima dell'eliminazione ricorsiva delle directory. Invece di vietare l'accesso ai collegamenti simbolici, la funzione remove_dir_all() controlla inizialmente se il file è un collegamento simbolico. Se viene definito un collegamento, esso viene eliminato come file; se è una directory, viene avviata l'operazione di eliminazione ricorsiva del contenuto. Il problema è che tra il controllo e l'avvio dell'operazione di eliminazione si verifica un breve ritardo.

Nel momento in cui la verifica è già stata eseguita, ma l'operazione di scansione delle directory per la rimozione non è ancora iniziata, l'attaccante può sostituire la directory con i file temporanei con un link simbolico. Se viene eseguita al momento giusto, la funzione remove_dir_all() tratterà il link simbolico come una directory e inizierà a rimuovere il contenuto a cui questo link fa riferimento. Nonostante il successo dell'attacco dipenda dalla precisione del momento scelto per la sostituzione della directory e la possibilità di colpire al primo tentativo sia poco probabile, durante gli esperimenti i ricercatori sono riusciti a ottenere un attacco ripetibile e di successo dopo aver eseguito l'exploit in pochi secondi.

Tutte le versioni di Rust dalla 1.0.0 alla 1.58.0 inclusa presentano vulnerabilità. Il problema è stato temporaneamente risolto tramite una patch (la correzione sarà inclusa nella versione 1.58.1, attesa entro poche ore). È possibile monitorare la risoluzione della vulnerabilità nelle distribuzioni sulle seguenti pagine: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. A tutti gli utenti di applicazioni scritte in Rust, eseguite con privilegi elevati e che utilizzano la funzione remove_dir_all, si raccomanda 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 precedenti alla 10.10 (Yosemite), la vulnerabilità non viene bloccata a causa dell'assenza del flag O_NOFOLLOW, che disabilita il follow delle link simboliche.

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