[하루한줄] CVE-2024-32002: git의 원격 코드 실행 취약점
URL
https://amalmurali.me/posts/git-rce/
https://github.com/amalmurali47/git_rce
Target
- git < v2.45.1
- git < v2.44.1
- git < v2.43.4
- git < v2.42.2
- git < v2.41.1
- git < v2.40.2
- git < v2.39.4
Explain
버전 관리 시스템인 git의 clone 기능에서 발견된 원격 코드 실행 취약점의 세부 정보가 공개되었습니다.
git clone 기능은 저장소에 포함된 하위 모듈을 재귀적으로 함께 clone하는 --recurse-submodules 옵션이 존재합니다. 또한 git은 symbolic link를 지원하여 git 컨텍스트에서 저장소의 다른 부분을 참조하는데 사용할 수 있습니다.  
취약점은 대소문자를 구분하지 않는 Windows, MacOS와 같은 파일 시스템에서 --recurse-submodules 옵션을 사용해 저장소를 clone하는 과정에서 발견되었습니다.
하위모듈 경로는 일반적으로  .gitmodules 파일에 다음과 같이 작성됩니다.
[submodule "x/y"]
	path = A/modules/x
	url = git@github.com:amalmurali47/hook.git해당 하위모듈 url은 https://github.com/amalmurali47/hook 저장소를 가리키며 해당 저장소의 hook/post-checkout hook script는 실행할 임의 코드가 작성되어 있습니다.
#!/bin/bash
echo "amal_was_here" > /tmp/pwnd
calc.exe
open -a Calculator.app위 PoC는 https://github.com/amalmurali47/git_rce 에서 확인할 수 있습니다.
대소문자를 구분하지 않는 파일시스템은 A/modules/x 및 a/modules/x 와 같은 경로를 동일하게 인식합니다. 이를 이용하면 다음과 같은 exploit이 가능합니다
- clone 대상 저장소 git_rce에.git을 가리키는 symbolic linka생성
- 해당 저장소를 recurse clone하면 git은 .gitmodules에 정의된 대로 하위 모듈용 디렉토리A/modules/x를 생성해 해당 경로에 clone하려고 시도함
- 그러나 대소문자를 구분하지 않는 파일시스템은 2번의 경로를 symbolic link인 a의 하위 경로a/modules/x로 인식함.
- a는- .git을 가리키므로 원격 저장소의- hook/post-checkouthook script가 로컬 하위 모듈의- .git/hook/post-checkout에 생성됨
- 해당 hook script는 checkout 성공 이후 자동으로 트리거되어 임의 코드 실행이 가능함
해당 취약점은 symbolic link를 지원하는 core.symlinks 기능이 활성화된 Windows 및 MacOS 시스템이 취약하며, 패치는 커밋 링크에서 확인할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.
