
CVE-2024-32002 の概念実証: Git サブモジュールのパスインジェクションの脆弱性。
Hack The Box プラットフォームの Compiled マシンを攻略中に、Git とサブモジュールに関する興味深い動作に遭遇しました。さらに調査を進めると、研究者 Amal Murali による この優れた記事 を見つけました。そこには .gitmodules を介したパスインジェクション手法が詳述されています。これをきっかけに、CVE-2024-32002 を研究し、この脆弱性の実際の影響を示す実用的な PoC を作成することにしました。
CVE-2024-32002 は、サブモジュールのパス解決に関連する Git の重大な欠陥を悪用します。Git では、リポジトリが .gitmodules ファイルで定義されたサブモジュールを、パスと URL を指定して含めることができます。この脆弱性は、パスが操作され、リポジトリの内部メタデータと設定を格納する .git ディレクトリ内を指すようにされた場合に発生します。
以下の組み合わせによって:
.gitmodules の操作 により、パスを A/modules/x として定義するa → .git の作成…これにより Git は欺かれ、A/modules/x を .git/modules/x、すなわち 内部の .git ディレクトリ内 として解決します。この結果、攻撃者は悪意のあるフックなどの任意のファイルを注入でき、checkout、merge、clone などの正当な操作中に実行される可能性があります。
この脆弱性はリモートコード実行のベクターとなり、特に CI/CD 環境や自動化、共有リポジトリにおいて危険です。
setup.sh が示す内容このスクリプトは脆弱な環境の作成を自動化し、この欠陥の影響を再現します。
hook-repo) を作成し、/tmp/teste.txt に書き込む post-checkout フックを含めるmain-repo) を初期化し、サブモジュールを追加する.gitmodules ファイルを変更 して、サブモジュールのパスを A/modules/x にリダイレクトするa → .git を作成 し、A/modules/x が .git/modules/x として解決されるようにする.gitmodules をインデックスに注入 し、git update-index --index-info を使用するcloned-repo) を --recursive 付きでクローン し、サブモジュールを初期化する成功すると、フックが実行され、/tmp/teste.txt ファイルが次の内容で作成されます:
joao was here
このリポジトリには、次のことを行う Dockerfile が含まれています:
docker build -t git-cve-poc .
docker run --rm -it git-cve-poc
この脆弱性は、Git 2.45.1 より前のバージョンに影響します。この欠陥は、サブモジュールのパス解決におけるより厳格な検証によって修正されました。 サブモジュールを使用するリポジトリは監査されるべきであり、自動化環境は直ちに更新されるべきです。
このプロジェクトは、教育および研究目的のみのものです。本番環境では使用しないでください。その目的は、脆弱性の技術的影響を実証し、セキュリティのベストプラクティスを促進することです。
.git/hooks/ にコピー し、git checkout HEAD を実行してエクスプロイトを発火させる