Skip to content

Instantly share code, notes, and snippets.

@azu
Last active January 22, 2022 21:54
Show Gist options
  • Save azu/9e0ffcf42a24c7b7ad4b6a0611db073a to your computer and use it in GitHub Desktop.
Save azu/9e0ffcf42a24c7b7ad4b6a0611db073a to your computer and use it in GitHub Desktop.
Gitの認証情報を奪い取れるGit 2.26.0以下にある脆弱性について

Git 2.26.0以下にある脆弱性

Git 2.26.0以下*1には、細工したリポジトリをgit cloneしたときに、 そのユーザーのCredential(たとえばGitHub.comをcloneするときに使う認証情報)を奪い取れる脆弱性があります。

📝 取得できる認証情報は credential.helper の設定に依存する

既にPoC(検証するためのコード)もあり、結構簡単なので是非Gitを2.26.1以上にアップデートしましょう。 git submoduleを使うと見た目ではわかりにくい攻撃もできるので、「気をつける」では回避は難しいです。

この脆弱性はGit 2.26.1で修正されています。また各minorバージョンに対しても修正がバックポートされています。*1

Gitのバージョン確認方法

Git 2.26.0以下なら脆弱性があります。*1

$ git --version
git version 2.26.0
# 脆弱性があるバージョンなのでアップデート必要です

Gitのアップデート

公式から最新版(2020-04-19時点では2.26.1)が出ているのでダウンロードしてインストールすることでアップデートできます。

HomebrewでGitを入れている場合は次のコマンドでアップデートできます。

brew update && brew upgrade git

Gitを内蔵しているツールもあるので、それぞれアップデートしてください。

アップデート後の確認

2.26.1 以上になっているかを確認する。 2.26.1 以上なら問題ありません。

$ git --version
git version 2.26.1

一応、minorバージョンごとに修正が出ていますが*1、普通の使い方では互換性の問題はあまりないので最新にしても特に問題ないです。

Gitの最近の変更

Gitをアップデートしたついでに、Gitの最近の変更も確認しましょう。

Git 2.26でGit protocol version 2がデフォルトとなりパフォーマンスが改善されています。

git checkoutが色々な役割を持ちすぎていたので、git switchgit 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"を参照してください。

@take
Copy link

take commented Apr 19, 2020

【github desktopを使ってる方へ】

ソースコードを見た所、最新版の2.4.1を使えば問題無さそうです

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment