Go -Yol Geçişi "Zip Slip" Güvenlik Açığı

 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

  1. 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.

  2. 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.sh yazılıyor  ./tmp/

  3. 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  .profile veya  .bashrc kalıcılığa yol açabilir.

Güvenlik Açığı Olan Kod Örneği

Gitmek
Kopyala
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

  1. 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:

      Gitmek
      Kopyala
      eğer dizeler . Contains ( filePath ,  ".." )  || dizeler . HasPrefix ( filePath ,  "/" )  { 
          return errors . New ( "yasadışı yol geçişi algılandı" ) 
      }
  2. 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()

  3. 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/archives Sı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/

Yorum Gönder

Daha yeni Daha eski

İletişim Formu