Webサーバーにありがちな設定ミスによって、数万件ものGitリポジトリが誰でもアクセスできる状態で公開されており、それに伴いクラウドサービスや決済システムをはじめとする重要なリソースのキーも流出していることが分かりました。Intruderの研究者らは350万件のライブサイトをスキャンし、約28,000件の.gitディレクトリが露出していることを発見しました。
数百件の有効な認証情報が露出
今回のスキャンでは、400件を超えるAWSアクセスキー、107件のStripeシークレットキー、123件のOpenAIキー、80件のTelegramトークン、17件のGitHubパーソナルアクセストークンが公開状態で放置されていることが判明しました。これらの認証情報の一部は実際に有効な状態のままでした。中には、企業のクラウドリソースや機密データへのアクセスを許してしまうキーも含まれていました。
Pythonの設定ファイルにハードコードされたAWSキー
あるリポジトリでは、Pythonの設定ファイルに直接AWSキーが書き込まれているのを研究者が発見しました。このキーを使えば、攻撃者は勤怠記録や懲戒処分ファイルなど、社内の人事関連文書が保存されたストレージにアクセスできる状態でした。また別のAWSキーは、古いバージョンの.envファイルに残されており、音楽ファイルの保存用バケットへのアクセスを許すものでした。
有効なStripeキーから財務データが流出
発見された107件のStripeキーのうち、複数が完全に機能する状態でした。あるキーでは、企業の入金・取引履歴全体を閲覧でき、収益データや支払いスケジュール、銀行口座情報の一部まで確認できてしまう状態でした。盗まれたStripeキーで何ができるかは、そのキーに元々付与されていた権限次第であり、顧客データの閲覧や返金処理をはじめとする機密性の高い操作が可能になる場合もあります。
gitreaper:専用に開発されたスキャンツール
大規模なサイトスキャンを実現するため、Intruderは「gitreaper」というオープンソースツールを独自に開発しました。従来のツールは通常、まずディスク上にリポジトリ全体を再構築する方式を取りますが、数万件のサイトを一斉に対象とする場合、この方法では膨大なストレージ容量が必要になります。これに対しgitreaperは、コミット履歴をすべてメモリ上でたどり、Gitオブジェクトを個別に取得しながら、機密情報が検出された特定のファイルだけを保持する仕組みになっています。
この手法により、ファイルがプロジェクトの最新バージョンからすでに削除されていたとしても、機密情報を発見できます。Gitは履歴内に過去の状態を保持する仕組みのため、最新のコミットから削除されたパスワードやトークンであっても、古いコミットを通じて完全に取得できてしまう場合があるのです。gitreaperはGitのreflog(参照ログ)も調査対象としており、これには既に削除または書き換えられたコミットへのポインタが残っていることもあります。
AIモデルが流出した機密情報の探索を自動化しつつある
この種の情報漏えいを探索する動きが自動化されつつあることで、問題はさらに深刻化しています。7月には、OpenAIが自社モデルがテスト中に、サードパーティのサービス上で公開状態にあった認証情報を自律的に発見したことを明らかにしました。また別の事案では、同社のモデルが隔離されたサンドボックス環境から脱出し、Hugging Faceのインフラを侵害するに至っています。
流出した機密情報への対処方法
GitHub自身のガイダンスでも推奨されている通り、公開されてしまった機密情報はすべて「侵害された」ものとして扱い、直ちに失効させるか置き換える必要があります。プロジェクトの最新バージョンからキーを削除するだけでは不十分です。その値はGitの履歴内に残り続ける可能性があるためです。露出したキーをすべてローテーションした後は、アクセスログを確認し、機密データをリポジトリの履歴から完全に消去する作業も欠かせません。
翻訳元: https://meterpreter.org/exposed-git-repos-api-keys-intruder/