37 Yıllık Bir Mirasın Bedeli: shm_nattch Taşması
Sorunun kaynağı, paylaşımlı bellek ekleme sayacı olan shm_nattch değişkeninin veri tipiyle ilgili. 1988 tarihli orijinal BSD kaynaklarında bu sayaç, maksimum değeri 32.767 olan işaretli 16 bitlik bir short olarak tanımlandı. OpenBSD bu tipi hiçbir zaman genişletmedi. Exploit, 127 paylaşımlı bellek segmenti eşleyip 259 süreç çatallayarak sayacı maksimum değerinin üzerine çıkarıyor ve değerin −32.643'e dönmesine neden oluyor. Bu taşma, shmat(4) ekleme fonksiyonunda yer alıyor ve OpenBSD tarafından bir güvenilirlik düzeltmesi olarak sınıflandırılmıştı; doğrudan güvenlik açığı olarak değil.Çekirdek Kullanım-Sonrası-Serbest Bırakma ve Koruma Atlatma
Tam sayı taşmasının ardından devreye giren ikinci halka, çekirdekteki bir referans sayımı kullanım-sonrası-serbest-bırakma (use-after-free) hatasıdır. Bozulmuş referans sayısı, çekirdeğin diğer süreçlerin hâlâ kullandığı belleği serbest bırakmasına yol açıyor. Bir yarış koşuluyla tetiklenen bu hata, ardından ayrı bir sınır dışı yazma işlemine zemin hazırlıyor: çekirdekteki çok noktaya yayın üyelik sayaçları üzerine yazılıyor. Etkilenen soket kapandığında ortaya çıkan azaltma işlemleri, sayfa tablosu girişlerini değiştiriyor; kullanıcı bellek eşlemesi denetçi erişimine açılıyor ve hem SMAP hem de SMEP korumaları atlatılmış oluyor. Exploit, son adımda lo0 ve enc0 ağ arayüzü işleyicilerindeki öngörülebilir bir çekirdek adresindeki fonksiyon işaretçisinin üzerine yazarak kendi kodunu çalıştırıyor.KARL'ın Sınırları: Bellek Ayırıcılar Rastgele Değil
OpenBSD'nin KARL mekanizması, çekirdek ikili dosyasını yeniden bağlayarak hem fonksiyon hem de veri adreslerini rastgeleleştiriyor. Ancak araştırmacı Andrew Griffiths'in bulgularına göre çekirdeğin bellek ayırıcıları temel adres rastgeleştirmesinden yoksun. Hem önyükleme zamanı hem de en iyi uyum (best-fit) ayırıcıları rastgele taban adres kullanmıyor; bu nedenle lo0 ve enc0 ağ arayüzü işleyicilerindeki fonksiyon işaretçileri de dahil olmak üzere erken önyükleme yapıları, aynı donanım üzerinde yeniden başlatmalar arasında hep aynı adreslerde yer alıyor. Bu durum, exploitin herhangi bir bilgi ifşası açığına gerek duymadan çalışmasını mümkün kılıyor.Yamalar ve Önerilen Ek Sertleştirme Adımları
Calif, açıkları daha önce OpenBSD ekibine bildirdiğini açıkladı. Tam sayı taşması, 14 Eylül'de errata 018 kapsamında yayımlanan bir güvenilirlik yamasıyla giderildi. Zinciri tamamlayan referans sayımı use-after-free hatası ise 30 Eylül'de errata 026 kapsamında bir güvenlik yaması olarak kapatıldı. Her iki yama da syspatch aracılığıyla tüm mimariler için sunuluyor. OpenBSD 7.8 de tam sayı taşması yamasını aldı. Yayım tarihi itibarıyla her iki açık için henüz CVE numarası atanmamış durumda ve açıkların gerçek saldırılarda kullanıldığına dair herhangi bir kanıt bulunmuyor.Calif, mevcut yamalar dışında dört ek sertleştirme kategorisi öneriyor: çekirdek bağlı listeleri için güvenli bağlantı kaldırma (FreeBSD ve NetBSD'nin halihazırda uyguladığı yöntem), sayfa tablosu öz-referans eşlemesinin rastgeleleştirilmesi, çekirdek bellek ayırıcısının rastgeleleştirilmesi ve derleyici tabanlı sınır denetimi. Kavram kanıtı exploit kodu GitHub üzerinde kamuya açık biçimde yayımlandı.

Yazılım ve Uygulamalar
Yazılım ve Uygulamalar
Yazılım ve Uygulamalar
Yorumlar (0)
Yorum yapmak için giriş yapmalısınız.