セキュリティとプライバシー

Git、再帰的クローンにおける重大なコード実行脆弱性を修正

Git 2.56.1 およびそれ以前のメンテナンスリリースでは、CVE-2026-111760 が修正されています。これは整数切り捨てバグであり、悪意のあるリポジトリが再帰的クローン中にコードを実行することを可能にします。

壊れたチェーンリンクの隣にある、脆弱な Git リポジトリを表す赤い警告シンボルが入ったガラスの立方体。
この記事用に生成されたイラスト

英語の原文から自動翻訳されました。

Git プロジェクトは、攻撃者が開発者のマシン上で任意のコードを実行できる重大な脆弱性を修正するための緊急パッチをリリースしました。この欠陥は CVE-2026-111760 と識別され、ユーザーが悪意のあるサブモジュールを含むリポジトリを再帰的にクローンした際にトリガーされます。今週、複数のサポート対象バージョンで修正版が公開されており、バージョン管理に Git を依存しているエンジニアリングチームには即時の対応が必要です。

何が起きたか

根本的な問題は、Git がインデックス内のファイルパスをどのように処理するかに関わっています。攻撃者は、初期の安全チェックを通過するものの、ディスクへの書き込み時に整数切り捨てが発生する非常に長いパスを持つリポジトリを作成できます。この切り捨てによりパス名が短縮され、攻撃者は最終的なファイル名が .git と一致するように操作できます。新しくクローンされたサブモジュールでは、.git はディレクトリではなくファイルとして存在します。攻撃者はこのファイルを、悪意のあるフックや設定ファイルを含むフォルダへのシンボリックリンクに置き換えます。Git はワークフローの特定のポイントでフックを実行するため、この制御されたフォルダへのリンクによりリモートからのコード実行が可能になります。

Git プロジェクトはバージョン 2.56.1 でこの問題に対処し、2.50 から 2.55 シリーズ(具体的にはバージョン 2.50.2、2.51.3、2.52.1、2.53.1、2.54.1、および 2.55.1)へバックポートを行いました。GitHub は github.com および GitHub Enterprise Cloud にこれらの修正を適用済みであることを確認しました。セルフホスト型インスタンスの場合、GitHub Enterprise Server バージョン 3.19.15、3.20.11、3.21.9、および 3.22.4 にパッチが含まれています。GitHub Desktop、GitHub Copilot、Codespaces、および Actions の更新は準備中です。しかし、火曜日の UTC 19:09 時点で、Git for Windows はまだパッチ適用済みの 2.56.1 ブランチに基づくバージョンをリリースしていませんでした。

仕組み

この脆弱性は、Git の内部パス検証とファイルシステムによる長い名前の処理との間の不一致を利用しています。Git がインデックスを処理する際、パスの長さをチェックします。パスが過度に長い場合、整数切り捨てエラーが発生し、Git はより短く予測可能な名前のもとでファイルを書き込みます。パスを慎重に構築することで、攻撃者はこの短縮された名前がサブモジュールディレクトリ内の .git に解決されるようにします。

サブモジュールは特に脆弱です。その .git エントリは当初、実際の git ディレクトリへの参照を含むファイルであり、ディレクトリ自体ではないためです。Git は通常、.git ディレクトリをシンボリックリンクに置き換えることを防ぎますが、.git ファイルの置き換えはブロックしません。一度シンボリックリンクが配置されると、フックをトリガーする後続の Git 操作は、攻撃者が制御する場所からスクリプトを実行します。パッチ適用後のバージョンでは、切り捨てが発生する前にこうした極端に長いパスを拒否し、名前衝突を完全に防止します。

主要な詳細

  • 主要な脆弱性: CVE-2026-111760 は、Git のインデックス処理における整数切り捨てに関与しており、悪意のあるサブモジュール経由でのコード実行を可能にします。
  • 修正済みバージョン: Git 2.56.1、および 2.50.2、2.51.3、2.52.1、2.53.1、2.54.1、2.55.1。
  • GitHub Enterprise の修正: サーバーバージョン 3.19.15、3.20.11、3.21.9、および 3.22.4 で利用可能です。
  • その他の欠陥: 他の 5 つの CVE も修正されました。これには空のリポジトリでのパストラバーサル(CVE-2026-113408)や、大きなマージによるヒープ破損(CVE-2026-105437)が含まれます。
  • Windows の状況: レポート時点では、Git for Windows は 2.56.1 に基づいたパッチ適用済みバージョンをリリースしていませんでした。
  • 回避策: 信頼できないリポジトリの再帰的クローンを避け、更新されるまで未知のソースからのバイナリパッチを処理しないでください。

なぜ重要なのか

ソフトウェアエンジニアやテクニカルリードにとって、この脆弱性はサプライチェーン依存関係に伴うリスクを浮き彫りにします。再帰的クローンはモノレポや多くのサブモジュールを持つプロジェクトで一般的なプラクティスです。もし単一のサブモジュールが侵害された場合、または開発者が悪意のあるフォークをクローンした場合、開発環境全体が侵害される可能性があります。これは単なる理論上のリスクではありません。自動化された CI/CD パイプラインはしばしばリポジトリを再帰的にクローンするため、ビルドサーバーも同じエクスプロイトにさらされる可能性があります。

同じリリース内でさらに 5 つの脆弱性が存在することは、安全なバージョン管理システムを維持することの複雑さを強調しています。大きなマージによるヒープ破損やプロトコル v2 でのパストラバーサルなどの問題は、ホスティングサービスとローカルクライアントの両方に影響を与えます。プライベートな GitLab または GitHub Enterprise インスタンスを管理するチームは、これらの更新を優先する必要があります。プルリクエストを検証するために git merge-tree を実行しているサーバーは、特に CVE-2026-105437 の標的となるためです。パッチの遅延は、インフラストラクチャをサービス拒否攻撃や潜在的なデータ流出に対して無防備な状態に置きます。

実施できること

  • ローカルの Git インストールを、OS のパッケージマネージャーまたは Git 配布元を確認して、パッチ適用済みのバージョンの一つに直ちにアップグレードしてください。
  • GitHub Enterprise Server を管理している場合は、バージョン 3.19.15、3.20.11、3.21.9、または 3.22.4 にアップグレードしてください。
  • すべてのシステムがパッチ適用されるまで、信頼できないソースからのリポジトリに対して git clone --recursive を使用しないでください。
  • CI/CD パイプラインを設定し、外部または未検証の依存関係についてはサブモジュールの再帰的初期化をスキップしてください。
  • 直ちにアップグレードできない GitLab サーバーの場合、リポジトリの info/attributes ファイルで conflict-marker-size=7 を設定して、CVE-2026-105437 の影響を軽減してください。
  • Git for Windows のリリースタグを監視し、2.56.1 に基づいたバージョンが利用可能になり次第、更新してください。
  • #git
  • #security
  • #vulnerability
  • #devops
  • #supply-chain

Bytechapストアのツール

続きを読む

すべての記事