File tree Expand file tree Collapse file tree 2 files changed +17
-0
lines changed Expand file tree Collapse file tree 2 files changed +17
-0
lines changed Original file line number Diff line number Diff line change @@ -168,6 +168,8 @@ def _get_ref_info_helper(
168168 """Return: (str(sha), str(target_ref_path)) if available, the sha the file at
169169 rela_path points to, or None. target_ref_path is the reference we
170170 point to, or None"""
171+ if ".." in str (ref_path ):
172+ raise ValueError (f"Invalid reference '{ ref_path } '" )
171173 tokens : Union [None , List [str ], Tuple [str , str ]] = None
172174 repodir = _git_dir (repo , ref_path )
173175 try :
Original file line number Diff line number Diff line change 55# the BSD License: http://www.opensource.org/licenses/bsd-license.php
66
77from itertools import chain
8+ from pathlib import Path
89
910from git import (
1011 Reference ,
2021from git .objects .tag import TagObject
2122from test .lib import TestBase , with_rw_repo
2223from git .util import Actor
24+ from gitdb .exc import BadName
2325
2426import git .refs as refs
2527import os .path as osp
28+ import tempfile
2629
2730
2831class TestRefs (TestBase ):
@@ -616,3 +619,15 @@ def test_dereference_recursive(self):
616619
617620 def test_reflog (self ):
618621 assert isinstance (self .rorepo .heads .master .log (), RefLog )
622+
623+ def test_refs_outside_repo (self ):
624+ # Create a file containing a valid reference outside the repository. Attempting
625+ # to access it should raise an exception, due to it containing a parent directory
626+ # reference ('..'). This tests for CVE-2023-41040.
627+ git_dir = Path (self .rorepo .git_dir )
628+ repo_parent_dir = git_dir .parent .parent
629+ with tempfile .NamedTemporaryFile (dir = repo_parent_dir ) as ref_file :
630+ ref_file .write (b"91b464cd624fe22fbf54ea22b85a7e5cca507cfe" )
631+ ref_file .flush ()
632+ ref_file_name = Path (ref_file .name ).name
633+ self .assertRaises (BadName , self .rorepo .commit , f"../../{ ref_file_name } " )
You can’t perform that action at this time.
0 commit comments