Movatterモバイル変換


[0]ホーム

URL:


Skip to content
Search Gists
Sign in Sign up

Instantly share code, notes, and snippets.

@azu
Last activeJanuary 22, 2022 21:54
    • Star(49)You must be signed in to star a gist
    • Fork(0)You must be signed in to fork a gist
    Save azu/9e0ffcf42a24c7b7ad4b6a0611db073a to your computer and use it in GitHub Desktop.
    Gitの認証情報を奪い取れる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 --versiongit 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 --versiongit 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"を参照してください。

    Copy link

    @azu

    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
    Copy link
    Author

    azu commentedApr 19, 2020
    edited
    Loading

    @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"を参照してください。

    より簡潔で正確な表現できる方法があればそれにしたいのですが、なにかいい案ありますでしょうか?

    Copy link

    ghost commentedApr 19, 2020
    edited by ghost
    Loading

    @azu

    注釈を入れて頂きありがとうございました。また指摘箇所に注釈へのリンクが付与されて、簡潔で正確な表現は私もこれで十分かと思います。
    https://gist.github.com/azu/9e0ffcf42a24c7b7ad4b6a0611db073a/revisions

    バージョンを列挙するのは読みにくくなり、一般的なユーザーなら「最新版を使う」で問題ないと思ったため、最新版へのアップデートの案内だけに済ませています。(どのminorまでメンテされているのかが直感的ではなく、バージョンだけみてこれは大丈夫なバージョンなのかを判定することが困難だと思いました。)

    脆弱性の具体的な内容を省いていることからもわかるかもしれませんが、この文章はGitを使う一般的な開発者向けにかかれています。そのため、具体的すぎるバージョンの確認に時間をつかうよりも、単純にGitをアップグレードしてもう事を優先して書かれています。詳細を読む人は元のCVEへのリンクや注釈でカバーしていたつもりでした。

    もしかしたら揚げ足を取るかのような指摘として受け取られてしまったかもしれません。そのような意図ではなく、自分にとって重要な確認の為の質問でした。

    現在とある1環境でやむをえずVersion 2.2.1を使用しています。公式情報ではaffectedに入っていなかったので安心したのですが、azuさんの記述では(ん・・・少し曖昧で怖くなってきた)と感じたので質問した次第でした。

    @take
    Copy link

    【github desktopを使ってる方へ】

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

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

    [8]ページ先頭

    ©2009-2025 Movatter.jp