GitHub

Google、Microsoft、AWS、Red Hatなど、複数の著名なオープンソースプロジェクトが、CI/CDワークフローのGitHub Actions成果物を通じてGitHub認証トークンを流出していることが判明した。

これらのトークンを盗んだ攻撃者は、プライベートリポジトリに不正アクセスしたり、ソースコードを盗んだり、プロジェクトに悪意のあるコードを注入したりする可能性がある。

Palo Alto NetworksのUnit 42による発見は、GitHub Actionsの成果物を通じて機密が流出した人気のあるリポジトリの所有者による対策を促した。しかし、GitHubはこのリスクに対処せず、成果物を安全に管理する責任はユーザーにあるとして、根本的な問題は未解決のままだ。

このような状況を踏まえ、GitHubユーザーはリスクを理解し、そのリスクを評価し、将来的な流出を防ぐための対策を講じる必要があります。

Artifact generated by GitHub Actions
GitHub Actions
ソースによって生成されたアーティファクト:ユニット42

GitHubトークンの流出

Unit 42のレポートでは、「ArtiPACKED」攻撃と呼ばれるGitHubトークンの流出につながる、安全でないデフォルト設定、ユーザーの設定ミス、不十分なセキュリティチェックなど、さまざまな要因が組み合わさっていることを強調している。

最初のリスクポイントは「actions/checkout」アクションで、GitHubのワークフローでは一般的に、ワークフロー実行中に利用できるようにリポジトリコードをクローンするために使われます。

デフォルトでは、このアクションはワークフロー内の認証操作に必要な GitHub トークンをローカルの .git ディレクトリ(hidden)に永続化します。

ユーザーが誤ってチェックアウトディレクトリ全体を成果物の一部としてアップロードしてしまった場合は、git フォルダ内の GitHub トークンが公開されます。

Publicly exposed GitHub token
公開された GitHub トークン
ソースはこちら:ユニット 42

このフォルダに含まれる可能性のある機密情報には、他にもAPIキーやクラウドサービスのアクセストークン、さまざまなアカウントの認証情報などがあります。

誤った成果物のアップロードによる同様の暴露は、ビルド出力やテスト結果のようなCI/CDプロセス中に生成された成果物によっても起こり得る。

GitHubトークンを保存するために環境変数を使用しているCI/CDパイプラインも失敗のポイントだ。ワークフロー内のアクションやスクリプトが、故意であれ間違いであれ、これらの変数をログに記録すると、ログは成果物としてアップロードされる。

Unit 42は、’CREATE_LOG_FILE’プロパティが’True’に設定されている場合、’super-linter’アクションが環境変数を含む詳細なログを作成できることに注目している。

リークを悪用する

結局のところ、攻撃者はエフェメラルなGitHubトークンをログから抽出して期限切れになる前に使わなければならないような、特定のレースコンディション・シナリオを悪用しようとするだろう。

GitHub トークンはワークフローのジョブの間だけ有効なので、悪用の可能性はケースによって異なる。

アーティファクトのキャッシュと管理のためにGitHubが内部的に使用している’Actions_Runtime_Token’は通常6時間有効なので、悪用の可能性は小さい。

APIキーやクラウドサービスのアクセストークンなど、カスタムのシークレットやトークンの有効期限は数分から無期限まで様々です。

Unit 42では、GitHub Actionsを使用しているプロジェクトや公開リポジトリを特定し、自動化スクリプトを使用して、成果物が生成される可能性が高くなる条件をスキャンする攻撃シナリオを紹介します。

別のスクリプトを使えば、対象となるリポジトリの CI/CD パイプラインから成果物を自動的にダウンロードすることができる。公開リポジトリの場合は簡単なプロセスです。

Attack flow
攻撃の流れ
ソースユニット 42

緩和策

Unit 42 は、大規模なオープンソース・プロジェクトが GitHub トークンを使って成果物を公開している以下の 14 件のケースを特定し、影響を受けた当事者に報告して是正を求めた:

  • Firebase (Google)
  • OpenSearch Security (AWS)
  • Clair(レッドハット)
  • Active Directory System (Adsys) (Canonical)
  • JSONスキーマ(Microsoft)
  • TypeScript Repos Automation、TypeScript Bot Test Triggerer、Azure Draft (Microsoft)
  • CycloneDX SBOM (OWASP)
  • ストックフィッシュ
  • Libevent
  • Guardian for Apache Kafka (Aiven-Open)
  • Git Annex (Datalad)
  • ペンローズ
  • デックハウス
  • Concrete-ML (Zama AI)

一般的に、GitHubユーザーは、アップロードされた成果物にディレクトリ全体を含めることを避け、ログをサニタイズし、CI/CDパイプラインの設定を定期的に見直すことが推奨される。

actions/checkout」のような危険なアクションのデフォルト設定は、認証情報が持続しないように調整すべきである。さらに、ワークフローで使用されるトークンのパーミッションは、万が一公開された場合の被害を抑えるために、必要最小限の権限に設定すべきである。