「tj-actions/changed-files」サプライチェーン攻撃(CVE-2025-30066)の検知と緩和

Image

2025年3月14日、StepSecurityが侵害を発見しました。対象は人気のGitHub Actionであるtj-actions/changed-filesです。何万ものリポジトリがこのアクションを使用してファイル変更を追跡しており、改ざんされていたことが判明したため、パブリック/プライベート双方のプロジェクトにリスクをもたらします。この問題にはCVEが割り当てられています:CVE-2025-30066

何が起きたのか?

  • 侵害日:
    • 攻撃は2025年3月12日に実行されました。
  • 影響を受けたコンポーネント:
    • Actionの機能に影響する悪意あるコミットがtj-actions/changed-filesリポジトリに混入しました。現在、このリポジトリは利用できません。
  • 悪意ある活動:
    • 攻撃者は、base64でエンコードされた指示を含むNode.js関数を注入しました。これらの指示は、認証情報を探すためにGitHub Runnerのメモリをスキャンするよう設計されたPythonコードをダウンロードします。
    • この事例では、盗まれたデータはGitHub Actionのビルドログに単に出力されました。別のコードの亜種(Flankプロジェクト内)では、データはPOSTリクエストでGitHub Gistへ送信(流出)されました。

攻撃の仕組み

  • 悪意あるコードの注入:
    • base64エンコードされたペイロードを持つNode.js関数がアクションに挿入されます。
  • ペイロードのダウンロード:
    • base64ペイロードをデコードすると、Github gistから追加のPythonコードをダウンロードするスクリプトが現れます。
  • メモリスキャン:
    • PythonスクリプトはGitHub Runnerのプロセス(具体的には「Runner.worker」プロセス)を特定し、そのメモリマッピングを開いて、正規表現を用いて機密性の高い認証情報を検索します。
  • データの流出:
    • 結果はGitHub Actionのビルドログに出力され、保存されます。攻撃者がシークレットを抽出するには、これらのログへアクセスできる必要があります。

Image

悪意あるPythonコード

影響を受けるのは誰か?

  • パブリックリポジトリ:
    • 2025年3月12日 00:00から2025年3月15日 12:00(UTC)の間に、侵害されたバージョンのtj-actions/changed-filesを使用したプロジェクトは高リスクです。これらのケースでは、機密性の高い認証情報が公開ログを通じて露出した可能性があります。
  • プライベートリポジトリ:
    • 露出リスクはやや低いものの、影響を受けたアクションを使用しているプライベートリポジトリは、シークレットが侵害された可能性があるものとして扱うべきです。

攻撃を検知し緩和する方法

Cloud Detection & Responseによる検知

FalcoやSysdig Secureのようなツールは、実行中の攻撃を検知するのに有効です。

  • ランタイム監視:
    • Sysdig Secureは、メモリスキャン活動に対する即時利用可能な検知を提供します。たとえば、Sysdig Runtime Behavioral Analysisポリシー内の「Dump Memory using /proc/ Filesystem」ルールです。

Image

  • Falco検知ルール:
    curlやwgetのようなコマンドからパイプで渡されたbase64エンコードデータを、base64でデコードする動作を能動的に検知するには、以下のルールを使用してください:
- rule: Inline Base64 Execution by Wget/Curl  
desc: このルールは、パイプ入力とともにbase64が使用されていることを検知します。これは攻撃者が悪意あるペイロードをデコードしている兆候である可能性があります。  
condition: > 
    spawned_process and proc.name=base64 and proc.stdin.type=pipe and proc.pgid.name in (wget, curl)  
output: >
    stdinがパイプされた状態でbase64が実行されました。親プロセスは%container.name上の%proc.pname、ユーザーは%user.name(proc.name=%proc.name proc.exepath=%proc.exepath proc.pname=%proc.pname proc.pcmdline=%proc.pcmdline gparent=%proc.aname[2] ggparent=%proc.aname[3] gggparent=%proc.aname[4]  image=%container.image.repository user.name=%user.name user.loginuid=%user.loginuid proc.cmdline=%proc.cmdline fd.name=%fd.name container.id=%container.id evt.type=%evt.type evt.res=%evt.res proc.pid=%proc.pid proc.cwd=%proc.cwd proc.ppid=%proc.ppid proc.sid=%proc.sid user.uid=%user.uid user.loginname=%user.loginname group.gid=%group.gid group.name=%group.name container.name=%container.name)  
priority: WARNING

Falco Actionsの統合

Falco Actionsは、CI/CDワークフローをリアルタイムで監視し、潜在的な脅威を検出するオープンソースプロジェクトです。不正なネットワーク接続やファイルアクセスなどの不審な活動を検知できます。GitHub Actionsのワークフローに組み込む方法は次のとおりです。

Image

jobs:
  foo:
    runs-on: ubuntu-latest
permissions:
      contents: read
actions: read
steps:
    - name: Falcoを開始
uses: falcosecurity/falco-actions/start@<commit-sha>
with:
        mode: live
        falco-version: '0.39.0'verbose: true    # ...
    # ここにあなたのステップを追加
    # ...
    - name: Falcoを停止
uses: falcosecurity/falco-actions/stop@<commit-sha>
with:
        mode: live
verbose: true

露出したシークレットの緩和

この悪意ある活動を検知することに加え、露出したシークレットのリスクを低減するために、包括的な是正戦略を実装することが重要です。以下の対応を直ちに実施してください:

  1. 影響を受けたリポジトリの特定:組織内でtj-actions/changed-filesの全バージョンを使用しているすべてのプロジェクトを特定するため、監査を実施します。
  2. パブリックリポジトリを直ちに是正:2025-03-12 00:00から2025-03-15 12:00(UTC)の間にワークフローが実行されたパブリックリポジトリでは、すべてのシークレットを直ちにローテーションしてください。侵害されたものとして扱うべきです。攻撃者は露出したシークレットを積極的にスキャンしている可能性が高いです。
  3. プライベートリポジトリへの対応:脆弱なアクションを使用しているプライベートリポジトリについては、パブリックリポジトリより低い優先度でシークレットをローテーションします。
  4. 代替手段の実装:GitHubが脆弱なアクションを削除しており、プロジェクトがいつ再び利用可能になるか不明なため、パイプライン機能を維持するには開発チームが代替手段を必要とする可能性があります。

結論

tj-actions/changed-files GitHub Actionの侵害は、CI/CD環境におけるサプライチェーン攻撃リスクの増大を浮き彫りにしています。攻撃のメカニズムを理解し、FalcoやSysdig Secureのようなランタイムセキュリティ制御やクラウド検知・対応ツールを活用し、迅速な是正措置を講じることで、組織は潜在的な被害を緩和し、機密データを保護できます。

翻訳元: https://www.sysdig.com/blog/detecting-and-mitigating-the-tj-actions-changed-files-supply-chain-attack-cve-2025-30066

ソース: sysdig.com