ssecutils
Security / Browser-native guide

GitHub Actions サプライチェーン攻撃 - tj-actions/GhostAction/Megalodon の手口と対策

11Zero tracking reading surface

GitHub Actions が狙われる理由

GitHub Actions は、コードのビルド・テスト・デプロイを自動化する CI/CD プラットフォームです。ワークフローはリポジトリの .github/workflows/ に YAML ファイルとして置かれ、push やプルリクエストをトリガーに自動実行されます。

攻撃者が GitHub Actions を狙う理由は単純です——ワークフローは クラウド認証情報・API キー・デプロイトークンなど、本番環境への鍵が集まる場所だからです。npm/PyPI のサプライチェーン攻撃が「パッケージ経由でインストール時に実行」を狙うのに対し、GitHub Actions 攻撃は CI/CD パイプラインそのものに侵入してシークレットを抜く手口です。2025年はこの手口による大規模インシデントが3件立て続けに発生しました。

2025年の主要インシデント

① tj-actions/changed-files(CVE-2025-30066)— 2025年3月

何が起きたか: GitHub Actions マーケットプレイスで人気 No.1 クラスの Action である tj-actions/changed-files(PR で変更されたファイルを検出するツール)のリポジトリが侵害されました。攻撃者はタグ v1〜v45.0.7 を悪性コミットへ書き換え、2.3万件以上のリポジトリのワークフロー実行時に、Runner のメモリ上のシークレットをワークフローログへ出力させました。

侵入経路: Coinbase のリポジトリから盗んだ GitHub トークンを使って、攻撃者は renovate[bot](依存更新ボット)になりすましてコミットを押し込みました。正規ボットの自動マージ設定が踏み台にされ、人間のコードレビューを通らずにマルウェアが紛れ込みました。

盗まれた情報: GitHub PAT(Personal Access Token)、npm トークン、AWS アクセスキー、RSA 秘密鍵などが、ワークフローログ(パブリックリポジトリでは世界公開)に Base64 エンコードで書き出されました。

根本原因: アクションをバージョンタグ(v45)で参照していたため、タグの指す先を書き換えられると全利用者が影響を受けました。v46.0.1 で修正済み。CISA も緊急アラートを発出しました。

② GhostAction キャンペーン — 2025年9月

何が起きたか: GitGuardian が2025年9月5日に発見したキャンペーン。攻撃者は 327個の GitHub ユーザーアカウントを乗っ取り、817リポジトリに悪性のワークフローファイルを直接コミットしました。「GitHub Actions Security」という無害そうなファイル名で偽装し、CI/CD 実行時にシークレットを外部サーバーへ送信させる仕組みです。

被害規模: PyPI トークン、npm トークン、DockerHub 認証情報、GitHub トークン、AWS アクセスキーを含む 3,325件のシークレットが窃取されました。窃取したシークレットの悪用(AWS キーや DB 認証情報の実際の使用)も確認されています。

侵入経路: アカウント乗っ取りにはインフォスティーラーやフィッシングが使われたと推定されています。正規のリポジトリオーナーのアカウントで操作するため、外部からは正規の変更に見えます。

③ Megalodon — 2025年5月

何が起きたか: 2025年5月18日、約6時間の間に 5,561リポジトリ・5,718件の悪性コミットが自動化ツールで一斉に投入されました。コミットメッセージは CI メンテナンス作業を装い、悪性ワークフローを仕込みました。感染が確認された時点で、攻撃者の C2 サーバーには数十ギガバイトの盗取データが蓄積されていました。

標的データ: AWS/GCP/Azure 認証情報、SSH 秘密鍵、Docker/Kubernetes 設定、データベース接続文字列、GitHub/GitLab トークン、その他すべての CI 環境変数が対象でした。

感染の起点: オープンソースのチャットプラットフォーム Tiledesk の npm パッケージが汚染され、そのリポジトリが悪性ワークフローを含む状態で公開されたことが引き金でした。パッケージ汚染と GitHub Actions 攻撃が連鎖した複合型サプライチェーン攻撃です。

攻撃手口の整理: 3つの侵入パターン

パターン侵入経路代表インシデント
Action リポジトリの乗っ取りAction 作者のアカウントや CI トークンを奪い、Action 自体に悪性コードを仕込むtj-actions/changed-files
利用者リポジトリへの直接コミットリポジトリオーナーのアカウントを奪い、悪性ワークフローを追加・改ざんするGhostAction
自動化による大量投入ボットで多数リポジトリへ一斉にワークフローをプッシュMegalodon

タグ可変性の問題——なぜ SHA ピンが必要か

GitHub Actions でサードパーティの Action を使うとき、多くの開発者はこう書きます:

- uses: tj-actions/changed-files@v45  # タグ指定

Git のタグは後から書き換えられます。攻撃者が Action リポジトリへの書き込み権限を得ると、v45 タグを悪性コミットへ付け替えるだけで、全利用者が次回実行時に悪性コードを取り込みます。これが tj-actions で起きたことです。

対して、コミット SHA で固定(SHA ピン)すると、ハッシュは内容に紐付くため書き換えが不可能です:

# タグ指定(危険 — タグが書き換えられると悪性コードを取り込む)
- uses: tj-actions/changed-files@v45

