Git 2.26.0以下*1には、細工したリポジトリをgit clone
したときに、
そのユーザーのCredential(たとえばGitHub.comをcloneするときに使う認証情報)を奪い取れる脆弱性があります。
📝 取得できる認証情報は credential.helper
の設定に依存する
既にPoC(検証するためのコード)もあり、結構簡単なので是非Gitを2.26.1以上にアップデートしましょう。 git submoduleを使うと見た目ではわかりにくい攻撃もできるので、「気をつける」では回避は難しいです。
- malicious URLs may cause Git to present stored credentials to the wrong server · Advisory · git/git
- 2021 - git: Newline injection in credential helper protocol - project-zero
- NVD - CVE-2020-5260
- brompwnie/cve-2020-5260: A HTTP PoC Endpoint for cve-2020-5260 which can be deployed to Heroku
この脆弱性はGit 2.26.1で修正されています。また各minorバージョンに対しても修正がバックポートされています。*1
Git 2.26.0以下なら脆弱性があります。*1
$ git --version
git version 2.26.0
# 脆弱性があるバージョンなのでアップデート必要です
公式から最新版(2020-04-19時点では2.26.1)が出ているのでダウンロードしてインストールすることでアップデートできます。
HomebrewでGitを入れている場合は次のコマンドでアップデートできます。
brew update && brew upgrade git
Gitを内蔵しているツールもあるので、それぞれアップデートしてください。
- XCodeはXcode 11.4.1で修正されているので、App Storeなどからアップデートする
- GitHub Desktopは2.4.1で修正されているので、アップデートする
- SourceTreeはアップデートしたシステムのGitを使うように変更する
- 設定方法はSourceTreeのアップデートがわかりやすいです
2.26.1 以上になっているかを確認する。 2.26.1 以上なら問題ありません。
$ git --version
git version 2.26.1
一応、minorバージョンごとに修正が出ていますが*1、普通の使い方では互換性の問題はあまりないので最新にしても特に問題ないです。
Gitをアップデートしたついでに、Gitの最近の変更も確認しましょう。
Git 2.26でGit protocol version 2がデフォルトとなりパフォーマンスが改善されています。
git checkout
が色々な役割を持ちすぎていたので、git switch
とgit restore
というコマンドが追加されています。
git checkout
自体は引き続き使えます。
巨大なリポジトリだとcloneに時間がかかるので、
git sparse-checkout
という特定のディレクトリだけ取得できるコマンドが追加されています。
core.hooksPathという設定が追加され、グローバルに使えるコミットフックを設定できるようになっています。 たとえば、Secretlintと組み合わせてCredentialをコミットしてしまう事故を防止する用途などに利用できます。
- globalなgit-hooksを設定して、すべてのリポジトリで共有のhooksを使う - Qiita
- SecretlintでAPIトークンや秘密鍵などのコミットを防止する | Web Scratch
*1: minorの最新なら2.26.0以下でも大丈夫なバージョンもあります。具体的には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ならこの脆弱性は修正されています。修正されているminorバージョンは https://github.com/git/git/security/advisories/GHSA-qm7j-c969-7j4q の"Patched versions"を参照してください。
@azu
注釈を入れて頂きありがとうございました。また指摘箇所に注釈へのリンクが付与されて、
簡潔で正確な表現
は私もこれで十分かと思います。https://gist.github.com/azu/9e0ffcf42a24c7b7ad4b6a0611db073a/revisions
もしかしたら揚げ足を取るかのような指摘として受け取られてしまったかもしれません。そのような意図ではなく、自分にとって重要な確認の為の質問でした。
現在とある1環境でやむをえずVersion 2.2.1を使用しています。公式情報ではaffectedに入っていなかったので安心したのですが、azuさんの記述では(ん・・・少し曖昧で怖くなってきた)と感じたので質問した次第でした。