情報源: Advisory: Git vulnerability with submodules – Service Blog – Visual Studio Team Services
問題点
リモートリポジトリからフェッチするとき、URL内に埋め込まれたコマンドラインオプションでGit URLの解析を混乱させることができます。 これは、特定のコマンドラインオプションをssh実行可能ファイルに渡すために悪用される可能性があり、それらのオプションは “ProxyCommand”機能を使用して実行するコマンドを指定することがあります。
例:
git clone ssh://-oProxyCommand=notepad.exe/ /tmp/git_vulnerability
このようなURLでメモ帳が開かれます。
もちろん、このURLは非常に面白く見えるので、誰かが自分自身をクローンすると確信することはまずありません。 代わりに、このURLがむしろ無邪気に見えるリポジトリにサブモジュールとして埋め込まれている場合、リスクが大きくなります。
攻撃者は.gitmodulesファイルを編集することによって、リポジトリ内のサブモジュールのURLを簡単に変更できます。
上記の悪用URLを指すように変更された例:
[submodule "pwned"] path = pwned url = ssh://-oProxyCommand=notepad.exe/
この無邪気なリポジトリで再帰的なクローンを実行すると、任意のコードが実行されます。
この問題はCVE 2017-1000117として報告されています。
対策
この問題の解決法は非常に簡単で効果的です:サブモジュールのURLは、Gitクライアントによってより詳細に調べられます。 SSHホスト名がコマンドラインオプションのように見える場合(つまり、「 – 」で始まる場合)、サブモジュールはブロックされます。 上記で参照した更新されたGitクライアントにはこの修正が含まれており、できるだけ早くインストールする必要があります。
- 最新のGit for Windows(v2.14.1)は対策済みです。
- Visual Studio 2017はこの週末公開予定のパッチを適応する必要があります。VS2017より前のVisual Studioが影響を受けることはありません。
- また、Visual Studio Team ServicesのホストされたビルドエージェントをパッチバージョンのGitで更新しています。独自のエージェントを実行するチームでは、今週末に更新されたビルドを提供します。
- 独自のGUIツールに関しては提供企業のサポートもしくは提供コミュニティに確認をお願いします。
Source TreeはWindows版がVer. 2.1.10、macOS版が2.6.1で対策がされています。以下のAtlassianのBlogを参照してください。