Prevent arbitrary file read via zip archives
A zip file with a file pointing to /etc/passwd would, upon being cleaned by mat2, produce a file with the filesystem's /etc/passwd file.
This commit is contained in:
parent
e2c4dbf721
commit
beebca4bf1
@ -190,8 +190,14 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
|
|||||||
if member_name[-1] == '/': # `is_dir` is added in Python3.6
|
if member_name[-1] == '/': # `is_dir` is added in Python3.6
|
||||||
continue # don't keep empty folders
|
continue # don't keep empty folders
|
||||||
|
|
||||||
zin.extract(member=item, path=temp_folder)
|
|
||||||
full_path = os.path.join(temp_folder, member_name)
|
full_path = os.path.join(temp_folder, member_name)
|
||||||
|
if not os.path.abspath(full_path).startswith(temp_folder):
|
||||||
|
logging.error("%s contains a file (%s) pointing outside (%s) of its root.",
|
||||||
|
self.filename, member_name, full_path)
|
||||||
|
abort = True
|
||||||
|
break
|
||||||
|
|
||||||
|
zin.extract(member=item, path=temp_folder)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
original_permissions = os.stat(full_path).st_mode
|
original_permissions = os.stat(full_path).st_mode
|
||||||
|
Loading…
Reference in New Issue
Block a user