L'azienda Canonical ha pubblicato risultati preliminari di un audit di sicurezza indipendente sugli strumenti uutils coreutils (Rust Coreutils), sviluppati in Rust e utilizzati parzialmente in Ubuntu al posto del pacchetto GNU Coreutils. L'audit è stato condotto da Zellic, un'azienda esperta nell'analisi delle vulnerabilità in progetti scritti in Rust. Durante il controllo sono state riscontrate 113 problematiche di sicurezza.
Attualmente è disponibile un rapporto (PDF, 156 pagine) con i risultati della prima fase dell'audit, che copre le utilità più importanti del set uutils. Nella prima fase, svolta da dicembre 2025 a gennaio 2026, sono state trovate 73 vulnerabilità, di cui 7 classificate come critiche, 11 pericolose, 29 di media gravità e 26 non pericolose.
La seconda fase dell'audit si è svolta da febbraio a marzo e ha coperto utility secondarie non testate nella prima fase. In questa fase sono state trovate 40 vulnerabilità, il cui rischio non è ancora dettagliato (il rapporto verrà pubblicato in seguito). Le informazioni su tutti i problemi riscontrati sono già state inviate agli sviluppatori di uutils e la maggior parte delle vulnerabilità è stata risolta nelle versioni 0.5-0.8 di uutils senza ulteriore pubblicità e senza annotare la connessione tra le correzioni apportate e la risoluzione delle vulnerabilità.
Il pacchetto rust-coreutils è stato incluso per impostazione predefinita nella versione autunnale di Ubuntu 25.10, ma a causa dei problemi riscontrati durante l'audit, nella versione LTS di Ubuntu 26.04 sono state ripristinate le utility cp, mv e rm dal set GNU Coreutils. Si segnala che al 22 aprile rimangono 8 stati di race condition noti in queste utility. Le altre utility sono utilizzate dalla versione 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 in quanto possono essere utilizzate in script eseguiti con i privilegi di root. Ad esempio, una vulnerabilità risolta nella versione uutils coreutils 0.3.0 nell'utility rm potrebbe essere stata sfruttata durante l'esecuzione giornaliera da uno script cron /etc/cron.daily/apport, che viene eseguito con privilegi di root e rimuove ricorsivamente il contenuto della cartella /var/crash, accessibile in scrittura a tutti gli utenti nel sistema.
Tra le vulnerabilità contrassegnate come critiche nel primo rapporto ci sono:
- Una vulnerabilità nell'utility chroot, causata dal trattamento 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 specificate in esso con i moduli NSS (libnss_*.so.2). Poiché la chiamata a chroot() viene eseguita prima della gestione di NSS, il file /etc/nsswitch.conf viene caricato rispetto alla nuova root, ma le librerie NSS vengono caricate prima del ripristino dei privilegi. Se un utente ha accesso in scrittura alla nuova root, può fornire le proprie librerie NSS e ottenere l'esecuzione di codice con i privilegi di root.
- Modifica dei permessi di accesso a un file dopo un errore nella creazione di un canale nominato (FIFO) con l'utilità mkfifo: se si specifica un file esistente come argomento, mkfifo restituirà un errore, ma non terminerà accidentalmente il programma; eseguirà invece la chiamata a set_permissions() e cambierà i permessi del file esistente. Considerando umask 022, la vulnerabilità consente di modificare i permessi del file a 644 (rw-r--r--) e ottenere accesso a file per cui non era consentita la lettura.
- Bypass delle restrizioni «—preserve-root» nell'utilità chmod, che impediscono l'esecuzione di operazioni ricorsive rispetto alla radice del file system. La vulnerabilità (CVE-2026-35338) è causata dal fatto che il codice controllava solo la corrispondenza esatta del percorso con «/» e non eseguiva la canonizzazione del percorso del file. Per bypassare il controllo, è sufficiente utilizzare un percorso come «/../» o un collegamento simbolico alla radice. La vulnerabilità è pericolosa perché, se è possibile inserire il proprio percorso in uno script di sistema che chiama il comando chmod, si può ottenere la modifica ricorsiva dei permessi per tutti i file nel file system.
- Nell'utilità rm era consentita la gestione di qualsiasi abbreviazione dell'opzione «—no-preserve-root» («—n», «—no», «—no-p», «—no-pres» e simili) per disattivare la protezione contro l'esecuzione di operazioni ricorsive sulla radice (ad esempio, è possibile specificare «rm -rf —n /» e cancellare per errore tutti i dati. Nelle GNU Coreutils tali opzioni abbreviate sono vietate.
- Elusione delle limitazioni «—preserve-root» nell'utilità rm, che vietano l'esecuzione di operazioni ricorsive relative alla radice del file system, attraverso la sostituzione con un collegamento simbolico a «/».
- Mancanza di una protezione adeguata contro la specifica di directory che iniziano con un punto. Ad esempio, eseguendo «rm -rf .» l'utilità restituirà un errore, ma specificando «rm -rf ./» o «rm -rf .///» cancellerà silenziosamente la directory corrente.
- Un errore nel codice di analisi degli argomenti dell'utilità kill consente di inviare un segnale a tutti i processi nel sistema specificando l'identificatore di processo «-1» (kill -1).
In generale, la maggior parte delle vulnerabilità appartiene alla classe TOCTOU (Time-Of-Check-To-Time-Of-Use), che implica la presenza di una condizione di race, consentendo la modifica dei dati nel momento successivo alla verifica della correttezza delle informazioni, ma prima dell'esecuzione dell'operazione su di essi. Ad esempio, potrebbe essere possibile sostituire un file con un link simbolico nel breve intervallo tra la fine del controllo e l'inizio dell'esecuzione dell'operazione. Nel contesto dell'uso degli strumenti cp e mv in script di sistema eseguiti con i privilegi di root, tali vulnerabilità possono consentire di copiare o sovrascrivere file arbitrari.
Fonte: opennet.ru
