diff --git a/lib/metasploit/credential/exporter/core.rb b/lib/metasploit/credential/exporter/core.rb index 6b3dd3a5..27719522 100644 --- a/lib/metasploit/credential/exporter/core.rb +++ b/lib/metasploit/credential/exporter/core.rb @@ -211,7 +211,7 @@ def render_manifest_output_and_keys def render_zip zip_dir_path = Pathname.new(output_final_directory_path) - Zip::File.open(output_zipfile_path, Zip::File::CREATE) do |zipfile| + Zip::File.open(output_zipfile_path, create: true) do |zipfile| Dir[File.join(output_final_directory_path, '**', '**')].each do |file| file_path = Pathname.new(file) path_in_zip = file_path.relative_path_from(zip_dir_path) diff --git a/lib/metasploit/credential/importer/zip.rb b/lib/metasploit/credential/importer/zip.rb index 3b042959..141c8ee0 100644 --- a/lib/metasploit/credential/importer/zip.rb +++ b/lib/metasploit/credential/importer/zip.rb @@ -57,7 +57,7 @@ class Metasploit::Credential::Importer::Zip def import! ::Zip::File.open(input.path) do |zip_file| zip_file.each do |entry| - entry.extract(File.join(extracted_zip_directory, entry.name)) + entry.extract(destination_directory: File.join(extracted_zip_directory)) end end @@ -80,7 +80,7 @@ def extracted_zip_directory # @return [void] def input_is_well_formed begin - Zip::File.open input.path do |archive| + ::Zip::File.open(input.path) do |archive| glob_check = archive.glob("**#{File::SEPARATOR}#{MANIFEST_FILE_NAME}") if glob_check.present? true diff --git a/metasploit-credential.gemspec b/metasploit-credential.gemspec index 2e7018d6..e5838273 100644 --- a/metasploit-credential.gemspec +++ b/metasploit-credential.gemspec @@ -31,7 +31,7 @@ Gem::Specification.new do |s| # Metasploit::Credential::NTLMHash helper methods s.add_runtime_dependency 'rubyntlm' # Required for supporting the en masse importation of SSH Keys - s.add_runtime_dependency 'rubyzip', '<3.0.0' + s.add_runtime_dependency 'rubyzip', '>= 3.1.1', '< 4.0' s.add_runtime_dependency 'rex-socket' diff --git a/spec/factories/metasploit/credential/importer/zips.rb b/spec/factories/metasploit/credential/importer/zips.rb index 1baacee2..4c110f58 100644 --- a/spec/factories/metasploit/credential/importer/zips.rb +++ b/spec/factories/metasploit/credential/importer/zips.rb @@ -57,7 +57,7 @@ # Write out zip file zip_location = "#{path}.zip" - ::Zip::File.open(zip_location, ::Zip::File::CREATE) do |zipfile| + ::Zip::File.open(zip_location, create: true) do |zipfile| Dir[File.join(path, '**', '**')].each do |file| zipfile.add(file.sub(path + '/', ''), file) end @@ -98,7 +98,7 @@ # Write out zip file zip_location = "#{path}.zip" - ::Zip::File.open(zip_location, ::Zip::File::CREATE) do |zipfile| + ::Zip::File.open(zip_location, create: true) do |zipfile| Dir[File.join(path, '**', '**')].each do |file| zipfile.add(file.sub(path + '/', ''), file) end @@ -140,7 +140,7 @@ # Write out zip file zip_location = "#{path}.zip" - ::Zip::File.open(zip_location, ::Zip::File::CREATE) do |zipfile| + ::Zip::File.open(zip_location, create: true) do |zipfile| Dir[File.join(path, '**', '**')].each do |file| zipfile.add(file.sub(path + '/', ''), file) end diff --git a/spec/lib/metasploit/credential/migrator_spec.rb b/spec/lib/metasploit/credential/migrator_spec.rb index a67fccd9..0c2d5577 100644 --- a/spec/lib/metasploit/credential/migrator_spec.rb +++ b/spec/lib/metasploit/credential/migrator_spec.rb @@ -99,13 +99,15 @@ context "when Cred#pass points to a file system path" do - let(:path_to_ssh_key) do + let(:ssh_key_tempfile) do t = Tempfile.new('ssh') t.write(ssh_key_content) t.close - t.path + t end + let(:path_to_ssh_key) { ssh_key_tempfile.path } + let(:cred) do FactoryBot.create(:mdm_cred, service: service, @@ -114,6 +116,10 @@ ) end + after(:example) do + ssh_key_tempfile.unlink + end + before(:example) do migrator.convert_creds_in_workspace(cred.service.host.workspace) end