Skip to content

Commit 57eed32

Browse files
committed
fix [security] path traversal allowing authenticated AIL users to read gzip-compressed files accessible to the AIL process. Reported by Jeroen Gui
1 parent 6ad6e39 commit 57eed32

2 files changed

Lines changed: 10 additions & 3 deletions

File tree

bin/lib/item_basic.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,21 @@
2424

2525
def exist_item(item_id):
2626
filename = get_item_filepath(item_id)
27+
if not filename:
28+
return False
2729
if os.path.isfile(filename):
2830
return True
2931
else:
3032
return False
3133

3234
def get_item_filepath(item_id):
3335
filename = os.path.join(ConfigLoader.get_items_dir(), item_id)
34-
return os.path.realpath(filename)
36+
filename = os.path.realpath(filename)
37+
items_dir = ConfigLoader.get_items_dir()
38+
if not os.path.commonpath([filename, items_dir]) == items_dir:
39+
return None
40+
else:
41+
return filename
3542

3643
def get_item_date(item_id, add_separator=False):
3744
l_dir = item_id.split('/')

bin/lib/objects/Items.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def get_filename(self):
8989
filename = os.path.realpath(filename)
9090

9191
# incorrect filename
92-
if not os.path.commonprefix([filename, ITEMS_FOLDER]) == ITEMS_FOLDER:
92+
if not os.path.commonpath([filename, ITEMS_FOLDER]) == ITEMS_FOLDER:
9393
return None
9494
else:
9595
return filename
@@ -788,7 +788,7 @@ def get_item_filename(item_id):
788788
filename = os.path.realpath(filename)
789789

790790
# incorrect filename
791-
if not os.path.commonprefix([filename, ITEMS_FOLDER]) == ITEMS_FOLDER:
791+
if not os.path.commonpath([filename, ITEMS_FOLDER]) == ITEMS_FOLDER:
792792
return None
793793
else:
794794
return filename

0 commit comments

Comments
 (0)