[하루한줄] 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-checkout
hook script가 로컬 하위 모듈의.git/hook/post-checkout
에 생성됨- 해당 hook script는 checkout 성공 이후 자동으로 트리거되어 임의 코드 실행이 가능함
해당 취약점은 symbolic link를 지원하는 core.symlinks
기능이 활성화된 Windows 및 MacOS 시스템이 취약하며, 패치는 커밋 링크에서 확인할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.