Dirty Pipe, una delle vulnerabilità più gravi degli ultimi anni in Linux

Recentemente è trapelata online la notizia della scoperta di una nuova vulnerabilità in Linux , classificata come "di elevata gravità", che interessa tutti i kernel dalla versione 5.8 in poi, nonché i sistemi derivati, incluso Android.

Conosciuta come Dirty Pipe, questa tecnica consente di sovrascrivere i dati nei file di sola lettura e può portare a un'escalation dei privilegi iniettando codice nei processi "root".

Sebbene sia già stato corretto nel kernel Linux principale, il bug potrebbe essere utilizzato come arma sotto forma di exploit di escalation dei privilegi su tutti i dispositivi che eseguono il kernel Linux versione 5.8 o successiva.

Significa anche che anche un gruppo di smartphone Android appena rilasciati, come il Samsung Galaxy S22 e Google Pixel 6, sono vulnerabili, fino a quando ogni dispositivo non riceve la patch del kernel appropriata dal rispettivo OEM.

A proposito di tubo sporco

La vulnerabilità è stata scoperta dal ricercatore di sicurezza Max Kellerman e catalogata come (CVE-2022-0847); ci sono voluti alcuni mesi per trovare una prova di concetto di exploit.

La vulnerabilità consente a un utente non privilegiato di iniettare e sovrascrivere dati in file di sola lettura, inclusi i processi SUID eseguiti come root. Il soprannome colloquiale sembra essere un gioco di parole sul famigerato bug Dirty Cow e su un meccanismo di Linux chiamato pipelining per il passaggio di messaggi tra processi, poiché quest'ultimo viene utilizzato durante la procedura di sfruttamento.

Tutto è iniziato un anno fa con un ticket di supporto relativo a file danneggiati. Un cliente si è lamentato del fatto che non è stato possibile decomprimere i registri di accesso scaricati. E in effetti, c'era un file di registro corrotto su uno dei server di registro; potrebbe non essere compresso, ma gzip ha segnalato un errore CRC. Non riuscivo a spiegare perché fosse corrotto, ma presumevo che il processo di divisione notturna si fosse arrestato in modo anomalo e avesse prodotto un file corrotto. Ho corretto manualmente il CRC del file, chiuso il ticket e presto mi sono dimenticato del problema.

Dopo mesi di analisi, il ricercatore ha finalmente scoperto che i file client corrotti erano il risultato di un bug nel kernel Linux. Ha trovato un modo per sfruttare Dirty Pipe per consentire a chiunque avesse un account, inclusi gli account "nobody" con privilegi inferiori, di aggiungere una chiave SSH all'account dell'utente root.

Per attivare la vulnerabilità, Kellerman ha condiviso la sua prova del concetto, l'attaccante deve avere i permessi di lettura. Inoltre, lo scorrimento non deve trovarsi su un limite di pagina, la scrittura non può oltrepassare un limite di pagina e il file non può essere ridimensionato.

Per sfruttare questa vulnerabilità è necessario: creare una pipe, riempire la pipe con dati arbitrari (impostando il flag PIPE_BUF_FLAG_CAN_MERGE su tutte le voci del ring), svuotare la pipe (lasciando il flag impostato su tutte le istanze della struttura pipe_buffer nella struttura dell'anello pipe_inode_info), unire i dati dal file di destinazione (aperto con O_RDONLY) nella pipe appena prima dell'offset di destinazione e scrivere dati arbitrari nella pipe.

Dirty Pipe interessa anche qualsiasi versione di Android basata su una delle versioni vulnerabili del kernel Linux. Poiché Android è così frammentato, i modelli di dispositivi interessati non possono essere tracciati in modo uniforme.

Secondo Kellermann, Google ha integrato la correzione del bug nel kernel Android il mese scorso, subito dopo che il problema era stato risolto con il rilascio delle versioni 5.16.11, 5.15.25 e 5.10.102 del kernel Linux.

Detto questo, probabilmente dovremo aspettare un po' prima che gli OEM inizino a distribuire gli aggiornamenti Android contenenti la correzione. Pixel 6 di Google, ad esempio, è ancora vulnerabile, ma gli utenti avanzati possono mitigare il difetto installando un kernel aftermarket personalizzato con patch come opzione alternativa.

Gli sviluppatori del kernel Linux hanno rilasciato delle correzioni (5.16.11, 5.15.25, 5.10.102) il 23 febbraio, mentre Google ha corretto il kernel Android il 24 febbraio. Kellermann e altri esperti hanno paragonato la vulnerabilità alla CVE-2016-5195 "Dirty Cow" e hanno affermato che è persino più facile da sfruttare.

Infine, se siete interessati ad approfondire l'argomento, potete trovare maggiori dettagli al seguente link.


Aggiungi come fonte preferita in Google