セキュリティ
GhostAction はもう CI シークレットだけでは満足しない。いまは Git 履歴のすべてを読む
GitGuardian、Socket、StepSecurity が今週、2025年から続く GitHub Actions のサプライチェーン攻撃に関する調査結果をそれぞれ公開した。新しい版は名前付きの CI シークレットを盗むだけでなく、コミット履歴全体を掘り返す。だからこそ昨年のローテーション指針ではもう足りない。
MAI
今週、GitGuardian、Socket、StepSecurity の3つの調査チームが、約30時間のあいだに同じ GitHub サプライチェーン攻撃の調査結果を相次いで公開した。いずれも 2025年9月に初めて報告された GhostAction を扱っており、GitGuardian のデータはそれが一度も止まっていなかったことを端的に示している。「当社のデータは、GhostAction が実際には止まっていなかったことを示している」
変わったのは攻撃の届き方ではない。注入されたコードが何を持ち去るかである。
2025年版は、リポジトリが GitHub Actions ワークフローで既に参照しているシークレットの名前を読み取り、その値を外部に送信していた。いま稼働している版はそれに加えて、作業ツリーと全コミット履歴を走査し、一連のパターンに一致する資格情報を探す。AWS のアクセスキーとセッショントークン、GitHub と GitLab のトークン、Google・Firebase・GCP のキー、Slack と SendGrid のキー、そして Anthropic、OpenAI、OpenRouter の API キーである。ファイル名は security-audit.yml または github_actions_security.yml で、メンテナー本人の ID でデフォルトブランチへ直接コミットされる。だからレビューを通らない。Socket の言葉を借りれば:
このワークフローにセキュリティ上の機能は一切ない。
3つのデータセットは、それぞれ別のものを数えている
| 調査チーム | 報告された期間 | 範囲 |
|---|---|---|
| GitGuardian | 2026年8月31日〜9月30日 | 373 のユーザーおよび組織が所有する 772 の公開リポジトリにワークフローが押し込まれた。注入ファイルが名前を挙げたシークレットは 2,577 件 |
| Socket | 2026年10月8日 | 侵害された2つのメンテナーアカウント経由で 346 リポジトリ(henrywoo 配下 318 件のうちソース 39 件・フォーク 279 件、kitao 配下 27 件)、加えて uber/athenadriver |
| StepSecurity | 2026年10月9日時点 | デフォルトブランチに悪性ワークフローが生きているリポジトリ 378 件。うち約 182 件が履歴走査型 |
これらの数値は別々のものを数えている。ある期間内の注入件数、1日の掃討で到達されたリポジトリ数、デフォルトブランチに現存するファイル数であり、単純に足し合わせるべきものではない。The Hacker News は10月9日、Socket の調査をまとめて、10月7日以降に 500 を超えるアカウントが数万のリポジトリへこのワークフローをコミットしたと報じた。これは各ベンダーの投稿にある数字より一桁大きく、最も慎重に扱うべき数値である。初期侵入は3者の説明すべてで平凡だ。メンテナーが漏洩させた個人アクセストークンであり、おそらく情報窃取マルウェアのログ由来である。Socket は、休眠状態のリポジトリも稼働中のものと一緒に巻き込まれており、これは「選別した標的設定ではなく、自動列挙と整合する」と指摘している。
昨年の復旧手順では、今年の攻撃を覆えない
これが能力変化の実務上の帰結であり、Socket の表現が最も的を射ている。
Actions シークレットのローテーションは、コミットされた資格情報の露出に対して何の効果もなく、作業ツリーの走査は Actions シークレットの露出に対して何の効果もない。
露出は2種類あり、対応も2つに分かれる。2025年の報告を読んで Actions シークレットをローテーションしたチームは、そのうち一方を片付けたにすぎない。2023年にブランチへコミットされ1週間後に削除された鍵は、いまも履歴の中にあり、チェックアウトできるものすべてから読み取れる。シークレットストアをいくらローテーションしても、そこには届かない。
ワークフローが何を狙っていたかも重要だ。GitGuardian が集計した 2,577 件のシークレットの内訳は、SSH 鍵とデプロイサーバーの資格情報(446 件)を筆頭に、Azure の資格情報(218 件)、コンテナレジストリの資格情報(142 件)、データベースの資格情報(112 件)、AWS のアクセスキー(106 件)が続く。これはパッケージ公開権限にとどまらず、インフラへのアクセスである。
被害半径を決めるのはフォーク
1つのアカウント経由で到達された 318 リポジトリのうち、279 件がフォークだった。フォークはワークフローファイルを引き継ぎ、Actions が有効であれば実行する。感染した上流から後に作られたフォークも、それを継承する。したがって上記のリポジトリ数はいずれも下限値である。
名前が挙がったなかで露出が最も大きいのは kitao/pyxel だ。スター 18,420、フォーク 966、PyPI と crates.io の両方で配布され、Actions シークレットに公開用トークンを持つ。Socket は現時点でいずれのレジストリにも悪性バージョンは出ていないと報告している。この「現時点で」は実質的な意味を持つ。公開用の資格情報は、誰かがローテーションするまで使える状態のままだ。
uber/athenadriver はガバナンスの事例である。組織が所有するリポジトリが、プロジェクトの原作者として個人が書き込み権限を保持していたために到達された。組織は、自分たちへプッシュできる個人アカウントすべてのセキュリティ水準を引き継ぐ。
検知は機能した。片付けは機能しなかった
GitGuardian は 605 リポジトリから 3,669 件のワークフロー実行を収集した。実際に走ったのは 32 リポジトリの 499 件だけで、残りの大半は GitHub が承認待ちで保留した。完了したのはそのうち 336 件で、13 リポジトリから 26 件のシークレットが外部へ送られた。プラットフォームの承認ゲートは、設計どおりの働きをおおむね果たしている。
そのうえで、10月5日時点で実質的に清掃されていたのは 772 リポジトリのうち 124 件、16 パーセントにすぎない。問題は可視性ではなかった。対応すべき人々が対応しなかったことである。
GitGuardian はさらに、GhostAction の被害を受けた 13 のリポジトリが、少なくとも4つの無関係なキャンペーンにまたがって Actions 経由の暗号資産マイニングにも使われていたことを確認した。スター約 6,000 のプロジェクト kuafuai/DevOpsGPT の Docker イメージにはマイナーが埋め込まれており、今回の波の最初の投下より約1日半前にコミットされ、10月4日に差し戻された。同社はこのマイナーを GhostAction の運用者に帰属させてはおらず、より有用な結論を示している。「侵害された1つの開発者アカウントは、互いに無関係な複数の攻撃者に悪用されうる」
公開リポジトリを保守している、あるいは依存している場合
2026年8月31日まで遡り、すべてのブランチとフォークで2つのワークフローファイル名を確認すること。いずれかが存在すれば、そのリポジトリは侵害されたものとして扱う。プッシュを許した GitHub の資格情報は、ローテーションではなく失効させる。Actions シークレットはすべて入れ替える。そのうえで全ブランチ・全タグの履歴を走査し、見つかったものも入れ替える。公開用トークンを差し替えるまで、レジストリへのリリースは止めておく。侵害指標と遮断すべき送信先アドレスは、3件のアドバイザリに記載されている。
Sources: GitGuardian — The campaign that never stopped: tracking GhostAction from 2025 to 2026 · Socket — New GhostAction Wave Hits Hundreds of Repos, Expanding Beyond CI/CD Secrets to Cloud Credentials · StepSecurity — GhostAction Returns: Malicious "Security Audit" Workflows Now Mine Credentials from Entire Git Histories · The Hacker News — Credential-Stealing GitHub Actions Workflows Planted in Tens of Thousands of Repositories