# SHA ピン(安全 — ハッシュが変わると動かないので改ざんに気づける)
- uses: tj-actions/changed-files@0e58ed8b...  # 完全な 40 文字の SHA

2025年8月、GitHub は SHA ピン強制ポリシー(ピンされていない Action を使うとワークフローが失敗する設定)と、特定 Action の即時ブロック機能(!compromised-org/action)を追加しました。

対策

1. Action を SHA でピンする

サードパーティの Action は必ず 完全な 40 文字のコミット SHA で参照します。タグやブランチ名(main)はいずれも可変で危険です。RenovateDependabot は SHA ピンのまま自動更新 PR を出せます。

2. OIDC で短命トークンを使う

AWS・GCP・Azure などクラウドへのデプロイに長命な認証情報(アクセスキーなど)をシークレットに保存せず、OIDC(OpenID Connect)でワークフロー実行ごとに短命トークンを取得します。トークンが盗まれても数分〜数時間で失効するため、被害を限定できます。

# GitHub Actions で AWS OIDC を使う例
permissions:
  id-token: write  # OIDC トークン取得に必要
  contents: read

steps:
  - uses: aws-actions/configure-aws-credentials@<SHA>
    with:
      role-to-assume: arn:aws:iam::123456789:role/github-actions
      aws-region: ap-northeast-1
      # アクセスキーの代わりに OIDC で一時認証情報を取得

3. GITHUB_TOKEN の権限を最小化する

デフォルトで GITHUB_TOKEN には read-write の広い権限が付いています。ワークフローに必要な権限だけを明示的に指定します:

permissions:
  contents: read   # 必要な権限だけを列挙
  pull-requests: write
  # その他は暗黙的に none になる

4. ワークフローファイルをコードと同等にレビューする

.github/workflows/ への変更は、アプリケーションコードと同じレビュープロセスを通します。GhostAction や Megalodon は「無害な CI 設定ファイルに見える」形で投入されました。ワークフロー変更は CODEOWNERS でシニアメンバーの承認必須にすることを検討します。

5. サードパーティ Action の使用を絞る

マーケットプレイスの Action は、実体は誰かの個人リポジトリです。本当に必要なものだけを使い、メンテナーが少ない・更新が止まっているものは GitHub 公式 Action や社内 Action で代替します。

6. シークレット漏洩を早期検知する

GitHub の Secret scanning(デフォルト有効)を確認します。GitGuardian などの外部サービスも、漏洩したシークレットがワークフローログに流れた際に検知・アラートを出せます。検知したらトークンをすぐに失効・ローテーションします。

まとめ

2025年の tj-actions/changed-files・GhostAction・Megalodon の3件は、GitHub Actions が CI/CD パイプラインに組み込まれるほど、そこに集まるシークレットが攻撃者にとって魅力的なターゲットになることを示しました。共通する防御の核心は ① SHA ピンで Action の書き換えを無効化、② OIDC で長命なシークレットを排除、③ 最小権限でトークンの影響を限定する——の3点です。

npm/PyPI パッケージ経由の攻撃パターンはソフトウェアサプライチェーン攻撃、自己増殖ワームの詳細はShai-Hulud 詳解も合わせてご覧ください。

※ 本記事の事件概要・数値・タイムラインは Unit42・GitGuardian・StepSecurity・CISA・SecurityWeek の公表内容に基づきます。対応時は最新の公式情報を確認してください。

Related reading

関連記事

Security11
TeamPCPがOSSからAWSへ — セキュリティツール汚染で実現するクラウド鍵の大量窃取2026年3〜5月に発覚したTeamPCPによるサプライチェーン攻撃。Trivy・KICS・LiteLLMなどDevSecOpsツールに悪性コードを注入し、AWSアクセスキー・Kubernetesトークン・GitHub PATなどを自動収集してクラウド環境への二次侵害へ連鎖した攻撃の全体像と対策を解説します。
Security10
Fogランサムウェアが「拡散すれば無料復号」の前代未聞の要求 — VPN侵害とLNKフィッシングの実態2026年に100件超の被害を出したFogランサムウェアが「マルウェアを他者に拡散すれば身代金を免除する」という前代未聞の手口を採用。VPNクレデンシャル悪用・BYOVDによるEDR無効化・二重恐喝の仕組み、組織が今すぐすべき対策を解説します。
Security11
APT28が新マルウェアPRISMEXでNATO防衛サプライチェーンを標的 — ステガノグラフィとCOMハイジャックの脅威ロシア国家系APT28(Pawn Storm)が2026年に展開した新マルウェアスイートPRISMEXを解説。画像内にペイロードを隠すステガノグラフィ、COMハイジャックによる永続化、CVE-2026-21509悪用、ウクライナ・NATO加盟国の防衛インフラへの標的型侵害の手口と対策をまとめます。
Security9
Foxconn北米工場がNitrogenランサムウェアの標的に — Apple・Nvidia設計書8TB流出か2026年5月にFoxconnの北米工場がNitrogenランサムウェアに侵害され、8TB超のファイルが盗まれた事案を解説。Nitrogen の技術的特徴、EDR無効化手法、身代金を払っても復号できない欠陥、製造業サプライチェーンへの教訓を整理します。