公開された.gitディレクトリ:目の前に潜むソースコード流出
Webサーバーがアプリケーションファイルと一緒に.gitディレクトリを配信していると、攻撃者は十分なオブジェクトをダウンロードしてソースコード全体を復元できます。過去にコミットされたすべてのシークレットも含まれ、後のコミットで削除したものも例外ではありません。AppSafeはこれをクリティカルとして報告します。
これは何か
Gitはリポジトリ全体(すべてのファイル、すべてのコミット、すべてのブランチの先端)をプロジェクトルートの隠しディレクトリ.gitに保存します。このディレクトリがWebルート内に置かれ、サーバーがアクセスをブロックしていない場合、/.git/config、/.git/HEAD、そして/.git/objects/配下のオブジェクトストアは誰でもダウンロードできてしまいます。
流出した.gitディレクトリからソース全体を復元するのは簡単です。git-dumperのようなツールはインデックスを取得し、参照されているすべてのオブジェクトを取得して、完全に動作するチェックアウトを作成します。攻撃者にシェルアクセスは必要なく、ブラウザさえあれば十分です。
なぜ重要か
ソースコードには、ほぼ確実にリスクを高める情報が含まれています。ハードコードされたAPIキー(古いコミットに多い)、データベーススキーマ、内部エンドポイントのパス、ビジネスロジック、認証フローなどです。現在コミットされているシークレットがなくても、履歴には攻撃者が悪用できる材料が詰まっています。
Gitの履歴は設計上、永続的です。何年も前にコミットされ、その後削除されたシークレットもオブジェクトストアに残り、他のすべてと一緒にダウンロードされます。無力化する唯一の方法はローテーションです。
直し方
パスが/.git/で始まるすべてのリクエストを拒否します。ディレクトリの存在を認めないよう、403ではなく404を返してください。
location ~ /\.git {
deny all;
return 404;
}最も確実な対策は、そもそも.gitディレクトリをドキュメントルートにデプロイしないことです。ビルド成果物を別のpublic/ディレクトリに出力する構成にし、プロジェクトルートではなくそのディレクトリだけをデプロイしてください。
修正をデプロイしたら、ブラウザでhttps://yourdomain.com/.git/configにアクセスします。Gitの設定内容ではなく404が返るはずです。AppSafeはスキャンのたびにこれを再チェックします。
ディレクトリがアクセス可能だった場合、いずれかのコミットに現れたすべてのAPIキー、パスワード、トークンを侵害されたものとして扱ってください。ローテーションが必要です。コミットを削除するだけでは不十分です。攻撃者がすでにダウンロードした可能性のあるpackファイルにオブジェクトが残っているためです。
FAQ
マネージドプラットフォーム(Vercel、Netlify、Fly.io)にデプロイしています。リスクはありますか?
ソースからビルドするマネージドプラットフォームは通常ビルド成果物だけをデプロイするため、.gitディレクトリは配信されません。リスクが高いのは、VPSへのデプロイ、プロジェクトルートからビルドしたDockerコンテナ、作業ツリー全体がコピーされる静的サイトのエクスポートです。
AppSafeは実際に何をチェックしていますか?
AppSafeは/.git/configと/.git/HEADをリクエストし、レスポンス本文が本物のGitファイルに見えるか([core]やref:のパターンに一致するか)を確認します。Gitの内容ではない汎用的な200ページは報告されません。
サーバー上の.gitディレクトリを削除するだけでよいですか?
デプロイされたファイルが動作すればよいだけなら、それで構いません。ただし、次回のプッシュでデプロイ処理が再びコピーしないようにしてください。デプロイスクリプトが一貫しない場合に備え、Webサーバー側でもブロックしておくと二重の防御になります。
ブログ記事
偽のAIクローラーが.envファイルを狙っている。自分のアプリを確認する方法
認証情報を狙うスキャナーがAIクローラーの名前を借りて許可リストをすり抜け、ある1つのファイルを要求しています。それがあなたの.envです。自分のファイルにアクセスできてしまわないか確認する方法と、その塞ぎ方を解説します。
Railwayの侵害:ダウンタイムなしでアプリのシークレットをローテーションする方法
攻撃者がAIやプラットフォームのAPIキーを狙ったことを受け、Railwayは全ユーザーに環境変数のローテーションを呼びかけました。自分への影響を確認する方法、アプリを止めずにすべてを入れ替える方法、そして次の侵害の被害を小さくする方法をまとめます。
PHP2Shellが悪用されています:あなたのアプリが影響を受けるか確認する方法
PHP本体の重大なバグ2件が、数日のうちに「パッチ公開」から「実際に悪用中」へと移りました。あなたが運用しているものに影響を受けるバージョンがあるかを確認する方法と、今日やるべきことをまとめます。