
GitHub Actionsのサプライチェーン攻撃で秘密情報が漏洩――Coinbaseを標的とした攻撃から拡大
2025年3月、GitHub Actions「tj-actions/changed-files」が悪意のあるコード注入により改ざんされ、サプライチェーン攻撃によって218のGitHubリポジトリが秘密情報を漏洩する事態が発生しました。この攻撃は、当初Coinbaseのオープンソースプロジェクト「agentkit」を狙ったものとして始まりましたが、規模が拡大し、多くのリポジトリに影響を及ぼしました。
最初にCoinbaseのオープンソースプロジェクトを標的にしたことから考えると、暗号通貨関連の情報を狙った可能性が高く、特に暗号通貨の窃盗を目的として、GitHubリポジトリを悪用しようとした疑いが指摘されています。
概要と影響
攻撃は、GitHub ActionsのCI/CDフローを標的にして実行され、リポジトリに保存されたDockerHubやnpm、Amazon Web Services(AWS)の資格情報、そしてGitHubトークンを漏洩させる結果となりました。幸いにも、漏洩した情報の多くが短命なトークンであったため、実際の影響は予想よりも限定的でした。しかし、218リポジトリで秘密情報が漏洩する深刻な事態が確認されています。
要するに自動的に動く仕組み(CI/CDフロー)」にコードを仕込まれて、情報が漏洩したということです。
CI/CDとは
CI/CDとは、「Continuous Integration(継続的インテグレーション)」と「Continuous Deployment(継続的デプロイ)」の略で、ソフトウェア開発においてコードの品質を保ちながら効率的に開発や配布を行うための自動化された仕組みを指します。継続的インテグレーション(CI)は、新しいコードを頻繁に統合し、その都度エラーや不具合をテストするプロセスを指します。一方、継続的デプロイメント(CD)は、テストに合格したコードをユーザーが利用できる製品として自動的に配布・更新するプロセスです。この仕組みにより、開発のスピードと信頼性を向上させることが可能になります。
攻撃の仕組み
「tj-actions/changed-files」はGitHub Actions「reviewdog/action-setup」に依存しており、この依存関係を利用した攻撃が、さらなる改ざんを可能にしました。攻撃者は「tj-actions/eslint-changed-files」の実行により、CI/CDランナーの秘密情報を取得し、これを使ってコード改ざんを行いました。
「tj-actions/changed-files」は、GitHub Actionsの一つで、リポジトリ内で変更されたファイルやディレクトリを効率的に追跡するためのツールで、「reviewdog/action-setup」は、GitHub Actionsの一つで、コードレビューを効率化するためのツール「reviewdog」をセットアップする役割を持つアクションです。
このアクションを利用することで、CI/CDフロー内でreviewdogを簡単に導入し、コード品質の向上やエラー検出を効率化することができます。
今回の攻撃では、この「reviewdog/action-setup」が改ざんされ、悪意のあるコードが注入されることで、依存している「tj-actions/changed-files」にも影響を与え、さらなる改ざんを可能にしたとされています。つまり、「reviewdog/action-setup」は攻撃の連鎖の起点となった重要な部分だったのです。
痕跡なき侵入:フォークと吊りコミットが織りなす隠蔽の技
加えて、攻撃者は匿名のGitHubアカウントを複数作成し、リポジトリのフォークとプルリクエストを用いた「吊りコミット」(dangling commit)と呼ばれる技術を使用して悪意のあるコードを挿入しました。これにより、攻撃の痕跡を巧みに隠していたようです。
GitHubではオープンソースリポジトリをフォークして自身のコピーを作成することができます。この機能を利用し、攻撃者はフォークしたリポジトリ内で悪意のあるコードを記録し、そのコミットを元のリポジトリに統合せず独立した状態で保持しました。これを吊りコミットと呼びます。
そして、フォークしたリポジトリから元のリポジトリにプルリクエストを作成し、その過程で悪意のあるコードを紛れ込ませるという巧妙な手法を使いました。
つまり、攻撃者の意図は痕跡を隠すことで特定を難しくするとともに、プルリクエストを通じて改ざんしたコードを元のリポジトリに持ち込むチャンスを狙うことでした。さらに、攻撃者は匿名のGitHubアカウントや一時的なアカウントを作成して隠蔽工作を強化し、コミットを吊り下げた状態にして元のリポジトリへの完全な承認を得ていないかのように装いましたが、その裏では悪意のある意図が隠されていました。この一連の行動は高度で巧妙な手法といえます。
Coinbaseへの影響と攻撃者の意図
攻撃者は、Coinbaseリポジトリを標的にして暗号通貨窃取を試みたと見られています。Coinbaseは迅速に攻撃を検知し対策を講じましたが、その後、攻撃者は大規模なサプライチェーン攻撃へと切り替えました。この行動転換の理由は、「Coinbaseリポジトリへの攻撃失敗」による焦りや、「改ざんしたGitHub Actionsの失効への恐怖」が背景にある可能性があります。
今後の教訓
GitHubは現時点でシステム自体が侵害された証拠はないとしていますが、ユーザー自身が利用するオープンソースコードやGitHub Actionsを慎重にレビューする必要があると強調しています。本件は、サプライチェーン攻撃の脅威や、オープンソースプロジェクトのセキュリティ対策の重要性を改めて示した事例と言えるでしょう。
出典
The Hacker News『Coinbase Initially Targeted in GitHub Actions Supply Chain Attack; 218 Repositories’ CI/CD Secrets Exposed』