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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-29780 — 공식 eml-parser 예제 스크립트의 경로 탐색 취약점을 시연하며, 조작된 첨부 파일 이름을 통해 임의 파일 쓰기를 허용하고, PoC 및 수정 사항을 포함합니다. | Kitploit
도구/GitHubGitHub/redyank/cve-2026-29780
Static AnalysisVulnerability AnalysisCode AnalysisExploitationWeb Security
GitHubredyank/cve-2026-29780

CVE-2026-29780

공식 eml-parser 예제 스크립트의 경로 탐색 취약점을 시연하며, 조작된 첨부 파일 이름을 통해 임의 파일 쓰기를 허용하고, PoC 및 수정 사항을 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

공식 예제 스크립트의 경로 탐색 취약점으로 인한 임의 파일 쓰기

요약

공식 예제 스크립트 examples/recursively_extract_attachments.py에는 의도된 출력 디렉터리 외부에 임의 파일을 쓸 수 있는 경로 탐색 취약점이 존재합니다. 파싱된 이메일에서 추출된 첨부 파일 이름이 어떠한 검증 없이 출력 파일 경로를 구성하는 데 직접 사용되어, 공격자가 제어하는 파일 이름이 대상 디렉터리를 벗어날 수 있습니다.

세부 사항

파일: examples/recursively_extract_attachments.py 줄: 61–64

root@kitploit:~
for a in m['attachment']:
    out_filepath = out_path / a['filename']  # No sanitization
    print(f'\tWriting attachment: {out_filepath}')
    with out_filepath.open('wb') as a_out:
        a_out.write(base64.b64decode(a['raw']))

a['filename'] 값은 조작된 이메일 첨부 파일 헤더를 통해 공격자가 제어할 수 있습니다:

root@kitploit:~
Content-Disposition: attachment; filename="../outside/pwned.txt"

쓰기 전에 경로 정규화나 경계 검증이 수행되지 않습니다.

PoC

  1. 악성 .eml 파일을 생성합니다:
root@kitploit:~
Content-Disposition: attachment; filename="../outside/pwned.txt"
  1. 예제 스크립트를 실행합니다:
root@kitploit:~
python recursively_extract_attachments.py -p ./emails -o ./safe
  1. 예상 결과: ./safe/pwned.txt
  2. 실제 결과: ./outside/pwned.txt ← 의도된 디렉터리 외부에 쓰여짐

가상 환경에서 pip으로 설치된 eml-parser를 사용하여 Kali Linux에서 검증했습니다.

영향

이 취약점은 예제 스크립트에만 국한되며 핵심 eml-parser 라이브러리에는 영향을 미치지 않습니다. 그러나 이 스크립트는 공식 저장소의 일부이며 프로덕션 환경에 적용될 가능성이 높으므로, 공격자가 조작된 이메일을 제공하면 실행 컨텍스트 내에서 임의 파일 쓰기를 달성할 수 있습니다.

잠재적 공격 시나리오는 다음과 같습니다:

  • Cron 작업 주입: filename="../../etc/cron.d/backdoor"
  • 웹 셸 업로드: filename="../../var/www/html/shell.php"
  • SSH 키 주입: filename="../../home/user/.ssh/authorized_keys"

권장 수정 사항

root@kitploit:~
import os.path

for a in m['attachment']:
    filename = os.path.basename(a['filename'])
    out_filepath = out_path / filename

    if not out_filepath.resolve().is_relative_to(out_path.resolve()):
        print(f'[!] Skipping suspicious filename: {a["filename"]}')
        continue

    print(f'\tWriting attachment: {out_filepath}')
    with out_filepath.open('wb') as a_out:
        a_out.write(base64.b64decode(a['raw']))
도구 다운로드