İçeriğe geç

Zip slip (ARCH6106)

Anahtar ruby.security.zip-slip · Önem error · Kategori security · CWE CWE-22

Arşiv girdi yollarını doğrulamadan diske yazmak, ../ içeren girdilerin hedef dizinin dışına yazılmasına ve dizin gezinme saldırısına olanak tanır.

Zip::File.open(archive) do |zip|
zip.each { |entry| entry.extract(File.join(dest, entry.name)) }
end
root = File.expand_path(dest)
Zip::File.open(archive) do |zip|
zip.each do |entry|
path = File.expand_path(File.join(root, entry.name))
raise "zip slip" unless path.start_with?("#{root}/")
entry.extract(path)
end
end

Her girdinin hedef yolunu çözümleyip hedef kökün içinde kaldığını doğrulayın; aksi halde çıkarımı reddedin.