La compagnia Canonical ha pubblicato i risultati preliminari di un audit di sicurezza indipendente degli uutils coreutils (Rust Coreutils), scritto in Rust e parzialmente utilizzato in Ubuntu invece del pacchetto GNU Coreutils. L'audit è stato eseguito da Zellic, un'azienda con esperienza nell'analisi delle vulnerabilità nei progetti Rust. Durante il controllo sono state riscontrate 113 problematiche di sicurezza.
Attualmente è già disponibile un rapporto (PDF, 156 pagine) con i risultati della prima fase dell'audit, che copre le utility più importanti del pacchetto uutils. Nella prima fase, condotta da dicembre 2025 a gennaio 2026, sono state identificate 73 vulnerabilità, di cui 7 classificate come critiche, 11 come pericolose, 29 come di media pericolosità e 26 come non pericolose.
La seconda fase dell'audit è stata condotta da febbraio a marzo e ha coperto le utility secondarie non esaminate nella prima fase. Nella seconda fase sono state trovate 40 vulnerabilità, la cui pericolosità non è ancora stata dettagliata (il rapporto verrà pubblicato in seguito). Le informazioni su tutte le problematiche identificate sono già state trasmesse agli sviluppatori di uutils e la maggior parte delle vulnerabilità è stata risolta nelle versioni di uutils 0.5-0.8 senza eccessiva pubblicità e collegamenti ai correttivi apportati.
Il pacchetto rust-coreutils è stato incluso per impostazione predefinita nell'uscita autunnale di Ubuntu 25.10, ma in considerazione dei problemi riscontrati nell'audit, nella versione LTS di Ubuntu 26.04 sono stati ripristinati gli strumenti cp, mv e rm da GNU Coreutils. Si segnala che al 22 aprile in questi strumenti rimangono 8 stati di race condition noti non risolti. Le altre utility sono utilizzate dall'uscita rust-coreutils 0.8.0. In Ubuntu 26.10 gli sviluppatori intendono passare completamente a rust-coreutils.
Le vulnerabilità nelle utility di sistema sono pericolose poiché possono essere utilizzate negli script eseguiti con diritti di root. Ad esempio, la vulnerabilità risolta nella versione uutils coreutils 0.3.0 nell'utility rm poteva essere sfruttata durante l'esecuzione giornaliera tramite uno script cron /etc/cron.daily/apport, che viene eseguito con diritti di root e elimina ricorsivamente il contenuto della cartella /var/crash, accessibile in scrittura a tutti gli utenti di sistema.
Tra le vulnerabilità contrassegnate nel primo rapporto come critiche:
- Una vulnerabilità nell'utility chroot, causata dalla gestione dell'opzione «—userspec» dopo la chiamata a chroot(), ma prima del ripristino dei privilegi. Nei sistemi con glibc, la risoluzione dei nomi tramite la funzione getpwnam() porta alla lettura del file /etc/nsswitch.conf, utilizzato in NSS (Name Service Switch), e al caricamento dinamico delle librerie indicate in esso con i moduli NSS (libnss_*.so.2). Dato che prima della gestione di NSS viene eseguita la chiamata chroot(), il file /etc/nsswitch.conf viene caricato relativamente alla nuova radice, mentre le librerie NSS vengono caricate prima del ripristino dei privilegi. Se l'utente ha accesso in scrittura alla nuova radice, può sostituire le proprie librerie NSS e ottenere l'esecuzione di codice con i privilegi di root.
- Modifica dei permessi su un file dopo un fallimento nella creazione di un canale nominato (FIFO) da parte dell'utility mkfifo — se si specifica un file esistente come argomento, mkfifo restituirà un errore ma non terminerà il suo funzionamento in modo anomalo, bensì eseguirà una chiamata a set_permissions() e cambierà i permessi sul file esistente. Tenendo conto di umask 022, la vulnerabilità consente di modificare i permessi del file in 644 (rw-r--r--) e di accedere a file per i quali non era consentita la lettura.
- Controllo delle restrizioni «—preserve-root» nell'utility chmod, che vietano l'esecuzione di operazioni ricorsive relative alla radice del FS. La vulnerabilità (CVE-2026-35338) è causata dal fatto che nel codice viene controllata solo la corrispondenza esatta del percorso con «/» e non viene eseguita la canonizzazione del percorso del file. Per eludere il controllo è sufficiente utilizzare un percorso del tipo «/../» o un link simbolico alla radice. La vulnerabilità è pericolosa in quanto, se è possibile sostituire il proprio percorso in uno script di sistema che chiama il comando chmod, è possibile ottenere una modifica ricorsiva dei permessi per tutti i file nel FS.
- Nell'utility rm era consentita la gestione di qualsiasi abbreviazione dell'opzione «—no-preserve-root» («—n», «—no», «—no-p», «—no-pres» ecc.) per disattivare la protezione contro l'esecuzione di operazioni ricorsive con la radice (ad esempio, si può specificare «rm -rf —n /» e cancellare erroneamente tutti i dati. Nelle GNU Coreutils queste abbreviazioni sono vietate.
- Controllo delle restrizioni «—preserve-root» nell'utility rm, che vietano l'esecuzione di operazioni ricorsive relative alla radice del FS, tramite l'inserimento di un link simbolico a «/».
- Assenza di una protezione adeguata contro l'indicazione di directory che iniziano con un punto. Ad esempio, se si esegue «rm -rf .», l'utility restituirà un errore, ma se si specifica «rm -rf ./» o «rm -rf .///» eliminerà silenziosamente la directory corrente.
- Un errore nel codice di parsing degli argomenti dell'utilità kill consente di inviare un segnale a tutti i processi nel sistema quando si specifica l'identificatore di processo «-1» (kill -1).
Per il resto, la maggior parte delle vulnerabilità appartiene alla classe TOCTOU (Time-Of-Check-To-Time-Of-Use), che implica la presenza di una condizione di corsa che consente di modificare i dati nel momento successivo alla verifica della correttezza delle informazioni, ma prima dell'esecuzione dell'operazione, ad esempio, sostituendo un file con un link simbolico nel momento tra la conclusione della verifica e l'inizio dell'esecuzione dell'operazione. Nel contesto dell'uso delle utilità cp e mv in script di sistema eseguiti con privilegi di root, tali vulnerabilità consentono di copiare o sovrascrivere file arbitrari.
Fonte: opennet.ru
