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

By 清水 孝郎 - MARCH 17, 2025

SHARE:

本文の内容は、2025年3月15日に Michael Clark が投稿したブログ(https://sysdig.com/blog/detecting-and-mitigating-the-tj-actions-changed-files-supply-chain-attack-cve-2025-30066/)を元に日本語に翻訳・再構成した内容となっております。

2025年3月14日、StepSecurityは、GitHubで広く使用されているActions tj-actions/changed-files に対する侵害を発見しました。このActions は、ファイルの変更を追跡するために数万件のリポジトリで使用されていますが、悪意のある改ざんが行われたことが判明し、公私問わず多くのプロジェクトにリスクをもたらしています。この問題に対して、CVE-2025-30066 が割り当てられました。

何が起こったのか?

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

攻撃の仕組み

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

誰が影響を受けるのか

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

攻撃を検出して軽減する方法

クラウド検知と対応の活用

Falco や Sysdig Secure などのツールは、ランタイムの攻撃を検知するのに効果的です。

  • ランタイム監視:
    • Sysdig Secureは、メモリスキャン活動を即座に検知する機能を提供しています。たとえば、Sysdig Runtime Behavioral Analysis ポリシーに含まれる “Dump Memory using /proc/ Filesystem” ルールは、このような攻撃の検知に対応しています。
  • Falco 検知ルール:
    curl や wget などのコマンドから base64 にパイプされてデコードされる base64 エンコードされたデータをアクティブに検知するには、以下のルールを使用します。
- rule: Inline Base64 Execution by Wget/Curl  
desc: This rule detects base64 being used with piped input. This may indicate an attacker decoding a malicious payload.
condition: >
spawned_process and proc.name=base64 and proc.stdin.type=pipe and proc.pgid.name in (wget, curl)
output: >
Base64 executed with stdin piped with parent %proc.pname on %container.name under user %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 ワークフローに組み込む方法を紹介します。

jobs:
foo:
runs-on: ubuntu-latest
permissions:
contents: read
actions: read
steps:
- name: Start Falco
uses: falcosecurity/falco-actions/start@<commit-sha>
with:
mode: live
falco-version: '0.39.0'
verbose: true
# ...

# Your steps here

# ...
- name: Stop 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 は脆弱なActions を削除しており、プロジェクトがいつ再び利用可能になるかは不明であるため、開発チームはパイプラインの機能を維持するために代替手段を必要とする可能性があります。

まとめ

tj-actions/changed-files GitHub Actions のセキュリティ侵害は、CI/CD環境におけるサプライチェーン攻撃のリスクが高まっていることを示しています。この攻撃の仕組みを理解し、FalcoやSysdig Secureのようなランタイムセキュリティ対策やクラウド検知・対応ツールを活用し、迅速な対応を行うことで、組織は被害を最小限に抑え、機密データを保護することができます。