
2025年3月14日、GitHub Actionで広く利用されている「tj-actions/changed-files」において、重大なセキュリティインシデントを確認しました。その後このインシデントを追跡する為に脆弱性 CVE-2025-30066が登録されました。
セキュリティコンサルティング会社のWiz はこの脆弱性がサプライチェーン攻撃に悪用される可能性があると警告しています。対象かをコマンドで確認し対策する事をお勧めします。
目次
脆弱性の対象バージョン
バージョン1から45.0.7
インシデントの概要
StepSecurity社のセキュリティソリューション「Harden-Runner」による不正検知により、2025年3月14日9:00 AM(PT)/ 16:00(UTC)頃、不審なネットワーク通信が発覚。この調査で、攻撃者は「tj-actions/changed-files」のコードを改ざんし、CI/CD Secretsをビルドログに出力する不正コードを仕込みました。
その後、リポジトリ「tj-actions/changed-files」は削除され、侵害されたアクションによって実行されたスクリプトを保存していた GitHub gist も削除されました。
Wiz は、GitHub Actionsのサプライチェーン攻撃を調査し、reviewdog/action-setup@v1に対する攻撃がtj-actions/changed-filesの侵害に関与していた可能性があることを明らかにしました。
サプライチェーン攻撃の概要
GitHub Actionsを利用した継続的インテグレーション(CI)環境に対する攻撃は、まず「reviewdog/action-setup@v1」の改ざんから始まったとみられています。このアクションは、GitHub上でコードレビューを自動化するために使用されるもので、多くのプロジェクトで導入されていました。
2025年3月11日、攻撃者は「reviewdog/action-setup@v1」のリポジトリに不正なコードを仕込みました。これにより、影響を受けたワークフローでは、実行時に環境変数がダンプされ、機密情報が流出する状態となっていました。
この不正なコードは、リポジトリのワークフロー実行ログ内に機密情報を記録し、結果的に第三者がそれを取得できる状況を生み出していました。
この影響は単体のアクションにとどまらず、「tj-actions/eslint-changed-files」や「tj-actions/changed-files」など、関連するGitHub Actionsにも波及しています。
「tj-actions/changed-files」は、多くのリポジトリで変更されたファイルを検出し後続の処理を実行するための重要なアクションであり、広く利用されていたため、影響範囲が拡大する結果となりました。
その後、GitHubのセキュリティチームが異常な動作を検知し、リポジトリの保守者と連携して問題を修正しましたが、一時的に「reviewdog/action-setup@v1」を利用していたプロジェクトでは、機密情報が流出した可能性が高いと考えられます。
画像:Wiz
影響範囲
このActionは、23,000以上のリポジトリで利用されており、CI/CDのシークレット情報(APIキー、トークンなど)がGitHub Actionsのビルドログに記録され、漏洩のリスクが高まっています。
影響を受けるGitHub Actions
Wiz によると、以下の依存関係のあるアクションのも影響が発生する可能性があると指摘しています。
- reviewdog/action-setup@v1(既に修正済み)
- 依存関係にある以下のアクションも影響を受けた可能性
- reviewdog/action-shellcheck
- reviewdog/action-composite-template
- reviewdog/action-staticcheck
- reviewdog/action-ast-grep
- reviewdog/action-typos
影響を受ける組織
- GitHub Actionsを利用してCI/CDパイプラインを運用している組織
- tj-actions/changed-filesを使用していたプロジェクト
- reviewdog/action-setup@v1を使用していたプロジェクト
- 金融機関など、高価値ターゲットとなるリポジトリを運用している組織
影響を受けるか確認する
この Github クエリを使用して、組織のリポジトリ内の影響を受ける GitHub Actions への参照を検索。
影響を受けるリポジトリが特定された場合は、影響を受けるワークフロー ジョブを書き留めて、「アクション」タブに移動するか、「実行の表示」をクリックします。影響を受ける侵害されたコンポーネントを含み、関連する期間中に実行された GitHub Actions があるかどうかを確認します。
関連するワークフロー ジョブに移動し🐶 Preparing environment …というタイトルの行が表示されている場合は、悪意のあるコードが実行されています。
その中に二重にエンコードされた base64 文字列があるかどうかを確認します。
存在する場合は、悪意のあるペイロードが正常に実行されたことを意味し、影響はリポジトリがパブリックかプライベートかによって異なります。
リポジトリがパブリックの場合は、文字列内のシークレットがワークフロー ログで公開されたことを意味します。できるだけ早くローテーションすることを強くお勧めします。
プライベートリポジトリの場合
プライベートリポジトリの場合は、シークレットが公開されていないことを意味しますが、ローテーションを検討する必要があります。
リポジトリが影響を受けたが、公開されたシークレットがプレフィックスで始まる GitHub トークンのみだった場合 接頭辞: ghs_、これらは 24 時間以内またはワークフロー ジョブが完了すると自動的に期限切れになる短命のトークンの為、
ジョブが中断されて完了しなかった場合を除いて、ghs_
トークンの公開のみで長期的なリスクは限られています。
さらに、ワークフローがカスタム シークレット (例: token: ${{ secrets.MYSECRET }}
) を明示的に参照していない場合、
このインシデントの結果として機密シークレットが侵害される可能性は低くなります。
主なリスクは、影響を受けるワークフロー内で明示的に参照されたカスタム シークレットが潜在的に公開されることです。
セキュリティ設定の強化
サプライチェーン攻撃は、信頼していたツールやアクションが突然悪意のあるものに書き換えられることが特徴です。このリスクを軽減するために、リポジトリのセキュリティ設定を強化することが求められます。
-
GitHub Actionsの実行制限
- 自社で管理しているリポジトリや、公式アクションのみ実行を許可する設定を行う。
allow-listing
を活用し、未知のアクションが実行されないように制御する。
-
GitHub Actionsのバージョン管理
- バージョンタグではなく、特定のコミットハッシュを指定して利用する。
- これにより、アクションが意図せず改ざんされた場合でも、安全なバージョンを維持できる。
-
ワークフローの監視
- 定期的にGitHub Actionsの実行履歴を確認し、異常な挙動がないかをチェックする。
- 不審なネットワーク接続やログ出力がないかを監査し、疑わしいアクションはすぐに停止する。
また、本脆弱性を報告したSecurity は侵害されたアクションstep-security/changed-files の安全な代替品を無料でリリースしました。同社では、ユーザーに「tj-actions/changed-files」のすべてのインスタンスをこの安全な代替品に置き換えることを強く推奨しています。
参照