İçeriğe geç

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.

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
}

Her arşiv girdisinin hedef yolunu doğrulayın; çözümlenen yolun hedef dizin içinde kaldığından emin olun.