2025年3月21日更新
このインシデントに関して、以下の2つの追加情報を公に開示できるようになりました。
元の投稿で言及されていた特定の標的はCoinbaseであり、Coinbaseは
coinbase/agentkit
を侵害しようとする試みが失敗に終わったことを確認しました。Wizは攻撃に関連するGitHubのIDを特定しており、攻撃者が仮想通貨エコシステムに関与し、フランス語および英語を使用し、ヨーロッパまたはアフリカの時間帯で活動していることを示唆しています。
この関連性の最初の兆候は、3月15日にSan Tranによって提供されました。さらに以下の証拠が確認されています:
3月13日の
tj-actions/changed-files
へのコミットには、Coinbaseのリポジトリを明示的に標的とするペイロードの変異体が含まれていた3月14日の
coinbase/agentkit
のワークフローログには、Coinbaseの従業員になりすましたコミットに関連する記録があり、同じ攻撃者がリポジトリのサプライチェーンを侵害しようとする試みを示していたchangelog.yml(
tj-actions/changed-files
を使用するワークフロー)が、tj-actions
の侵害から1時間以内に削除され、StepSecurityによる公開開示のはるか前に行われていた
Wizの完全な分析結果は、Coinbaseの責任ある開示チャネルを通じて共有済みです。また、この事象のタイムラインについては、Unit42の公開開示にて確認できます。このレポートは、Wizの非公開レポートとも一致しています。
2. haya14busaは、GitHubの協力を得て、action-setup
インシデントを引き起こした侵害されたユーザーを特定し、対処しました。このアカウントは、以前議論された招待ワークフローによって悪意を持って追加されたものではなく、アカウント自体が侵害されていました。
今後も、情報が更新され次第、責任を持って共有していきます。Wizは、reviewdog
のメンテナーを引き続きサポートし、action-setup
の侵害に関する責任ある開示を行っています。haya14busaやtj-actions
のメンテナーの協力と迅速な対応に感謝します。現在の時点で、彼らはこのインシデントを解決し、今後の攻撃へのリスクを低減したと考えています。
2025年3月19日更新 この問題にはCVE-2025-30154が割り当てられました。
2025年3月19日更新 Wizの開示を受けて、reviewdogのメンテナーがインシデントの詳細な分析と対応策を公開しました。
現時点では、一連のサプライチェーン攻撃が連鎖的に発生し、最終的に特定の高価値ターゲットを狙ったものと考えています。
人気のあるGitHub Actionである tj-actions/changed-files に対するサプライチェーン攻撃により、週末に多くのリポジトリが機密情報を漏えいしました。Wiz Research は、reviewdog/actions-setup@v1 に対する追加のサプライチェーン攻撃を発見しており、これが tj-actions/changed-files の侵害に寄与した可能性があります。現時点では、これは最終的に特定の高価値ターゲットを狙った一連のサプライチェーン攻撃であると考えています。
要約
以前の報告のとおり、広く使用されている GitHub Action tj-actions/changed-files
が悪意のあるペイロードによって侵害され、影響を受けたリポジトリがログ内で機密情報を漏えいしました。その影響で、tj-actions/eslint-changed-files
も同時に侵害されました。これは tj-actions/changed-files
に依存しているためです。
Adnan Khan 氏の情報提供をもとに、Wiz Research は reviewdog/action-setup@v1
の GitHub Action が、tj-actions のインシデントに先立って侵害されていたことを特定しました。認証情報の窃取や CI パイプラインの侵害を防ぐために、直ちに対応する必要があります。
tj-actions のメンテナーは、GitHub の Personal Access Token (PAT) が侵害されたことが原因で、攻撃者によるリポジトリの改ざんを許してしまったと明らかにしています。
私たちは、reviewdog/action-setup
の侵害が、tj-actions-bot PAT
の侵害の根本的な原因である可能性が高いと考えています。tj-actions/eslint-changed-files
は reviewdog/action-setup@v1
を使用しており、tj-actions/changed-files
のリポジトリは Personal Access Token を使用して tj-actions/eslint-changed-files
を実行します。reviewdog/action-setup
は、tj-actions PAT
の侵害とほぼ同じタイミングで侵害されていました。
reviewdog/action-setup
の侵害はこれまで公表されておらず、偶然対処された形跡がありますが、再発のリスクが残っています。このため、tj-actions/changed-files
の再侵害につながる可能性があります
Wiz はこの問題を reviewdog および GitHub に報告しました。
影響を受けた組織への影響は何ですか?
tj-actionsの場合と同様に、侵害されたreviewdogアクションは、それを使用しているCIワークフローに悪意のあるコードを挿入し、ワークフローの機密情報を含むCIランナーのメモリをダンプしました。この結果はtj-actionsのケースと同じですが、ペイロードは異なり、curlを使用してペイロードを取得することはありませんでした。代わりに、ペイロードはbase64エンコードされ、ワークフローで使用されるinstall.shファイルに直接挿入されました。
公開リポジトリでは、機密情報はワークフローログの一部としてすべての人に見えるようになり、ダブルエンコードされたbase64ペイロードとして難読化されていました。現在のところ、攻撃者が制御するサーバーへの機密情報の外部流出は確認されておらず、機密情報は影響を受けたリポジトリ内でのみ確認可能でした。
reviewdog アクションの v1 タグは、3月11日18:42から20:31 UTCの間に悪意のあるコミットに指され、その後、v1 タグは古いコミットに戻されたと考えています。攻撃者は、侵害を隠すために強制的に古いコミットに戻した可能性があり、これは狭い目的を達成し、ステルスを保つことを意図していたことを示唆しています。(編集: この投稿の初期ドラフトでは、これを自動的なバージョンアップと関連付けていましたが、reviewdog メンテナーからのフィードバックに基づいて修正されました)
この侵害により、アクションがキャッシュされ、すでに漏えいした機密情報のリスクが残っているため、引き続き対応が必要です。
どの製品が影響を受けていますか?
2025年3月17日現在、reviewdog/action-setup
アクションの v1 タグのみが影響を受けていることが確認されています。reviewdog/action-setup
のハッシュ固定バージョンを使用しているか、異なるタグに固定しているお客様は影響を受けません。
ただし、このアクションは、以下を含む reviewdog の他の多くのアクションのコンポーネントとして使用されています:
reviewdog/action-shellcheck
reviewdog/action-composite-template
reviewdog/action-staticcheck
reviewdog/action-ast-grep
reviewdog/action-typos
これらの影響を受けた reviewdog/actions
を使用しているお客様は、そのアクションのバージョンに関わらず影響を受ける可能性があります。
これはどうして起こったのですか?
調査は現在も進行中です。攻撃者は、リポジトリのフォークに配置した悪意のあるコードに v1 タグを更新するのに十分なアクセス権を得たことがわかっています。reviewdog GitHub オーガニゼーションは比較的大規模な貢献者ベースを持ち、自動化された招待を通じて積極的に貢献者を追加しているようです。これにより、貢献者のアクセスが侵害されたり、悪意を持って貢献者アクセスが得られたりする攻撃対象の範囲が広がります。
新しい情報が明らかになり次第、このブログ投稿を更新します。
セキュリティチームはどのような対応を取るべきですか?
このGitHubクエリを使用して、組織のリポジトリ内で影響を受けたGitHub Actionsへの参照を見つけます(
yourorg
をGitHub組織の名前に置き換えてください)。影響を受けたリポジトリが識別された場合、影響を受けたワークフロージョブを確認し、「Actions」タブに移動するか、「View Runs」をクリックして、関連する時間枠内に実行された影響を受けたコンポーネントを含むGitHub Actionsがあるかどうかを確認します。
関連するワークフロージョブに移動し、「Run reviewdog/action-setup@v1」ステップを展開します。もし「🐶 Preparing environment ...」という行が表示されている場合、悪意のあるコードが実行されたことになります。その中にダブルエンコードされたbase64文字列が含まれているかどうかを確認します。もし含まれていれば、それは悪意のあるペイロードが正常に実行されたことを意味し、影響はリポジトリが公開か非公開かによって異なります:
公開リポジトリの場合、文字列内の機密情報がワークフローログに公開されて漏えいしたことを意味し、できるだけ早くそれらをローテーションすることを強く推奨します。
非公開リポジトリの場合、機密情報は公開されていませんが、それでもローテーションを検討するべきです。
リポジトリが影響を受けた場合でも、公開された機密情報が ghs_
で始まる GitHub トークンのみであった場合、これらは短期間で有効期限が切れるトークンであり、24時間以内またはワークフロージョブが完了すると自動的に失効します。そのため、ジョブが中断されて終了しなかった場合を除き、ghs_
トークンのみの漏えいによる長期的なリスクは限定的です。
さらに、ワークフローがカスタムの秘密情報(例:token: ${{ secrets.MYSECRET }}
)を明示的に参照していない場合、このインシデントによって機密情報が侵害された可能性は低いです。主なリスクは、影響を受けたワークフロー内で明示的に参照されたカスタム秘密情報が公開される可能性にあります。
もし自組織が影響を受けた場合、何をすべきですか?
影響を受けたアクションの使用を直ちに停止し、可能であれば安全な代替アクションに置き換えてください。
リポジトリのすべてのブランチでアクションへの参照を削除し、メインブランチだけでなく、他のブランチでの実行も防止してください。
漏洩した機密情報はできるだけ早くローテーションしてください。関連するワークフローを削除すると、ログも削除され、機密情報のさらなる露出を防ぐことができます。ただし、削除する前に露出期間のワークフローログをダウンロードしておくことをお勧めします。
今後このようなリスクを防ぐにはどうすればよいですか?
GitHubからの推奨に従い、将来のサプライチェーン攻撃を防ぐために、GitHub Actionsをバージョンタグではなく、特定のコミットハッシュにピン留めしてください。
過去のワークフロー実行を監査し、疑わしい活動がないか確認してください。ログで異常なアウトバウンドネットワーク要求がないかをチェックし、CIランナーのログが公開されているリポジトリのレビューを優先してください。機密情報がログに露出している可能性があります。
GitHubのホワイトリスト機能を使用して、承認されていないGitHub Actionsの実行をブロックし、GitHubを設定して信頼されたアクションのみを許可するように構成してください。
Wizはどのように支援できますか?
Wiz Sensorの顧客は、CIワークロードにデプロイされたSensorを使用して、この攻撃に関連する悪意のある活動(例えば、プロセスメモリのダンプ)を検出できます。
Wiz Defendの顧客は、GitHub監査ログが有効になっている場合、悪意のある資格情報の悪用によって引き起こされる可能性のある二次的な悪意のある活動(例えば、ワークフローログの削除や異常なボットによるマージ)から保護されています。
Wizの顧客は、追加機能が提供され次第更新されるこの攻撃に関するThreat Intel Centerのアドバイザリーを参照することもできます。