Una nuova vulnerabilità è stata scoperta nel sistema di init Systemd: un server DNS malevolo può sfruttare un errore nell’allocazione di un buffer in systemd-resolved per scrivere dati arbitrari in memoria, causando il crash del software o, potenzialmente, eseguire comandi arbitrari con privilegi elevati .
Introdotta a Giugno 2015 in systemd 223 e presente anche nel rilascio 233 dello scorso marzo, la vulnerabilità è stata scoperta da Chris Coulson – software engineer in Canonical – ed è identificata nel database Common Vulnerability Exposure con il codice CVE-2017-9445 .
La funzione affetta è dns_packet_new
di resolved , che può essere attaccata da un server DNS malevolo tramite una risposta DNS appositamente costruita, provocando l’allocazione di un buffer più piccolo del necessario .
Il bug si verifica a causa di un errore nel calcolo della lunghezza della zona di memoria da allocare, che restituisce valori troppo piccoli quando la grandezza della risposta DNS è prossima al valore massimo ammesso per la grandezza del pacchetto UDP (MTU dichiarato sull’interfaccia meno la dimensione degli header IP e UDP).
Passando a dns_packet_new
un valore di 4016 byte nel parametro mtu
(dal nome fuorviante, ma che da un’analisi del codice sembra indicare la grandezza massima del payload del pacchetto) in fase di allineamento della struttura alle pagine di memoria avremo un’allocazione di memoria di 80 byte in più di dati rispetto alla dimensione della struttura, raggiungendo 4096 byte.
Tuttavia l’allocazione della struttura DnsPacket richiede almeno 108 byte, portando il payload a sforare.
La patch , effettuata da Zbigniew Jędrzejewski-Szmek , punta a semplificare e a correggere questo calcolo.
Tra le distribuzioni Linux coinvolte annoveriamo Ubuntu (nelle versioni 16.10 e 17.04), Debian (Sid, Stretch e Buster, sebbene in Stretch systemd-resolved sia disabilitato di default).
Canonical, che ha assegnato un livello di severity elevato alla vulnerabilità, ha segnalato la presenza della patch per la risoluzione del problema nella Ubuntu Security Notice 3341-1 ; anche Debian ha pubblicato un proprio bollettino .
Red Hat Enterprise Linux e CentOS non sono vulnerabili, mentre per Fedora è stato rilasciato un aggiornamento.
Tale vulnerabilità ha sollevato nuovamente i dubbi della comunità nei confronti di systemd. Questo componente dovrebbe nascere come sistema per l’inizializzazione dei servizi; nonostante ciò, nel tempo, il numero di demoni ad esso corollari è cresciuto in maniera spropositata andando ad re-implementare funzionalità già egregiamente fornite da altri software.
Inoltre l’atteggiamento del fondatore del progetto, Lennart Poettering , si dimostra ancora una volta ostile alla segnalazioni delle problematiche di sicurezza. Allo sviluppatore Christian Rebischke , membro del team di sicurezza di Arch Linux che ha proposto la citazione alla suddetta patch nei changelog, Poettering risponde criticando il CVE.
Dal manutentore del software eseguito in PID 1 sulle maggiori distribuzioni Linux ci si aspetterebbe probabilmente un diverso approccio nei confronti degli standard per la segnalazione delle vulnerabilità .
Una reazione simile è stata riscontrata in un’altra recente problematica che ha scatenato l’ilarità della community: se in un file di Unit il valore del parametro User inizia con un numero, questo viene scartato e il processo collegato viene eseguito come root. La segnalazione, in questo caso, è stata immediatamente chiusa poiché per parola di Poettering stesso ciò non costituisce un problema dato che uno username che inizia con un valore numerico non aderisce allo standard POSIX. La risposta, pur condivisibile, non ha portato quindi a riscontri positivi per la risoluzione della problematica: il comportamento più idoneo dovrebbe essere la restituzione di un errore con conseguente blocco dell’esecuzione.
Per queste ed altre ragioni in molti si stanno opponendo all’adozione di systemd riportando in auge il più tradizionale Sysvinit . Un esempio di progetto open-source in tal senso è Devuan , fork di Debian che costituisce ormai un’alternativa matura – e libera da systemd – alla popolare distribuzione Linux.
Patrizio Tufarolo