
CVE-2024-32002에 대한 개념 증명: Git submodule path injection 취약점.
Hack The Box 플랫폼의 Compiled 머신을 푸는 과정에서 Git과 서브모듈 관련 흥미로운 동작을 발견했습니다. 더 깊이 조사하다 보니 연구자 Amal Murali의 이 훌륭한 게시물을 찾았는데, .gitmodules를 통한 경로 삽입 기술을 자세히 설명하고 있습니다. 이를 바탕으로 CVE-2024-32002를 연구하고 취약점의 실제 영향을 보여주는 실용적인 PoC를 만들기로 결정했습니다.
CVE-2024-32002는 Git의 서브모듈 경로 확인 관련 심각한 결함을 악용합니다. Git은 리포지토리가 .gitmodules 파일에 정의된 서브모듈(경로 및 URL 지정)을 포함할 수 있도록 허용합니다. 취약점은 경로가 리포지토리의 내부 메타데이터와 설정을 저장하는 .git 디렉토리 내부를 가리키도록 조작될 때 발생합니다.
다음을 결합하여:
.gitmodules 조작 - 경로를 A/modules/x로 설정a → .git 생성…Git은 속아서 A/modules/x를 .git/modules/x로 확인하게 됩니다. 즉, 내부 .git 디렉토리 내부로 이동합니다. 이를 통해 공격자는 checkout, merge 또는 clone과 같은 합법적인 작업에서 실행될 수 있는 악성 후크와 같은 임의 파일을 주입할 수 있습니다.
이 취약점은 특히 CI/CD 환경, 자동화 또는 공유 리포지토리에서 위험한 원격 코드 실행 벡터를 나타냅니다.
setup.sh 스크립트가 보여주는 것이 스크립트는 취약한 환경 생성을 자동화하고 결함의 영향을 재현합니다:
hook-repo) 생성 - /tmp/teste.txt에 쓰는 post-checkout 후크 포함main-repo) 초기화 및 서브모듈 추가.gitmodules 파일 수정 - 서브모듈 경로를 A/modules/x로 리디렉션a → .git 생성 - A/modules/x가 .git/modules/x로 확인되도록 함.gitmodules 주입 - git update-index --index-info 사용--recursive 옵션으로 리포지토리 (cloned-repo) 복제 - 서브모듈 초기화.git/hooks/로 복사하고 git checkout HEAD 실행 - 익스플로잇 발동성공하면 후크가 실행되고 /tmp/teste.txt 파일이 다음 내용으로 생성됩니다:
joao was here
이 리포지토리에는 다음을 수행하는 Dockerfile이 포함되어 있습니다:
docker build -t git-cve-poc .
docker run --rm -it git-cve-poc
이 취약점은 Git 2.45.1 이전 버전에 영향을 미칩니다. 결함은 서브모듈 경로 확인에 대한 더 엄격한 검증으로 수정되었습니다. 서브모듈을 사용하는 리포지토리는 감사되어야 하며, 자동화된 환경은 즉시 업데이트되어야 합니다.
이 프로젝트는 교육 및 연구 목적으로만 제공됩니다. 프로덕션 환경에서 사용하지 마세요. 목적은 취약점의 기술적 영향을 시연하고 보안 모범 사례를 홍보하는 것입니다.