攻撃は ブランチ保護ルールが弱い、または設定されていないリポジトリに集中していました。レビュー必須のPull Requestが無い場合、攻撃者はワークフロー変更を 直接デフォルトブランチへプッシュできてしまいます。
各コミットには Base64でエンコードされたBashスクリプトを含むGitHub Actionsワークフローが追加されていました。CIパイプラインが実行されると、Runner上でこのスクリプトが動作し、シークレット収集を開始します。
このため、多くの場合 CIが次に実行されるまで攻撃は表面化しませんでした。
主なターゲットは以下です。
Megalodonが特に狙っていたのが GitHub ActionsのOIDCトークンです。
最近のCI/CD環境では、クラウド認証に OpenID Connect(OIDC)フェデレーションを利用するケースが増えています。これは長期的なAPIキーを保存する代わりに、ワークフローが短期間のIDトークンを取得してクラウドに認証する仕組みです。
この方式は静的な鍵を保存しないため安全性が高いとされています。しかし、もし攻撃者が パイプライン実行中にトークンを盗めば、そのジョブの権限を一時的に偽装できてしまいます。
盗まれたOIDCトークンはクラウドの認証システムから 一時的なアクセス権限に交換できるため、次のようなリスクが発生します。
Megalodonは、サプライチェーン攻撃の焦点が アプリケーションコードから「開発インフラ」へ移っていることを示しています。
CIワークフローを改ざんすることで、攻撃者は次のようなメリットを得ます。
ほぼ同じ時期、GitHubは 別のセキュリティインシデントも公表しました。
そのため、現状では 同時期に発生した別々のサプライチェーン事件として扱われています。
Megalodonは、攻撃の自動化により数千のリポジトリを短時間で侵害できることを示しました。今回の事例から、ソフトウェア開発チームには次のような防御策が重要とされています。
クラウド環境や本番デプロイをCIが直接制御する現代の開発環境では、CI/CDワークフロー自体がソフトウェアサプライチェーン防御の重要な要素になっています。