
GitHub ActionはGitHub上で行う自動化ツールです。
GitHubからのGitリポジトリのプル、ビルド環境に適したツールチェーンの設定、そしてクラウドプロバイダーに対する認証の設定を実行できます。
継続的インテグレーション(CI)や継続的デリバリー(CD)の実現が可能になります。
この機構はGitHubで利用できるため、多くのプロジェクトで利用されています。
この機能が利用できるということがGitHubが多く利用されている理由ともなっています。
このGitHub Actionがsupply chain attackの道具として利用されてしまっていたことが確認されています。
大量のsecretが公開された状態になってしまっていたのです。
secretは、GitHub Actions で使用する機密情報を安全に管理するための機能です。
APIキー、データベースのパスワード、アクセストークンなど、公開してはならない重要な情報を、暗号化された形式で保存し、ワークフロー内で使用することができる機構です。
- reviewdogのアクセス権の獲得
reviewdogは多くのコントリビュータに支えられて維持されているプロジェクトです。
多くの貢献者はプロジェクトに価値を提供しますが、このなかに高いアクセス権限を攻撃に悪用する脅威アクターが含まれていました。 - reviewdog/actions-setup@v1
reviewdogを更新できる権限を取得した脅威アクターは、reviewdog/actions-setupのv1というタグの侵害を実施しました。
この侵害されたreviewdog/actions-setupが実行されると、挿入されたコードを実行し、メモリの中からGitHub環境のsecretを抜き出し、二重にエンコードしてファイル化します。
ファイル化されたsecretはGitHubで公開された状態になってしまいます。
ここで抜き出されるsecretは、reviewdog/actions-setup@v1を実行したプロジェクトの内容となります。 - tj-actions/eslint-changed-files
この機構はその内部の機構を実行する際に、reviewdog/actions-setupを読み込んで実行します。
reviewdog/actions-setup@v1は、従来のreviewdog/actions-setupの新しい内容として ここで読み取られ、悪意ある内容が実行されることとなりました。 - tj-actions/changed-files
この機構はその内部の機構を実行する際に、tj-actions/eslint-changed-filesを読み込んで実行します。
tj-actions/changed-filesはCI/CDのなかで利用される機構です。
このactionは、プロジェクトルートからの相対パスを返すターゲットブランチ、現在のブランチ(前のコミットまたは最後のリモートコミット)などを基準として、変更されたすべてのファイルとディレクトリを簡単に追跡できる機構です。
多くのGitHubのプロジェクトでtj-actions/changed-filesが実行されました。
結果として、多数のプロジェクトのsecretが抜き取られ参照できる場所に配置されることとなりました。
現在は、このreviewdog/actions-setup@v1の問題の部分は、問題のない状態に変更された状態に さらに更新されました。
現時点では、この機構は安全です。
しかし、今回のような多重に依存するソフトウェアが安全を保つことの難しさが浮き彫りになりました。
公開されたソフトウェアを利用する際に、特定のタグを利用するように記述して この問題が発生しないようにすることで対策できるように思われますが、これは簡単ではありません。
自分が責任をもって記述する範囲においてはそれが可能ですが、自分が参照しているソフトウェアのなかで、どのように他のソフトウェアに依存しているかは管理の対象外なのです。
しかも、特定のタグを指して他のソフトウェアに依存するということは、そのソフトウェアの改善を取り込むことも放棄しているということも意味するのです。
この種の問題にはどう対応していくのが良いのでしょうか。
便利さと安全性の両立は簡単ではないようです。
New GitHub Action supply chain attack: reviewdog/action-setup
https://www.wiz.io/blog/new-github-action-supply-chain-attack-reviewdog-action-setup
この記事をシェア |
---|