gitの脆弱性

はてなブログを眺めていると以下に関する記事がありました。

www.security-next.com

 

gitのバージョンに危険性があるとのこと。

原文サイトは以下の通りです。

github.com

 

DeepLを通したところは以下の通りの翻訳結果になっています。

・影響
Git は外部の「クレデンシャルヘルパー」プログラムを使用して、オペレーティングシステムが提供する安全なストレージからパスワードやその他のクレデンシャルを保存したり取得したりします。エンコードされた改行を含む特別に作られた URL は、クレデンシャルヘルパーのプロトコルストリームに意図しない値を注入することができ、クレデンシャルヘルパーがあるサーバー (例: good.example.com) のパスワードを別のサーバー (例: evil.example.com) への HTTP リクエストに対して取得し、その結果、前者のクレデンシャルが後者に送信されることになります。2 つの関係には何の制限もなく、攻撃者は任意のホストの保存された資格情報を任意のホストに提示する URL を作成することができることを意味します。

この脆弱性は、悪意のあるURLをgit cloneに送り込むことで発動させることができます。Git のサブモジュールや Git を中心に構築されたパッケージシステムなど、ユーザーには見えない URL を自動的にクローンするシステムを経由している可能性が高いでしょう。

・パッチ

この問題は、2020年4月14日に公開されたバージョンでは、v2.17.xにさかのぼってパッチが適用されています。この変更をさらにバックポートしたい場合は、commit 9a6bbee を適用することで行うことができます (完全なリリースには git fsck の追加チェックが含まれていますが、脆弱性からクライアントを保護するためにはこのコミットで十分です)。

・回避策
最も完全な回避策は、クレデンシャルヘルパーを完全に無効にすることです。

git config --unset credential.helper
git config --global --unset credential.helper
git config -system --unset credential.helper
もうひとつの方法は、悪意のある URL を避けることです。

git clone に渡された URL のホスト名とユーザー名の部分を調べて、エンコードされた改行 (%0a) があるかどうか、あるいはクレデンシャルプロトコルが注入されているかどうかを調べます (例: host=github.com)。

信頼されていないリポジトリでのサブモジュールの使用を避ける (clone --recurse-submodules は使わないようにしましょう。git submodule update は .gitmodules で見つけた URL を調べた後にのみ使用します)。

信頼されていない URL で git clone を実行する可能性のあるツールを回避します。

・クレジット
この脆弱性Google Project ZeroのFelix Wilhelm氏によって発見され、GitHubのJeff King氏によって修正されました。

 

問題点をかいつまんで記載すると、

改行が含まれたエンコードされたurlを使って、「credential healper」という機能を利用すると意図しない値を設定できパスワードなどを無関係のリンクに送信させるなどが行えるそうです。

 

最も簡単な回避策としては、そもそも「credential healper」を使うべきではないということで以下のコマンドが紹介されています。

■コマンド

git config --unset credential.helper
git config --global --unset credential.helper
git config -system --unset credential.helper

 

影響があるバージョンは以下の通りで、既にパッチ版も当たっています。

■Affected versions

2.17.3, 2.18.2, 2.19.3, 2.20.2, 2.21.1, 2.22.2, 2.23.1, 2.24.1, 2.25.2, 2.26.0 

■Patched versions

2.17.4, 2.18.3, 2.19.4, 2.20.3, 2.21.2, 2.22.3, 2.23.2, 2.24.2, 2.25.3, 2.26.1

 

 

自分のgitのバージョンも確認してみます。

■コマンド

git version

f:id:lawrence-twin:20200418223507p:plain

 

これは、、、ダメみたいですね。。。アップデートの必要があります。

ただ、今までHomebrewを使ってgitをインストールしていないことに気づきました。

 

f:id:lawrence-twin:20200418225254p:plain

というわけで以下のコマンドでgitをインストールします。

■コマンド

brew install git

 

install完了後は、以下のコマンドでPATHを通します。

■コマンド

echo 'export PATH="/usr/local/opt/git/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

f:id:lawrence-twin:20200418230814p:plain

 

最後にgitのバージョンを確認します。

■コマンド

git version

f:id:lawrence-twin:20200418230903p:plain

 

大丈夫そうですね。無事最新版にアップデートできました。

 

おまけ

以下のコマンドでアップデートできます。※Homebrewがインストールされていること前提

■コマンド

brew upgrade git

 

参考

https://www.orangeitems.com/entry/2020/04/18/152021