Vulnerabilità in u kernel Linux chì pò tampà i schedari di sola lettura

Una vulnerabilità hè stata identificata in u kernel Linux (CVE-2022-0847) chì permette à u cuntenutu di a cache di a pagina per esse sovrascritti per qualsiasi schedari, cumpresi quelli in modu di sola lettura, aperti cù a bandiera O_RDONLY, o situati in sistemi di schedari. muntatu in modu di sola lettura. In termini pratichi, a vulnerabilità puderia esse aduprata per inject code in prucessi arbitrarii o dati corrupti in i schedari aperti. Per esempiu, pudete cambià u cuntenutu di u schedariu authorized_keys per u prucessu sshd. Un prototipu di sfruttamentu hè dispunibule per a prova.

U prublema hè statu chjamatu Dirty Pipe, simile à a vulnerabilità critica Dirty COW identificata in 2016. Hè nutatu chì in quantu à u livellu di periculu, Dirty Pipe hè à u listessu livellu di Dirty COW, ma hè assai più faciule d'operare. A vulnerabilità hè stata identificata durante l'analisi di lagnanza nantu à a corruzzione periodica di i fugliali scaricati nantu à a reta in un sistema chì scaricava l'archivi compressi da un servitore di log (37 corruptions in 3 mesi nantu à un sistema caricatu), a preparazione di quale hà utilizatu l'operazione splice () e pipi senza nome.

A vulnerabilità appare cumincendu cù u kernel Linux 5.8, liberatu in Aostu 2020, i.e. presente in Debian 11, ma ùn affetta micca u kernel di basa in Ubuntu 20.04 LTS. I kernels RHEL 8.x è openSUSE/SUSE 15 sò inizialmente basati in vechji rami, ma hè pussibule chì u cambiamentu chì causa u prublema hè statu retroportatu in elli (ùn ci hè ancu micca dati precisi). Pudete seguità a publicazione di l'aghjurnamenti di pacchetti in distribuzioni in queste pagine: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Una correzione per a vulnerabilità hè stata pruposta in i versioni 5.16.11, 5.15.25 è 5.10.102. A correzione hè ancu inclusa in u kernel utilizatu in a piattaforma Android.

A vulnerabilità hè causata da a mancanza di inizializazione di u valore "buf->flags" in u codice di e funzioni copy_page_to_iter_pipe() è push_pipe(), malgradu u fattu chì a memoria ùn hè micca sguassata quandu si attribuisce una struttura è durante certe manipulazioni cù pipi senza nome, un valore da un'altra operazione. Utilizendu sta funzione, un utilizatore locale senza privilegiu pò ottene l'apparizione di u valore PIPE_BUF_FLAG_CAN_MERGE in a bandiera, chì vi permette di urganizà a sovrascrittura di dati in a cache di a pagina semplicemente scrivendu novi dati à una pipa senza nome preparata apposta.

Per un attaccu, u schedariu di destinazione deve esse leghjite, è postu chì i diritti d'accessu ùn sò micca verificati quandu scrivite à u pipe, a rimpiazzamentu in a cache di a pagina pò ancu esse fatta per i schedarii situati in partizioni muntati in sola lettura (per esempiu, per i schedarii c CD- ROM). Dopu avè rimpiazzatu l'infurmazioni in a cache di a pagina, quandu leghje e dati da un schedariu, u prucessu ùn riceve micca i dati attuali, ma i dati rimpiazzati.

U funziunamentu si riduce à creà un canali senza nome è riempie cù dati arbitrarii per assicurà chì a bandiera PIPE_BUF_FLAG_CAN_MERGE hè stallata in tutte e strutture di l'anellu assuciatu cù questu. In seguitu, i dati sò letti da u canali, ma a bandiera ferma in tutti i casi di a struttura pipe_buffer in e strutture di ring pipe_inode_info. Una chjama à splice () hè allora fatta per leghje e dati da u schedariu di destinazione in una pipa senza nome, partendu da l'offset desideratu. Quandu scrivite dati à questa pipa senza nome, per via di a bandiera PIPE_BUF_FLAG_CAN_MERGE chì hè stata stabilita, i dati in a cache di a pagina seranu soprascritti invece di creà una nova istanza di a struttura pipe_buffer.

Source: opennet.ru

Add a comment