Zephyrnet Logosu

“Dirty Pipe” Linux çekirdek hatası, herkesin herhangi bir dosyaya yazmasına izin verir

Tarih:

Alman içerik yönetimi yazılımı yaratıcıları CM4all için kodlayıcı ve güvenlik araştırmacısı olan Max Kellermann, kısa süre önce bir büyüleyici rapor yakın zamanda yamalanan bir Linux çekirdeği hatası hakkında.

Güvenlik açığını aradı kirli boru, çünkü gerçek bir Linux ile güvenli olmayan etkileşimi içerir. dosya (diske kalıcı olarak kaydedilmiş olan) ve bir Linux boru, bir dosya gibi kullanılabilen, yalnızca bellek içeren bir veri arabelleğidir.

Çok büyük ölçüde basitleştirilmiş, eğer yazmanıza izin verilen bir borunuz ve izniniz olmayan bir dosyanız varsa…

…o zaman, bazen, borunun bellek arabelleğine yazmak, istemeden çekirdeğin geçici bellek içi kopyalarını da değiştirebilir. önbellek sayfaları – disk dosyasının çeşitli bölümlerinden.

Can sıkıcı bir şekilde, dosya işletim sisteminin kendisi tarafından "salt okunur" olarak işaretlense bile, temel çekirdek önbelleğini değiştirmek "yazma" olarak kabul edilir.

Sonuç olarak, değiştirilmiş önbellek arabelleği, uygulanan herhangi bir işletim sistemi izinlerine rağmen, depolanan dosyanın içeriğini kalıcı olarak güncelleyerek, çekirdek tarafından diske geri gönderilir.

Fiziksel olarak yazılamaz bir dosya, örneğin bir CD-ROM'daki veya yazma etkinleştirme anahtarı kapalı olan bir SD karttaki dosya, bozuk önbellek arabellekleri çekirdek tarafından bellekte tutulduğu sürece değiştirilmiş gibi görünecektir.

Hangi sürümler etkilenir?

Kellermann, Linux çalıştıran ve peşine düşmek ve yama yapılıp yapılmadığını kontrol etmek isteyenler için, bu hatanın (en azından mevcut, kolayca kullanılabilir biçiminde) çekirdek 5.8'de tanıtıldığını bildiriyor.

Bu, resmi olarak desteklenen üç çekirdek çeşidinin kesinlikle risk altında olduğu anlamına gelir: 5.10, 5.15 ve 5.16.

Hata yamalandı 5.10.102, 5.15.25 ve 5.16.11, bu nedenle, bunlardan birinde veya daha üstünde bir sürümünüz varsa, sorun yok.

Görünüşe göre, Android de etkileniyor ve güvenlik açığı için bir düzeltme eklenmiş olsa da, çekirdek kaynak kodu 2022-02-24 tarihinde, ne Google'ın Android Güvenlik Bülteni Mart 2022ne de şirketin Piksele özel notlar, bu hatadan bahsedin, şimdi dublajlı CVE-2022-0847.

Şimdiye kadar incelediğimiz resmi olarak desteklenen birçok Android telefondan yalnızca Pixel 6 serisi çekirdek 5.10 kullanıyor gibi görünüyor ve çoğu cihaz eski ama görünüşte savunmasız olmayan Linux 5.4 veya 4'ten birinde geri döndü. x sürümleri.

Kullanıcı dostu günlük dosyaları

İlginç bir şekilde, Kellermann, şirketinin ağındaki HTTP günlük dosyalarının aralıklı olarak bozulmasından kaynaklanan güvenlik açığını keşfetti.

Düzenli olarak günlük günlük dosyalarını alacak, Unix dostu gzip yardımcı programı kullanılarak sıkıştırılacak ve bunları müşterilerin indirmesi için Windows dostu ZIP biçiminde aylık günlük dosyalarına dönüştürecek bir sunucu işlemine sahipti.

ZIP dosyaları, gzip sıkıştırmasını dahili olarak destekler ve genellikle kullanır, böylece ham gzip dosyaları, ZIP tarzı kontrol verileri dosyanın başına ve sonuna eklendiği sürece, bir ZIP arşivi içindeki ayrı bileşenler olarak gerçekten kullanılabilir ve her dahili gzip'li yığın arasında.

