GitとMercurialに影響を与える致命的なセキュリティ脆弱性が昨日発表され、これは攻撃者がクライアントマシンで任意のコマンドを実行できるようになる。この脆弱性は、OS X (HFS+)とWindows (NTFS, FAT)で実行しているクライアントでのみ影響がある。 Gitコアチームは、すべての現行バージョンの新しいリリースを発表した。
2005年からGitメンテナーのJunio C Hamano氏は、彼のブログで脆弱性を説明した:
Gitは、作業ツリーのルートにある.git
/ディレクトリのファイルに、そのリポジトリーの様々なメタ情報を保持しています。システムは、ディレクトリ内のファイル(例えば.git
/config)をプロジェクトの履歴にコミットしたり、プロジェクトから作業ツリーにチェックアウトしたりを許可しません。そうでなければ、疑いを持たないユーザーは、無害のように見えるが悪意のあるリポジトリからgit pullを実行して、彼女のリポジトリにあるメタ情報を上書きしてしまうか、彼女が攻撃者からプルされたリポジトリによってインストールされた実行可能なフックを持つことになってしまいます。
この保護は、大文字小文字を区別しないファイルシステムにおいては十分でないことがわかっているとJunio氏は続け、たとえば.git
ディレクトリのファイルに対応した.Git/anything
ファイルで、攻撃者がコミットして置き換えることができる。 FATかNTFSを使っているすべてのバージョンのWindowsと、OS Xでデフォルトオプションである大文字小文字を区別しないHFS+を使っている場合は脆弱である。
この脆弱性は他の方法でも利用することができる。実際にWindowsとOS Xのどちらも特定のパスコンポーネントは異なる.git
から.git
へ、たとえばWindowsの"git~1/config"とOS Xの.g\u200cit/config
は、.git/config
として扱われている。
この脆弱性は、通常のオプションでない大文字小文字を区別しないファイルシステムを使用しない限りは、Linuxシステムには影響がないことがわかっている。
Microsoftは、Visual Studio 2013 RTM, Visual Studio 2013 Update 4, VS 2012 VSIX拡張を含めた彼らのツールにパッチをリリースした。さらに、この脆弱性はクライアントにのみ影響するが、Microsoftは".git\config
ファイルの受け入れられたpushからサーバーを防ぐパッチをVS OnlineとCodeplexの両方に適用した。"
Appleは、脆弱性を修正するために新しいXcode 6.2 beta3リリースを発表した: "許可されていないパスに関するチェックでは、大文字小文字の区別やUnicode文字について考慮していなかった。この問題は、チェックを追加することで対処することができた。"
最後にGitHubは、"脆弱性が発見される前に彼らのサイトにプッシュされた悪意のあるコンテンツを探す自動スキャンを、github.com上のすべての既存コンテンツに対して実行が完了"し、"github.com上でホストされているリポジトリは、脆弱性を引き起こすすべての悪意のあるツリーを含めることができない"ように実装を変更したと発表した。