15 yıllık güvenlik açıklarının tehlikeleri

Sıradan bir Python modülünün geliştiricileri kısa süre önce eski ve yamalanmamış güvenlik açıklarının neden tehlikeli olabileceğini keşfetti.

Eylül 2022’de Trellix, Python programlama dilinin standart kitaplığının bir parçası olan ve herkes tarafından kullanılabilen tarfile modülündeki güvenlik açığına dair bir rapor yayınladı. Güvenlik açığı, sabit diskte istenen klasöre istenen dosyanın yazılmasına ve bazı durumlarda kötü amaçlı kod yürütülmesine olanak sağlıyor. Bu çalışmayı dikkat çekici kılansa tarfile modülündeki bu sorunun 15 yıl önce, Ağustos 2007’de keşfedilmiş olması! Ne var ki o zamanlar tehlikeli olduğu düşünülmemiş. Neden tehlikeli bulunmadığını ve bunun sonucunda Python geliştiricilerinin ve kullanıcılarının ne tür sorunlarla karşılaşabileceğini birlikte keşfedelim.

Ayrıntılarıyla tarfile

Tarfile, tar arşivleriyle çalışmaya yönelik kodu içeriyor. Tarihi 1979’a kadar dayanan bu format, Unix benzeri işletim sistemlerinde yaygın olarak kullanılıyor. Tar, yüksek sayıda dosyayı ve klasörü saklamanın basit bir yolu. İlk zamanlar manyetik bantlara yedek yazmak için kullanılıyordu. Günümüzde ise tar arşivleri opsiyonel olarak dosya sıkıştırma da kullanabiliyor. Bu tür arşivleri oluşturmak ve açmaktan ise tarfile sorumlu. Python geliştiricileri tarfile’ı bu tür işlerde hazır bir araç olarak kullanıyor.

Tarfile’daki güvenlik açığı ise oldukça basit. Ağustos 2007’deki orijinal hata raporunda oldukça ayrıntılı şekilde açıklanmıştı. Aslına bakılırsa tam olarak bir güvenlik açığı bile sayılmaz; durum yalnızca tarfile’ın arşiv açıldığı zaman arşivdeki klasör yapısını birebir şekilde yeniden oluşturmasından ibaret. Arşivdeki dosya adının “../../../../../etc/passwd” gibi olduğu durumlar da buna dahil. Sistem yöneticisi olarak bu tür bir arşivi açarsanız passwd dosyası arşivin bulunduğu dizine yazılmıyor. Arşivi açan kişi dosya yolundaki /../ öğelerini izlerken önce kök dizine ulaşıyor, ardından /etc dizinindeki passwd dosyasının üzerine yazıyor. Linux’te bu, tüm sistem kullanıcılarının verilerini saklayan normal dosyayı silmek anlamına geliyor.

Buradaki tehlike şu: Tarfile modülünü kullanan bir programın kullanıcısı, normal bir arşivin normal açılışının nasıl biteceğini bilmiyor. Hiçbir şey olmayabilir, bazı dosyalar beklenmedik bir yerden çıkabilir ya da bazı kullanıcı dosyalarının üzerine yazılabilir. Hata raporunun yazarı, tar arşivcisinin kendisinde bu hatanın 20 yıldan uzun süre önce, 2001’de düzeltildiğinden bahsediyor. Ancak güvenlik açığı tarfile’da hiç kapatılmamış.

15 yıllık bekleyiş

2007’de potansiyel hata tartışıldıktan sonra iki sebeple hiçbir şey yapılmamasına karar verilmiş. Birincisi, bu tür bir dosya işleme Unix POSIX standardıyla tamamen uyumlu (bunu doğrulayabiliriz). İkinicisi, “pratikte kötüye kullanım olasılığı yok”. Kullanıcı rehberine güvenilir olmayan kaynaklardan gelen dosyaları tarfile kullanarak açmanın tavsiye edilmediğini yazmak yeterli bulunmuş.

2022’de Trellix pratikte kötüye kullanımın mümkün olduğunu kanıtlayınca bu değerlendirmenin yanlış olduğu ortaya çıktı. Üstelik yalnızca istenen yere veri yazmakla kalınmıyor, aynı zamanda istenen kod da yürütülebiliyor. Bunun programcılar için bir kitaplık olduğunu unutmayın; yani, saldırı olasılığı, tarfile modülünün kullanıldığı yazılıma bağlı. Trellix iki örnek veriyor.

Universal Radio Hacker’da güvenlik açığı bulunan koddan bir kesit. Kaynak.

Birincisi, bilinmeyen kablosuz protokolleri analiz etmeye yönelik bir program olan Universal Radio Hacker. Program verileri projeler biçiminde kaydediyor; bu projeler tar ile paketlenmiş birden çok dosyadan oluşuyor. Araştırmacılar, önceden yapılmış bir arşivi açma girişimi sonucunda yürütülebilir bir dosyanın Windows otomatik yürütme dizininine nasıl yazılabildiğini ortaya koymuş. Bu sayede sistem bir sonraki defa yeniden başlatıldığında bu kod yürütülüyor. Bu güvenlik açığı, diğer pek çok şeyin yanı sıra, farklı platformda da kötüye kullanılabilir.

https://www.youtube.com/watch?v=jqs8S51_ENg

Videoda gösterilen ikinci örnek biraz daha karmaşık. Spyder IDE geliştirme ortamı verileri tar arşivlerinde depoluyor. Araştırmacılar bu verileri içe aktarırken önce dosyayı sisteme yerleştirme deneyini tekrar etmiş, fakat ardından daha da etkileyici bir şey yapmışlar: Spyder bir sonraki kez başlatıldığında istenen kodun yürütülmesini programlamışlar. Bu deneyin sonucu ise istenen kodun o anda sistem yöneticisi ayrıcalıklarıyla yürütülmesi isteği olmuş.

Öngörülemeyen sonuçlar

15 yıllık bu hatanın hikayesi, kuralına uygun ols ve kötüye kullanım yolları açık olmasa bile herhangi bir yere veri yazmaya olanak sağlayan güvenlik açıklarını asla hafife almamak gerektiğini bir kez daha gösteriyor.

Standart Python kitaplığının bir parçası olan tarfile, (başka sistemlerin de yanı sıra) neredeyse tüm Linux tabanlı sistemlerde bulunuyor. Ancak tehlike, güvenlik açığı bulunan belirli bir fonksiyonda. Genel olarak söylemek gerekirse, Python’da geliştirilen ve bir tarfile modülü kullanan tüm projeler birer güvenlik açığı. Son kullanıcı açısından bakıldığında bu biraz çetrefilli bir durum; potansiyel olarak güvenliği açığı bulunan ve tar kullandığını bile bilmedikleri bir program çalıştırıyor olabilirler. Kaspersky uzmanları şunları öneriyor:

  • Güvenilir olmayan kaynaklardan dosyaların işlenmesini sınırlandırın;
  • saldırı fırsatını en aza indirmek için üçüncü taraf programları en az ayrıcalıkla yürütün;
  • güvenlik açığı bulunan fonksiyonu kullanan programları belirlemek için kritik sistemlerde kullanan yazılımları denetime sokun.

Geliştiriciler ise bu sorun, güvenlik açığı bulunan bir fonksiyona çağrı olup olmadığını görmek ve gerekli düzeltmeleri yapmak üzere kendi kodlarını denetlemek için iyi bir sebep.

İpuçları