Böylece, hem zamandan hem de CPU gücünden tasarruf etmek için Kellermann, her müşteri için her günün günlük dosyasını geçici olarak açmaktan kaçınabildi, yalnızca onu hemen her şey dahil ZIP dosyasına yeniden sıkıştırmak için.

Sonunda, hepsi bir arada ZIP arşivini dışa aktarabileceği yazılabilir bir Linux kanalı yarattı ve ardından sırayla her gzip dosyasından okuyarak bunları çıktı borusuna gereken şekilde birer birer gönderdi. doğru noktalara yerleştirilmiş başlıklar ve römorklar.

Ekstra verimlilik için özel Linux işlevini kullandı splice()çekirdeğe bir dosyadan veri okumasını ve bir boruya yazmasını söyleyen doğrudan çekirdek belleğinden, geleneksel bir ek yükü önleyen read()-ve daha sonra-write() döngü.

Geleneksel dili kullanarak okuma ve yazma read() ve write() işlevler, verileri çekirdekten kullanıcı tarafından atanan bir bellek arabelleğine kopyalamak ve ardından bu arabelleği doğrudan çekirdeğe kopyalamak anlamına gelir, böylece veriler süreçte değiştirilmese bile bellekte en az iki kez kopyalanır. Bu ek yükü önlemek için, splice() ve eşlik işlevi sendfile() programcılar verileri değiştirilmeden iki dosya sistemi nesnesi arasında taşımak istediklerinde kullanılmak üzere Linux'a tanıtıldı. Meşgul bir sunucudaki büyük dosyalar için bu daha hızlıdır ve yükü azaltır.

Bozuk baytlar, her seferinde 8

Ancak bazen Kellermann, yalnızca bu dosyalardan okuyor olsa bile, orijinal gzip dosyalarından birinin son 8 baytının bozulacağını fark ederdi.

Tüm çıktısı, birleşik ZIP dosyasını oluşturmak için kullanılan yazılabilir "çıkış borusuna" gidiyordu.

Kodunda, “salt okunur” olarak açılan ve bu nedenle işletim sistemi tarafından zaten korunması gereken giriş dosyalarının herhangi birine yazmaya bile çalışan hiçbir şey yoktu.

Bulduğu bir anlatı, bozuk 8 baytın neredeyse her zaman herhangi bir ayın son gzip dosyasında ortaya çıktığı ve her zaman olduğuydu. 50 4B 01 02 1E 03 14 00 onaltılı.

Tehdit araştırmacıları tanıyacak 50 4B 01 02 hemen, çünkü 50 4B olarak çıkıyor PK ASCII karakterlerinde, kısaltması Phil Katz, ZIP dosya formatının yaratıcısı.

ZIP dosyalarını içeren kötü amaçlı yazılım analizinde de yaygın olarak görülen bu baytlardır. 01 02 hemen sonra PK – “Arşiv sonu ZIP fragmanındaki bir veri bloğunun bundan sonra geldiğini” belirten özel bir işaretçidir.

baytlar 1E 03, durumunda merak ediyorsun, dosyanın Unix benzeri bir sistemde (0x03), zip dosyası belirtimi 3 (0x1E ondalık olarak 30'dur, sürüm 3 olarak yorumlanır) izlenerek oluşturulduğunu belirtir. bu 14 00 bundan sonra, sıkıştırmayı açmak için PKZIP 2.0 veya sonraki bir sürümünün gerekli olduğunu belirtir (0x14, ondalık olarak 20'dir, 2.0 olarak yorumlanır).

Başka bir deyişle, Kellerman, ara sıra "salt okunur" gzip dosyalarının en sonuna sızan verilerin her zaman yazılabilir, hepsi bir arada ZIP'sinin sonuna eklediği ek verilerin başlangıcı olduğunu çıkarabildi. dosya.

Ancak kendi şifresini ne kadar dikkatle incelerse okusun, bu yozlaşmayı kendi böceği ile istese de nasıl yapabildiğini göremiyordu.

