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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/saku0512/cve-2026-71557-poc
Vulnerability AnalysisExploitationPenetration TestingSupply Chain SecurityLearning & Education
GitHubsaku0512/cve-2026-71557-poc

CVE-2026-71557-poc

CVE-2026-71557에 대한 로컬 개념 증명(PoC)으로, go-git 파일시스템 참조 저장소에서 경로 순회(path traversal) 취약점을 시연하며, 익스플로잇 로직과 취약 버전 대비 수정 버전 비교를 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-71557: go-git 참조 이름 경로 탐색 PoC

English version

개요

이 리포지토리는 go-git 공개 보안 권고 GHSA-qgq7-7hm3-q39j 에 기반한 CVE-2026-71557의 안전한 로컬 PoC입니다.

수정 전의 storage/filesystem은 loose reference 이름을 충분히 검증하지 않고 .git/<reference-name> 경로로 사용했습니다. 그 때문에 refs/heads/../../config 같은 참조 이름을 전달하면 ..이 정규화되어 본래 reference storage 외부에 있는 .git/config를 덮어쓸 수 있습니다.

이 PoC는 실제 go-git API를 호출하며, 임시 디렉터리 안에 생성한 더미 .git/config만 대상으로 합니다. 외부 Git 서버와의 연결, 기존 리포지토리 변경, 임의 명령 실행은 수행하지 않습니다.

면책 조항

이 프로젝트는 교육 목적 및 허가된 윤리적 보안 검증만을 목적으로 합니다. 허가 없는 환경에서 사용하지 마십시오.

취약점 상세 내용

  • CVE ID: CVE-2026-71557
  • GitHub Advisory: GHSA-qgq7-7hm3-q39j
  • 유형: Path Traversal (CWE-22)
  • 심각도: Medium
  • CVSS v3.1: 6.3 (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:L)
  • 영향을 받는 버전:
    • github.com/go-git/go-git/v5 <= 5.19.1
    • github.com/go-git/go-git/v6 <= 6.0.0-alpha.4
  • 수정된 버전:
    • v5: 5.19.2
    • v6: 6.0.0-alpha.5
  • 영향을 받는 스토리지: storage/filesystem의 dotgit reference storage
  • 영향을 받지 않는 스토리지: storage/memory

근본 원인

수정 전의 v5.19.1에서는 DotGit.SetRef가 참조 이름을 그대로 파일 이름으로 setRef에 전달했습니다.

root@kitploit:~
fileName := r.Name().String()
return d.setRef(fileName, content, old)

filesystem-backed storage의 루트는 일반적으로 .git입니다. 참조 이름 refs/heads/../../config는 경로 정규화 후에 config가 되므로, 참조 값 쓰기가 .git/config 쓰기로 바뀝니다. 악의적인 Git 서버가 이러한 참조 이름을 advertise하고 clone/fetch 시 refspec mapping 후에도 traversal이 남는 경우, 공격자가 제어하는 참조 이름이 이 코드 경로에 도달할 수 있습니다.

수정 버전은 filesystem storage의 SetRef, Ref, RemoveRef 등의 진입점에서 참조 이름을 검증하여 reference storage를 벗어나는 이름을 거부합니다.

PoC

필요 환경

  • Go 1.25 이상, 또는 toolchain 자동 획득이 활성화된 Go
  • 최초 module download에 필요한 네트워크 연결

취약 버전에서의 재현

go.mod는 취약한 v5.19.1에 고정되어 있습니다.

root@kitploit:~
go run .

기대되는 주요 출력:

root@kitploit:~
[*] go-git version: v5.19.1
[*] crafted reference: refs/heads/../../config
[*] SetReference error: <nil>
[!] VULNERABLE: .git/config was overwritten through the reference name.

PoC는 다음 처리를 수행합니다.

  1. OS의 임시 디렉터리에 filesystem-backed Git storage를 생성
  2. .git/config에 안전한 marker를 기록
  3. refs/heads/../../config라는 hash reference를 SetReference에 전달
  4. marker가 참조 hash로 바뀌었는지 검증
  5. 임시 디렉터리를 자동 삭제

취약 버전과 수정 버전 비교

다음 스크립트는 리포지토리 내의 go.mod를 변경하지 않고, 임시 module을 사용해 v5.19.1과 v5.19.2의 동일한 PoC를 순서대로 실행합니다.

root@kitploit:~
./scripts/run-version-matrix.sh

기대되는 판정:

root@kitploit:~
go-git v5.19.1
[!] VULNERABLE: .git/config was overwritten through the reference name.

go-git v5.19.2
[+] FIXED: the crafted reference was rejected and .git/config stayed intact.

임시 파일을 확인하려면 -keep를 지정하십시오. 표시된 디렉터리는 자동 삭제되지 않으므로 확인 후 수동으로 삭제하십시오.

root@kitploit:~
go run . -keep

PoC 범위

이 PoC는 권고에서 설명된 filesystem storage의 취약한 진입점을 직접 호출하여 path traversal을 통한 metadata overwrite를 검증합니다. 악의적인 Git protocol 서버나 clone/fetch의 transport 계층은 구현하지 않았습니다.

대책

v5 사용자는 v5.19.2 이상, v6 alpha 사용자는 v6.0.0-alpha.5 이상으로 업데이트하십시오. 업데이트할 수 없는 동안에는 filesystem-backed storage에서 신뢰할 수 없는 Git 서버로부터 clone/fetch하지 마십시오. storage/memory만 사용하는 애플리케이션은 이 취약점의 영향을 받지 않습니다.

참고 자료

  • GHSA-qgq7-7hm3-q39j
  • go-git PR #2247 (v6 fix)
  • go-git PR #2254 (v5 backport)
  • v5 fix commit f3d0cc1
  • v5 additional safety commit 3b306ef
도구 다운로드