Una nuova pericolosa vulnerabilità di Linux è in agguato nelle distribuzioni senza patch. Chiamato Dirty Pipe e tracciato come CVE-2022-0847, la vulnerabilità si trova nel kernel (dalla versione 5.8), creando la possibilità per gli attori delle minacce di sovrascrivere dati arbitrari in qualsiasi file di lettura online.
Ciò potrebbe quindi consentire un'acquisizione completa dei sistemi esposti. Il ricercatore Max Kellermann afferma che Dirty Pipe è simile a il difetto della mucca sporca, divulgato in 2016, ma più facile da sfruttare. CVE-2016-5195, noto anche come Dirty Cow e Kernel Local Privilege Escalation, è stato trovato in ogni distribuzione Linux rilasciata negli ultimi nove anni, fino a 2016.
Com'era il tubo sporco (CVE-2022-0847) scoperto?
Ecco come Max Kellermann racconta la storia:
Tutto è iniziato un anno fa con un ticket di supporto sui file corrotti. Un cliente si è lamentato del fatto che i registri di accesso scaricati non potevano essere decompressi. E senza dubbio, c'era un file di registro danneggiato su uno dei server di registro; potrebbe essere decompresso, ma gzip ha segnalato un errore CRC. Non riuscivo a spiegare perché fosse corrotto, ma ho pensato che il processo di divisione notturna si fosse arrestato in modo anomalo e avesse lasciato un file corrotto. Ho corretto manualmente il CRC del file, chiuso il biglietto, e presto dimenticato il problema.
La situazione ha continuato a ripetersi ancora e ancora. Ogni volta che è successo, il contenuto del file sembrerebbe corretto, con solo il CRC alla fine del file sbagliato. Avere a portata di mano diversi file corrotti ha consentito al ricercatore di analizzare più a fondo, scoprendo così un sorprendente modello di corruzione.
Infine, ha scoperto un difetto “nel modo in cui le 'bandiere’ il membro della nuova struttura del buffer della pipe mancava di una corretta inizializzazione nelle funzioni copy_page_to_iter_pipe e push_pipe nel kernel Linux e poteva quindi contenere valori non aggiornati,” come riassunto dai ricercatori Red Hat in un avviso separato.
Di conseguenza, un utente locale senza privilegi potrebbe sfruttare il difetto per scrivere su pagine nella cache della pagina supportate da file di sola lettura, creando una condizione di escalation dei privilegi. Il nome, Tubo sporco, deriva da pipeline, che nei sistemi operativi per computer simili a Unix è un meccanismo per la comunicazione tra processi tramite il passaggio di messaggi. In tal senso, una pipeline è un insieme di processi concatenati insieme dai loro flussi standard, in modo che il testo di output di ogni processo (normale) viene passato direttamente come input (stdin) al prossimo, secondo Wikipedia. https://en.wikipedia.org/wiki/Pipeline_(Unix)
Come si può sfruttare la vulnerabilità dei tubi sporchi?
Kellermann afferma che lo sfruttamento del difetto CVE-2022-0847 richiede i seguenti passaggi:
1.Crea una pipa.
2.Riempi il tubo con dati arbitrari (per impostare il flag PIPE_BUF_FLAG_CAN_MERGE in tutte le voci dell'anello).
3.Svuotare il tubo (lasciando il flag impostato in tutte le istanze struct pipe_buffer sullo struct pipe_inode_inforing).
4.Unisci i dati dal file di destinazione (aperto con O_RDONLY) nel tubo appena prima dell'offset target.
5.Scrivi dati arbitrari nella pipe; questi dati sovrascriveranno la pagina del file memorizzato nella cache invece di creare una nuova struttura anomala pipe_buffer perché PIPE_BUF_FLAG_CAN_MERGE è impostato.
Questo sfruttamento funziona anche con file immutabili su snapshot btrfs di sola lettura e su mount di sola lettura (compresi i supporti per CD-ROM). “Questo perché la cache della pagina è sempre scrivibile (dal nocciolo), e la scrittura su una pipe non controlla mai i permessi,” ha aggiunto Kellermann.
Il ricercatore ha anche creato e condiviso il suo codice di prova.
La vulnerabilità è già stata corretta nelle versioni Linux 5.16.11, 5.15.25, e 5.10.102. Google ha anche rilasciato correzioni per il kernel Android a febbraio 24, 2022.
È interessante notare che ieri, Marzo 7, di cui abbiamo scritto un altro grave problema del kernel Linux, che avrebbe potuto essere abusato per sfuggire a un contenitore al fine di eseguire comandi arbitrari sull'host. La vulnerabilità è tracciata come CVE-2022-0492, ed è stato dettagliato dall'Unità di Palo Alto 42 Ricercatori di reti.