Sonuçta, hatanın yan etkisi, yazılımının 8 baytı bozmasıydı.
bir dosyanın sonunda, çekirdeğin kendisinin yine de yazmayı durdurması gerekiyordu.

O gibi duygularını yazıyor zamanında:

Veri bozulması için Linux çekirdeğini (yani başka birinin kodunu) suçlamak son çare olmalıdır. Bu pek olası değil. Çekirdek, binlerce kişi tarafından kaotik görünebilecek yöntemlerle geliştirilen son derece karmaşık bir projedir; buna rağmen, son derece kararlı ve güvenilirdir. Ama bu sefer, bunun bir çekirdek hatası olması gerektiğine ikna oldum.

Ancak azimle, sırasıyla yalnızca üç ve beş satır kodla, hatalı davranışı yalnızca çekirdeğe suçlanabilecek şekilde yeniden üreten iki minimalist program oluşturmayı başardı.

Bunu takiben, ayrıcalığı olmayan bir kullanıcının güvenilir SSH anahtarları listeniz veya "iyi olduğu bilinen" dijital imzaların listesi gibi iyi kilitlenmiş bir dosyayı bile değiştirmesine izin veren bir kavram kanıtı saldırısı oluşturmayı başardı. güncellemeler için bağlanmaya hazır.

Daha da kötüsü, düşük seviyeli doğası göz önüne alındığında, bu hatanın sanallaştırılmış bir kap içinde (çalışan herhangi bir programın "korumalı alanı" veya "hapishanesi" dışındaki herhangi bir nesneye yazma erişimine sahip olmadığı) değişiklik yapmak için kullanılabilir gibi görünüyor. genellikle sınırların dışında olacak dosyalar.

Tabii ki iyi haber şu ki, Kellermans'ın dikkatli kazısı yalnızca böceğin ortaya çıkarılmasına ve sebebinin anlaşılmasına değil, aynı zamanda topluluğun deliği kapatmak için bir yama tasarlamasına yardımcı oldu.

Ne yapalım?

  • Linux 5.x kullanıcısıysanız. Çekirdek sürümünüzü kontrol edin. İstediğiniz 5.10.102, 5.15.25 or 5.16.11 (ya da üzerinde). Dağıtımınız, kendi güvenlik düzeltme ekleri "desteklenen" eski çekirdek sürümlerini kullanıyorsa, ayrıntılar için dağıtım oluşturucunuza danışın. Aksi takdirde, sadece komutu çalıştırın uname -r çekirdek sürümünüzü yazdırmak için.
  • Android kullanıcısıysanız. Çeşitli ürünler ve satıcılar tarafından kullanılan çekirdek sürümlerinin çeşitliliği göz önüne alındığında, [2022-03-08T17:00Z] yazarken size ne söyleyeceğimizi tam olarak bilmiyoruz. Şimdiye kadar, 5.10 çekirdeğine sahip olduğunu bildiğimiz tek ana cihaz, görünüşe göre 6'te Google Pixel 5.10.43 serisidir ve en son bu hata için bir düzeltmeden söz edilmemiştir. Piksel Güncelleme Bülteni. Diğer birkaç cihaz (örn. Google Pixel 5), çekirdek 5.4'te, Google'dan ve diğer satıcılardan geri kalanların çoğu hala 4.x sürümünde. Çekirdek sürümünüzü adresinde görüntüleyebilirsiniz. Ayarlar > Telefon hakkında > Android sürümü > Çekirdek sürümü – 5.10'daysanız, gözünüzü dörtte ayırmanızı öneririz. Android Güvenlik Bültenleri genel bakış sayfası.
  • Böcek avlayan bir programcıysanız. Aksi halde açıklanamayan davranışların izini sürerken, yapabileceğiniz en küçük “tekrar”ı yaratma sanatını geliştirin – bu, başkalarının daha kolay araştırabilmesi için yanlış davranışı güvenilir bir şekilde yeniden üreten kod için kullanılan jargon terimidir. Hata avlama denklemini başka birine teslim etmeden önce mümkün olduğunca çok sayıda olası değişkeni ve belirsizliği ortadan kaldırın. Bunun için size teşekkür edecekler.

spot_img

En Son İstihbarat

spot_img