Zip Slip (ARCH5106)
Anahtar go.security.zip-slip · Önem error · Kategori security · CWE CWE-22
Arşiv girdi adlarını doğrulamadan diske yazmak, ../ içeren girdilerin hedef dizin dışına (örn. sistem dosyalarının üzerine) yazılmasına olanak tanır.
Hatalı
Bölüm başlığı “Hatalı”func extract(dst string, f *zip.File) error { path := filepath.Join(dst, f.Name) out, err := os.Create(path) if err != nil { return err } defer out.Close() rc, _ := f.Open() _, err = io.Copy(out, rc) return err}func extract(dst string, f *zip.File) error { path := filepath.Join(dst, f.Name) if !strings.HasPrefix(path, filepath.Clean(dst)+string(os.PathSeparator)) { return fmt.Errorf("illegal path: %s", f.Name) } out, err := os.Create(path) if err != nil { return err } defer out.Close() rc, _ := f.Open() _, err = io.Copy(out, rc) return err}Düzeltme
Bölüm başlığı “Düzeltme”Her arşiv girdisinin hedef yolunu doğrulayın; çözümlenen yolun hedef dizin içinde kaldığından emin olun.