Il 14 ottobre è uscita la versione 1.8.28 di sudo. Corregge la CVE-2019-14287, un errore che in alcune configurazioni permette a un utente di eseguire comandi come root proprio quando le regole glielo vietano in modo esplicito. Il giorno dopo l’annuncio circolava già una dimostrazione pubblica.
Il caso tipico è una riga di sudoers che concede di lanciare un comando con l’identità di chiunque, tranne root:
mario ALL = (ALL, !root) /usr/bin/id
Basta che l’utente indichi la destinazione con un ID numerico, e che quell’ID sia -1 o il suo equivalente senza segno 4294967295. Il controllo delle regole non lo riconosce come root e lo lascia passare. Le chiamate di sistema che cambiano identità, invece, interpretano quel valore come «non cambiare nulla», e il processo resta con l’ID 0:
sudo -u#-1 id -u
0
Ci sono anche due effetti collaterali. Nei log il comando risulta eseguito dall’utente 4294967295 anziché da root, e i moduli PAM di sessione vengono saltati. Chi scorre i registri rischia di non notare niente.
Meno grave di quanto sembri, ma solo se non usi !root
La falla non regala root a qualunque utente. Servono un account già presente in sudoers e una regola che combini ALL nella specifica Runas con un’esclusione come !root. Le installazioni standard delle principali distribuzioni non usano questa combinazione. Il problema riguarda i server con regole personalizzate, dove quell’esclusione veniva considerata una barriera di sicurezza. Non lo era. A trovare il difetto è stato Joe Vennix, del team di sicurezza di Apple.
Ubuntu, Debian e Arch hanno già pubblicato i pacchetti corretti; per le altre distribuzioni controlla gli avvisi del fornitore. L’aggiornamento non richiede riavvii. Poi apri sudoers con visudo, insieme ai file in /etc/sudoers.d/, e cerca le regole con ALL e !root. Se non puoi aggiornare subito, sostituiscile con un elenco esplicito degli utenti ammessi, per esempio (www-data, backup). Infine cerca nei log di autenticazione le voci con USER=#-1 o 4294967295: se ne trovi, qualcuno ci ha già provato.



