Kerentanan dalam kernel Linux yang membenarkan kerosakan fail baca sahaja

Kerentanan telah dikenal pasti dalam kernel Linux (CVE-2022-0847) yang membenarkan kandungan cache halaman ditimpa untuk mana-mana fail, termasuk yang dalam mod baca sahaja, dibuka dengan bendera O_RDONLY, atau terletak pada sistem fail dipasang dalam mod baca sahaja. Dari segi praktikal, kelemahan boleh digunakan untuk menyuntik kod ke dalam proses sewenang-wenangnya atau data yang rosak dalam fail yang dibuka. Sebagai contoh, anda boleh menukar kandungan fail authorized_keys untuk proses sshd. Prototaip eksploitasi tersedia untuk ujian.

Masalahnya telah diberi kod Dirty Pipe, serupa dengan kelemahan kritikal Dirty COW yang dikenal pasti pada 2016. Adalah diperhatikan bahawa dari segi tahap bahaya, Dirty Pipe berada pada tahap yang sama dengan Dirty COW, tetapi lebih mudah untuk dikendalikan. Kerentanan telah dikenal pasti semasa analisis aduan tentang rasuah berkala fail yang dimuat turun melalui rangkaian dalam sistem memuat turun arkib termampat dari pelayan log (37 rasuah dalam 3 bulan pada sistem yang dimuatkan), penyediaannya menggunakan operasi splice() dan paip yang tidak dinamakan.

Kerentanan muncul bermula dengan kernel Linux 5.8, dikeluarkan pada Ogos 2020, i.e. hadir dalam Debian 11, tetapi tidak menjejaskan kernel asas dalam Ubuntu 20.04 LTS. Inti RHEL 8.x dan openSUSE/SUSE 15 pada mulanya adalah berdasarkan pada cawangan lama, tetapi ada kemungkinan perubahan yang menyebabkan masalah telah dibalikkan ke dalamnya (belum ada data yang tepat). Anda boleh menjejaki penerbitan kemas kini pakej dalam pengedaran pada halaman ini: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Pembetulan untuk kelemahan telah dicadangkan dalam keluaran 5.16.11, 5.15.25 dan 5.10.102. Pembaikan juga disertakan dalam kernel yang digunakan dalam platform Android.

Kerentanan ini disebabkan oleh kekurangan permulaan nilai "buf->flags" dalam kod fungsi copy_page_to_iter_pipe() dan push_pipe(), walaupun pada hakikatnya memori tidak dibersihkan apabila memperuntukkan struktur dan semasa manipulasi tertentu dengan paip yang tidak dinamakan, nilai daripada operasi lain. Dengan menggunakan ciri ini, pengguna tempatan yang tidak mempunyai hak istimewa boleh mencapai penampilan nilai PIPE_BUF_FLAG_CAN_MERGE dalam bendera, yang membolehkan anda mengatur penggantian data dalam cache halaman dengan hanya menulis data baharu pada paip tidak bernama yang disediakan khas.

Untuk serangan, fail sasaran mesti boleh dibaca, dan memandangkan hak akses tidak ditanda semasa menulis ke paip, penggantian dalam cache halaman juga boleh dibuat untuk fail yang terletak dalam partition yang dipasang baca sahaja (contohnya, untuk fail c CD- ROM). Selepas menggantikan maklumat dalam cache halaman, apabila membaca data daripada fail, proses akan menerima bukan data sebenar, tetapi data yang diganti.

Operasi bermula untuk mencipta saluran yang tidak dinamakan dan mengisinya dengan data sewenang-wenangnya untuk memastikan bendera PIPE_BUF_FLAG_CAN_MERGE ditetapkan dalam semua struktur gelang yang dikaitkan dengannya. Seterusnya, data dibaca dari saluran, tetapi bendera tetap ditetapkan dalam semua keadaan struktur pipe_buffer dalam struktur cincin pipe_inode_info. Panggilan ke splice() kemudian dibuat untuk membaca data daripada fail sasaran ke dalam paip yang tidak dinamakan, bermula pada offset yang dikehendaki. Apabila menulis data ke paip yang tidak dinamakan ini, disebabkan bendera PIPE_BUF_FLAG_CAN_MERGE ditetapkan, data dalam cache halaman akan ditimpa dan bukannya membuat contoh baharu bagi struktur pipe_buffer.

Sumber: opennet.ru

Tambah komen