-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CVE-2007-4559 Patch #5
base: master
Are you sure you want to change the base?
Conversation
@@ -57,7 +57,26 @@ def maxmind_download(suffix, **kwargs): | |||
extract_members = [member for member in tar_file.getmembers() | |||
if member.name.endswith('.mmdb')] | |||
assert len(extract_members) == 1 | |||
tar_file.extractall(path=db_dir_path, members=extract_members) | |||
def is_within_directory(directory, target): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
E306 expected 1 blank line before a nested definition, found 0
@@ -57,7 +57,26 @@ def maxmind_download(suffix, **kwargs): | |||
extract_members = [member for member in tar_file.getmembers() | |||
if member.name.endswith('.mmdb')] | |||
assert len(extract_members) == 1 | |||
tar_file.extractall(path=db_dir_path, members=extract_members) | |||
def is_within_directory(directory, target): | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
W293 blank line contains whitespace
|
||
abs_directory = os.path.abspath(directory) | ||
abs_target = os.path.abspath(target) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
W293 blank line contains whitespace
abs_target = os.path.abspath(target) | ||
|
||
prefix = os.path.commonprefix([abs_directory, abs_target]) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
W293 blank line contains whitespace
prefix = os.path.commonprefix([abs_directory, abs_target]) | ||
|
||
return prefix == abs_directory | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
W293 blank line contains whitespace
member_path = os.path.join(path, member.name) | ||
if not is_within_directory(path, member_path): | ||
raise Exception("Attempted Path Traversal in Tar File") | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
W293 blank line contains whitespace
if not is_within_directory(path, member_path): | ||
raise Exception("Attempted Path Traversal in Tar File") | ||
|
||
tar.extractall(path, members, numeric_owner=numeric_owner) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
W291 trailing whitespace
raise Exception("Attempted Path Traversal in Tar File") | ||
|
||
tar.extractall(path, members, numeric_owner=numeric_owner) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
W293 blank line contains whitespace
|
||
tar.extractall(path, members, numeric_owner=numeric_owner) | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
W293 blank line contains whitespace
tar.extractall(path, members, numeric_owner=numeric_owner) | ||
|
||
|
||
safe_extract(tar_file, path=db_dir_path, members=extract_members) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
E303 too many blank lines (2)
Patching CVE-2007-4559
Hi, we are security researchers from the Advanced Research Center at Trellix. We have began a campaign to patch a widespread bug named CVE-2007-4559. CVE-2007-4559 is a 15 year old bug in the Python tarfile package. By using extract() or extractall() on a tarfile object without sanitizing input, a maliciously crafted .tar file could perform a directory path traversal attack. We found at least one unsantized extractall() in your codebase and are providing a patch for you via pull request. The patch essentially checks to see if all tarfile members will be extracted safely and throws an exception otherwise. We encourage you to use this patch or your own solution to secure against CVE-2007-4559. Further technical information about the vulnerability can be found in this blog.
If you have further questions you may contact us through this projects lead researcher Kasimir Schulz.