Konuyu Açan
#1
Giriş ve Temel Kavramlar
Python projelerinde sıkça kullanılan zip dosyalarını işlerken, "zip slip" adı verilen ciddi bir güvenlik açığıyla karşılaşmak mümkündür. Bu açık, kötü niyetli bir kullanıcının zip arşivleri içindeki dosya yollarını manipüle ederek, sistemde istenmeyen dizinlere veya kritik dosyalara erişim sağlamasına imkan tanır. Özellikle, zip arşivleri otomatik olarak açılırken veya içeriği okunurken bu açık devreye girebilir.
Zip Slip Açığının İşleyişi
Zip slip, temel olarak arşivdeki dosya yollarının normalize edilmeden veya uygun kontroller yapılmadan doğrudan dosya sistemine yazılmasıyla oluşur. Örneğin, bir zip dosyası içerisinde aşağıdaki gibi bir giriş yer alabilir:
"../../../../etc/passwd" veya "..\\..\\..\\..\\Windows\\system32\\config\\sam" gibi.
Bu yollar, dizin kırma (directory traversal) saldırıları gerçekleştirerek, hedef sistemde kritik konumlara erişim sağlar. Python'da
Korunma Yöntemleri ve En İyi Uygulamalar
Zip slip açığını önlemek için birkaç temel güvenlik önlemi alınabilir:
[list] Dosya yolunu normalize etme:
Güvenli listeleme ve filtreleme: Dosya adlarını ve yollarını açmadan önce, belirli güvenlik kriterlerine göre filtrelemek gerekir. Örneğin, sadece belirli alt dizinlere izin vermek veya zararlı karakterleri engellemek.
Hedef dizini sınırlandırma: Dosyaların açılacağı veya kopyalanacağı dizini sabit ve kontrol altında tutmak. Bu sayede, arşivdeki herhangi bir giriş, başka bir konuma sızmaya çalışsa bile, izin verilen dizin sınırlarını aşamaz.
Kod örneğiyle güvenlik uygulaması:
Burada,
Sonuç ve Değerlendirme
Python'da zip slip açığı, uygun önlemler alınmadığında ciddi güvenlik riskleri doğurabilir. Dosya yolu manipülasyonlarına karşı katı kontroller ve güvenlik pratikleri uygulamak, sisteminizi bu tür saldırılardan koruyabilir. Bu nedenle, arşiv içeriğiyle çalışırken her zaman yol temizliği ve sınırlandırma yöntemlerini kullanmak kritik önem taşır.
Python projelerinde sıkça kullanılan zip dosyalarını işlerken, "zip slip" adı verilen ciddi bir güvenlik açığıyla karşılaşmak mümkündür. Bu açık, kötü niyetli bir kullanıcının zip arşivleri içindeki dosya yollarını manipüle ederek, sistemde istenmeyen dizinlere veya kritik dosyalara erişim sağlamasına imkan tanır. Özellikle, zip arşivleri otomatik olarak açılırken veya içeriği okunurken bu açık devreye girebilir.
Zip Slip Açığının İşleyişi
Zip slip, temel olarak arşivdeki dosya yollarının normalize edilmeden veya uygun kontroller yapılmadan doğrudan dosya sistemine yazılmasıyla oluşur. Örneğin, bir zip dosyası içerisinde aşağıdaki gibi bir giriş yer alabilir:
Bu yollar, dizin kırma (directory traversal) saldırıları gerçekleştirerek, hedef sistemde kritik konumlara erişim sağlar. Python'da
zipfile modülü kullanılırken bu risk, özellikle path manipülasyonları dikkat edilmeden yapıldığında ortaya çıkar. Korunma Yöntemleri ve En İyi Uygulamalar
Zip slip açığını önlemek için birkaç temel güvenlik önlemi alınabilir:
[list]
os.path.normpath() fonksiyonuyla girişleri normalize etmek, dizin kırma girişimlerini tespit etmekte etkilidir. KOD
1234567891011121314151617
import os
import zipfile
def safe_extract(zip_path, extract_to):
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
for member in zip_ref.namelist():
# Normalize yol
normalized_path = os.path.normpath(member)
# Güvenli olmayan karakterleri veya dizin kırma girişimlerini engelle
if normalized_path.startswith("..") or os.path.isabs(normalized_path):
continue
# Hedef dizini sınırla
target_path = os.path.join(extract_to, normalized_path)
if os.path.commonpath([extract_to, target_path]) != extract_to:
continue
zip_ref.extract(member, extract_to)
Burada,
os.path.normpath() ile yol normalize edilip, dizin kırma girişimleri engelleniyor. Ayrıca, os.path.commonpath() kullanılarak, çıkış dizinini aşan girişler filtreleniyor. Sonuç ve Değerlendirme
Python'da zip slip açığı, uygun önlemler alınmadığında ciddi güvenlik riskleri doğurabilir. Dosya yolu manipülasyonlarına karşı katı kontroller ve güvenlik pratikleri uygulamak, sisteminizi bu tür saldırılardan koruyabilir. Bu nedenle, arşiv içeriğiyle çalışırken her zaman yol temizliği ve sınırlandırma yöntemlerini kullanmak kritik önem taşır.
