Perché le vulnerabilità in sudo-rs (Ubuntu) non dovrebbero fare notizia, e invece fanno rumore?

Ubuntu 25.10 introduce sudo-rs, la riscrittura in Rust del comando sudo. Individuate vulnerabilità nella nuova implementazione, già corrette. Rust riduce il rischio di bug di memoria, ma non elimina problemi logici.

Con l’arrivo di Ubuntu 25.10, Canonical ha intrapreso la via di un cambiamento significativo: sostituire gradualmente il tradizionale comando sudo con sudo-rs, una riscrittura in linguaggio Rust del celebre comando per l’elevazione dei privilegi Unix e Unix-like. La scelta mira a ridurre il debito tecnico e le classi di vulnerabilità tipiche del codice C ereditato da un progetto nato nel lontanissimo 1980, ma la transizione si è rivelata — almeno nelle prime fasi — più complessa del previsto.

sudo-rs ha generato non pochi grattacapi agli sviluppatori di Ubuntu a causa di due vulnerabilità classificate come di gravità “moderata”. L’accaduto sottolinea come la migrazione da un comando storico, universalmente integrato nelle distribuzioni Linux, comporti comunque rischi funzionali e di sicurezza che devono essere gestiti con attenzione.

Natura delle vulnerabilità in sudo-rs e patch applicate

Le vulnerabilità emerse in sudo-rs non riguardano aspetti legati alla gestione della memoria (buffer overflow/use-after-free) — classiche delle implementazioni legacy in C — ma riguardavano errori di logica nella gestione dell’input e dei timestamp di autenticazione. Tra le correzioni principali già applicate da Canonical, troviamo le seguenti:

  • Una delle patch risolve un bug che poteva esporre la password dell’utente sul terminale in caso di interruzione del processo (ad esempio con CTRL+C) o di timeout durante l’inserimento;
  • Un’altra correzione evita che il tasto backspace sia interpretato come carattere valido in un campo password vuoto, prevenendo comportamenti imprevisti nel parsing dell’input.

Rust non è una panacea, ma riduce la superficie d’attacco

L’obiettivo di sudo-rs è di replicare pienamente il comportamento del comando sudo originale, eliminando al contempo decenni di codice ereditato e potenzialmente fragile.

Il linguaggio Rust, grazie al suo modello di proprietà e borrowing, impedisce intere classi di errori come use-after-free, null pointer dereference e buffer overflow, ma non può prevenire bug logici o race condition introdotte da una logica di controllo errata.

Veniamo quindi al titolo dell’articolo: un paio di vulnerabilità, peraltro già corrette, in un componente come sudo-rs non dovrebbero fare notizia. Se ne parla perché Canonical ha deciso di mettere progressivamente alla porta un componente storico come sudo, ritenuto indiscutibile da buona parte della comunità, e soprattutto perché esso è sviluppato in Rust, linguaggio che punta sulla sicurezza della memoria rimuovendo alla base molteplici problematiche.

Come sottolineato da molti sviluppatori, scrivere codice Rustnon fa sparire magicamente i problemi”, ma riduce la probabilità di vulnerabilità critiche e rende il codice più prevedibile nel lungo periodo. Un approccio che si rivela particolarmente importante per strumenti di sistema fondamentali come sudo, il cui codice originale — oltre 200.000 righe in C — risale a decenni fa e include moduli ormai obsoleti, come il supporto LDAP integrato, SSL legacy e funzioni di rete scarsamente documentate.

Analisi tecnica e considerazioni

Rust abbassa la probabilità di bug di memoria, ma non elimina né previene i bug di logica applicativa o configurazioni insicure che possano facilitare eventuali attacchi.

Le vulnerabilità rinvenute in sudo-rs sono coerenti con questa distinzione: i problemi individuati sono prevalentemente legati a input handling, feedback e timestamp logic, non certo alla corruzione della memoria.

Riscrivere un progetto maturo come sudo è giustificato al fine di ridurre il debito tecnico, come abbiamo osservato in precedenza. Si tratta tuttavia di un lavoro che comporta nuove implementazioni: per quanto “memory-safe”, anch’esse hanno bisogno di una fase di maturazione e controllo attento prima di poter sostituire senza rischi l’implementazione storica in ambienti di produzione critici.

Ubuntu 25.10 come banco di prova per Ubuntu 26.04 LTS

E infatti, riallacciandoci alla chiusura del precedente paragrafo, Canonical ha dichiarato apertamente che Ubuntu 25.10 rappresenta un banco di prova per l’integrazione di utility scritte in Rust, con l’obiettivo di raggiungere una maturità sufficiente per l’adozione predefinita in Ubuntu 26.04 LTS.

Nel frattempo, le versioni tradizionali di sudo restano disponibili come opzione, garantendo compatibilità e stabilità per gli ambienti di produzione. In Ubuntu basta invocare il comando sudo-ws per richiamare la precedente versione. La scelta di Canonical riflette una strategia di transizione graduale, volta a testare nuove implementazioni in scenari reali prima di una migrazione completa.

Ti consigliamo anche

Link copiato negli appunti