Gitのサブモジュール脆弱性とWindows, Visual Studioでの対策について

情報源: 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を参照してください。

Security Warning (Git,Mercurial,SVN) – Atlassian Developers