mholt/archiver'da (Go) Yol Geçişi "Zip Slip" Güvenlik Açığı
Genel bakış
Go için mholt/archiver kütüphanesinde kritik bir Yol Geçişi ("Zip Slip") güvenlik açığı (CVE-2025-3445) keşfedildi . Bu kusur, bir saldırganın yol geçişi sembolik bağlantıları içeren kötü amaçlı bir ZIP dosyası oluşturmasına olanak tanır ve kütüphaneyi kullanan uygulama ile aynı ayrıcalıklara sahip hedef sistemde keyfi dosya oluşturma veya üzerine yazma olanağı sağlar.
Güvenlik açığı, . kullanarak ZIP arşivleri çıkarırken yetersiz doğrulamadan kaynaklanır archiver.Unarchive(). Benzer bir sorun daha önce TAR dosyalarında (CVE-2024-0406) tanımlanmıştı, ancak bir düzeltmeye rağmen, proje kullanımdan kaldırılmadan önce resmi bir sürüm yayınlanmamıştı. Halefi mholt/archives (v0.1.0) , güvenlik açığı olan işlevselliği tamamen kaldırır Unarchive() .
Teknik Detaylar
Etkilenen İşlev :
archiver.Unarchive(zipFile, outputDir)Etkisi : Keyfi dosya yazma, ayrıcalık yükseltme, uzaktan kod yürütme (RCE)
Temel Puan : 8.1 (YÜKSEK)
Yayın Tarihi : 13 Nisan 2025
Exploit Nasıl Çalışır?
Kötü amaçlı bir ZIP dosyası işlendiğinde, bir saldırgan göreceli yollarla (örneğin, ../../malicious.sh) girdileri gömebilir . Çıkarma işlemi bu yolları düzgün bir şekilde temizlemezse, dosyalar amaçlanan dizinin ( ) dışına yazılabilir outputDirve bu da şunlara yol açabilir:
Sistem dosyalarının üzerine yazma (örneğin,
/etc/passwd,.bashrc).Çalıştırılabilir yollara arka kapılar yerleştirmek.
Uygulama yükseltilmiş izinlerle çalışıyorsa ayrıcalıkları yükseltme.
Örnek Saldırı Senaryosu
Saldırgan Kötü Amaçlı Bir ZIP Dosyası Hazırlıyor
Adı . olan bir girdi içeren bir ZIP dosyası oluşturulur
../../../tmp/evil.sh.Dosya, kritik sistem dosyalarını değiştiren bir ters kabuk yükü veya betik içeriyor.
Mağdur ZIP Dosyasını Çıkarır
Güvenlik açığı bulunan Go uygulaması,
archiver.Unarchive()kullanıcı tarafından yüklenen ZIP dosyalarını çıkarmak için kullanılıyor.Uygunsuz yol temizliği nedeniyle, amaçlanan dizin yerine
evil.shyazılıyor ./tmp/
Sömürü
Eğer kurban (veya zamanlanmış bir görev) yürütülürse
/tmp/evil.sh, saldırgan kontrolü ele geçirir.Alternatif olarak, üzerine yazma
.profileveya.bashrckalıcılığa yol açabilir.
Güvenlik Açığı Olan Kod Örneği
paket ana içe aktar ( "github.com/mholt/archiver/v3" ) func main ( ) { err := archiver . Unarchive ( "malicious.zip" , "./safe_dir" ) if err != nil { panic ( err ) } }
Eğer malicious.zip içeriyorsa , dosya yerine ../../etc/cron.d/backdooryazılır ./etc/cron.d/./safe_dir
Azaltma ve Düzeltmeler
Hemen Çözüm
archiver.Unarchive()Güvenilmeyen ZIP dosyaları için kullanmaktan kaçının .Çıkarmadan önce dosya yollarını manuel olarak doğrulayın:
eğer dizeler . Contains ( filePath , ".." ) || dizeler . HasPrefix ( filePath , "/" ) { return errors . New ( "yasadışı yol geçişi algılandı" ) }
mholt/archives'e yükseltin (v0.1.0 veya üzeri)
Yeni kütüphane daha güvenli çıkarma yöntemlerini kaldırıyor ve zorunlu kılıyor.
Unarchive()
Alternatif Kütüphaneler
(Go'nun standart kütüphanesi gibi ) sıkı yol kontrolleri olan güvenli alternatifleri kullanın .
archive/zip
Çözüm
CVE-2025-3445, mholt/archiver ZIP çıkarma için kullanılan uygulamalar için önemli bir risk oluşturmaktadır. Geliştiriciler derhal şunları yapmalıdır:
archiver.Unarchive()Güvenilmeyen arşivler için kullanmayı bırakın .mholt/archivesSıkı yol doğrulamasına geçiş yapın veya bunu uygulayın.Hassas dizinlerdeki şüpheli dosya yazma işlemlerine ilişkin denetim günlükleri .
Bu güvenlik açığının yamalanmaması, etkilenen ortamlarda sistemin tamamının tehlikeye girmesine yol açabilir.
Referanslar:
- https://nvd.nist.gov/