Instantly share code, notes, and snippets.
Save azu/9e0ffcf42a24c7b7ad4b6a0611db073a to your computer and use it in GitHub Desktop.
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 --versiongit 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 --versiongit 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をコミットしてしまう事故を防止する用途などに利用できます。
*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"を参照してください。
ghost commentedApr 19, 2020
Git 2.26.0以下には、細工したリポジトリをgit cloneしたときに、 そのユーザーのCredential(たとえばGitHub.comをcloneするときに使う認証情報)を奪い取れる脆弱性があります。
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-5260
こちらを見る限り、対象は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.
かと読み取れましたが、2.26.0以下は公式の情報でしょうか?
azu commentedApr 19, 2020 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@Ryuta69 バージョンを列挙するのは読みにくくなり、一般的なユーザーなら「最新版を使う」で問題ないと思ったため、最新版へのアップデートの案内だけに済ませています。(どのminorまでメンテされているのかが直感的ではなく、バージョンだけみてこれは大丈夫なバージョンなのかを判定することが困難だと思いました。)
*1: minorの最新なら2.26.0以下でも大丈夫なバージョンもあります
一応、注釈に入れています。
脆弱性の具体的な内容を省いていることからもわかるかもしれませんが、この文章はGitを使う一般的な開発者向けにかかれています。
そのため、具体的すぎるバージョンの確認に時間をつかうよりも、単純にGitをアップグレードしてもう事を優先して書かれています。
詳細を読む人は元のCVEへのリンクや注釈でカバーしていたつもりでした。
Edit: 注釈に具体的なバージョンを追加しました。
*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バージョンはGHSA-qm7j-c969-7j4q の"Patched versions"を参照してください。
より簡潔で正確な表現できる方法があればそれにしたいのですが、なにかいい案ありますでしょうか?
ghost commentedApr 19, 2020 • edited by ghost
Loading Uh oh!
There was an error while loading.Please reload this page.
edited by ghost
Uh oh!
There was an error while loading.Please reload this page.
注釈を入れて頂きありがとうございました。また指摘箇所に注釈へのリンクが付与されて、簡潔で正確な表現
は私もこれで十分かと思います。
https://gist.github.com/azu/9e0ffcf42a24c7b7ad4b6a0611db073a/revisions
バージョンを列挙するのは読みにくくなり、一般的なユーザーなら「最新版を使う」で問題ないと思ったため、最新版へのアップデートの案内だけに済ませています。(どのminorまでメンテされているのかが直感的ではなく、バージョンだけみてこれは大丈夫なバージョンなのかを判定することが困難だと思いました。)
脆弱性の具体的な内容を省いていることからもわかるかもしれませんが、この文章はGitを使う一般的な開発者向けにかかれています。そのため、具体的すぎるバージョンの確認に時間をつかうよりも、単純にGitをアップグレードしてもう事を優先して書かれています。詳細を読む人は元のCVEへのリンクや注釈でカバーしていたつもりでした。
もしかしたら揚げ足を取るかのような指摘として受け取られてしまったかもしれません。そのような意図ではなく、自分にとって重要な確認の為の質問でした。
現在とある1環境でやむをえずVersion 2.2.1を使用しています。公式情報ではaffectedに入っていなかったので安心したのですが、azuさんの記述では(ん・・・少し曖昧で怖くなってきた)と感じたので質問した次第でした。
take commentedApr 19, 2020
【github desktopを使ってる方へ】
ソースコードを見た所、最新版の2.4.1を使えば問題無さそうです