Linux çekirdeğinde salt okunur dosyaların bozulmasına izin veren güvenlik açığı

Linux çekirdeğinde (CVE-2022-0847), salt okunur modda olanlar, O_RDONLY bayrağıyla açılanlar veya dosya sistemlerinde bulunanlar da dahil olmak üzere herhangi bir dosya için sayfa önbelleği içeriğinin üzerine yazılmasına izin veren bir güvenlik açığı belirlendi (CVE-XNUMX-XNUMX) salt okunur modda monte edilmiştir. Pratik anlamda güvenlik açığı, rastgele işlemlere kod enjekte etmek veya açılan dosyalardaki verileri bozmak için kullanılabilir. Örneğin sshd işlemi için yetkili_keys dosyasının içeriğini değiştirebilirsiniz. Test için bir istismar prototipi mevcuttur.

Sorun, Dirty COW'un 2016'da belirlediği kritik güvenlik açığına benzer şekilde Dirty Pipe olarak kodlandı. Tehlike seviyesi açısından Dirty Pipe'ın Dirty COW ile aynı seviyede olduğu ancak kullanımının çok daha kolay olduğu belirtiliyor. Güvenlik açığı, hazırlanmasında splice() işleminin kullanıldığı, bir günlük sunucusundan sıkıştırılmış arşivleri yükleyen bir sistemde ağ üzerinden indirilen dosyaların periyodik olarak bozulmasına ilişkin şikayetlerin analizi sırasında tespit edildi (yüklü bir sistemde 37 ayda 3 bozulma) ve isimsiz borular.

Güvenlik açığı, Ağustos 5.8'de piyasaya sürülen Linux çekirdeği 2020'den itibaren ortaya çıkıyor. Debian 11'de mevcuttur ancak Ubuntu 20.04 LTS'deki temel çekirdeği etkilemez. RHEL 8.x ve openSUSE/SUSE 15 çekirdekleri başlangıçta eski dallara dayanmaktadır, ancak soruna neden olan değişikliğin onlara geri aktarılmış olması mümkündür (henüz kesin bir veri yoktur). Paket güncellemelerinin dağıtımlardaki yayınlarını şu sayfalardan takip edebilirsiniz: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. 5.16.11, 5.15.25 ve 5.10.102 sürümlerinde güvenlik açığına yönelik bir düzeltme sağlandı. Düzeltme aynı zamanda Android platformunda kullanılan çekirdeğe de dahil edilmiştir.

Güvenlik açığı, bir yapı tahsis edilirken ve belirli manipülasyonlar sırasında belleğin temizlenmemesine rağmen, copy_page_to_iter_pipe() ve Push_pipe() işlevlerinin kodunda "buf->flags" değerinin başlatılmamasından kaynaklanmaktadır. adsız kanallar, başka bir işlemden gelen bir değer. Bu özelliği kullanarak, ayrıcalıksız bir yerel kullanıcı, bayrakta PIPE_BUF_FLAG_CAN_MERGE değerinin görünümünü elde edebilir; bu, özel olarak hazırlanmış adsız bir kanala yalnızca yeni veriler yazarak sayfa önbelleğindeki verilerin üzerine yazmayı düzenlemenize olanak tanır.

Bir saldırı için hedef dosyanın okunabilir olması gerekir ve kanala yazarken erişim hakları kontrol edilmediğinden, sayfa önbelleğinde değişiklik, salt okunur olarak monte edilen bölümlerde bulunan dosyalar için de yapılabilir (örneğin, CD-C dosyaları için). ROM). Sayfa önbelleğindeki bilgileri değiştirdikten sonra, bir dosyadan veri okurken işlem gerçek verileri değil, değiştirilen verileri alacaktır.

Operasyon, PIPE_BUF_FLAG_CAN_MERGE bayrağının kendisiyle ilişkili tüm halka yapılarında ayarlandığından emin olmak için isimsiz bir kanal oluşturmaya ve onu isteğe bağlı verilerle doldurmaya dayanır. Daha sonra veriler kanaldan okunur ancak bayrak, pipe_inode_info halka yapılarındaki pipe_buffer yapısının tüm örneklerinde ayarlı kalır. Daha sonra hedef dosyadaki verileri istenen konumdan başlayarak isimsiz bir kanala okumak için splice() çağrısı yapılır. Bu isimsiz kanala veri yazarken, PIPE_BUF_FLAG_CAN_MERGE bayrağının ayarlanması nedeniyle, pipe_buffer yapısının yeni bir örneğini oluşturmak yerine sayfa önbelleğindeki verilerin üzerine yazılacaktır.

Kaynak: opennet.ru

Yorum ekle