0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FBI FLASH警告のTeamPCP供給網ワームとAIエージェント設定ファイル汚染:GitHub Actions/CI防御チェックリスト

0
Posted at

Supply-chain worm attack surface across GitHub Actions CI/CD pipelines and AI coding-agent config files

2026年7月2日、FBIがIC3経由でFLASH警告(FLASH-20260702-01)を公開した。npm/PyPIを横断する自己増殖型サプライチェーンワーム群(Mini Shai-Hulud、Miasma ほか)を攻撃グループTeamPCPに帰属させ、その手口としてGitHub Actionsワークフローの乗っ取りと、AIコーディングアシスタント設定ファイルへの隠し命令混入を挙げた。

ここで起きているのは、CI/CDパイプラインとAIコーディングエージェントの設定ファイルが、同時に一次攻撃面になったという転換だ。「依存を入れる」「プロジェクトをエディタで開く」という日常動作が、資格情報窃取とワーム伝播のトリガーになる。同じ攻撃者ツール群にAIゲートウェイの既知脆弱性まで並ぶ。本稿は、公開ソースで確認できる事実だけを起点に、今日CIとエージェント設定で直すべき箇所をチェックリストに落とす。

結論

境界(何が新しく攻撃面か) ニュース上の含意 今日直すこと
GitHub Actionsランナー(pull_request_target・キャッシュ汚染・OIDCトークン実行時抽出) タグpinのままだと差し替えで悪性コードが走りうる 全actionをフルコミットSHAでpinし直す
npm/PyPIの新規バージョン 自己増殖ワームが公開直後に即時伝播 最低リリース経過日数ゲート(FBIの例で7日)を設ける
.cursorrules / CLAUDE.md / .claude/settings.json 等 隠し命令やSessionStartフックが開いた瞬間に実行されうる AI設定ファイルの差分をレビュー必須化し検出を回す
AIゲートウェイ(LiteLLM) KEV入り=実際に悪用され認証回避→RCEに連鎖 CISA期限で即パッチ+管理IFの露出を遮断

ソース1: FBI FLASH警告のTeamPCPワーム

確認できる事実

FBIのFLASH警告は、npmとPyPIをまたぐ自己増殖ワーム群(Mini Shai-Hulud、Miasma)と、認証情報スティーラーSANDCLOCKをTeamPCPに帰属させた。改ざん対象として名指しされたツールにはTrivy、KICS、LiteLLM、Telnyx Python SDKが含まれる。いずれもCI/CD・クラウド・セキュリティワークフローに広く組み込まれるものだ。

規模も具体的だ。Mendの追跡では、Mini Shai-Hulud波は48時間以内に npm/PyPI 横断で172パッケージ・403件の悪性バージョンへ拡大した。侵害された @tanstack/react-router 単体で週約1,270万ダウンロードという流通量を持つ。報道ベースでは1,000社超の環境が影響を受け、約300GBのデータと推定約50万件の認証情報セットが流出したとされる。関連CVEとしてCVE-2026-33634、CVE-2026-48027、CVE-2026-45321、CVE-2025-55182が挙がる。

手口は、GitHub Actionsワークフローの乗っ取りが中核だ。pull_request_targetの悪用、Actionsキャッシュの汚染、ランナー上でのOIDCトークンの実行時抽出により publishトークンを偽造し、侵害されたメンテナが管理する全パッケージへ伝播する。窃取対象はAWS/GCP/Azureのキー、GitHub PAT、HashiCorp Vaultトークン、Kubernetes secret、SSH鍵に及ぶ。

FBIの推奨対策は具体的で、そのまま行動に落とせる。

原文: "Pin GitHub Actions workflows to verified commit SHA hashes rather than floating version tags"/"Enforce a minimum package age threshold of at least seven days"

日本語訳: 「GitHub ActionsワークフローをフローティングなバージョンタグではなくコミットSHAハッシュでpinせよ」「新規バージョン採用前に最低7日の経過日数しきい値を強制せよ」。加えてFLASHは、CI/CDとクラウドの全secret・publishトークンのローテーション、CI/CDサービスアカウントへの最小権限、publish権限を持つ全アカウントへのフィッシング耐性MFA、ランナーの実行時挙動監視を挙げている。(FBI FLASH-20260702-01、securityaffairs報道より)

実務解釈

構造上の要点は二つある。一つは、メンテナ1人の侵害が依存グラフ全体へ波及する点だ。あなたが直接侵害されなくても、依存先の1人が踏まれれば、その人の全パッケージ経由で降ってくる。もう一つは、この波の悪性パッケージが有効なSLSA Build Level 3のprovenance署名を伴っていたこと。つまりprovenance検証は「どのパイプラインが作ったか」は保証するが「そのパイプラインが安全に振る舞ったか」は保証しない。署名が付いているから安全、という運用はここで崩れる。

ソース2: Miasma変種がAIエージェント設定ファイルを汚染する

確認できる事実

2026年6月上旬に観測されたMiasma波(SecurityJoes、Morphisec ほかが分析)は、AIコーディングエージェントの設定ファイルを永続化の足場に使う。悪性パッケージが .cursorrulesCLAUDE.md を投下し、そこにゼロ幅Unicodeの隠し命令を埋め込む。開発者がCursorやClaude Codeでプロジェクトを開くと、エージェントが正当なプロジェクト指示に見えるそれを読み、「セキュリティスキャン」と称してローカルの秘密を持ち出す実装が報告されている。

さらに悪質なのはフックによる永続化だ。.claude/settings.json にSessionStartフック、.gemini/settings.json.vscode/tasks.json(フォルダオープン時実行)、.cursor/rules/setup.mdc、悪性MCPサーバー定義などを仕込む。これらはワイルドカードのマッチャで、開発者がプロンプトを入力する前にドロッパを実行する。マルウェアスキャナがほとんど見ないパスに置かれ、npm uninstallnode_modules の全消去でも生き残る。GitHubの自動対応は、Microsoft/Azure関連49件を含む73リポジトリを約105秒で無効化した。

実務解釈

「AI設定ファイルは読むだけだから安全」という前提は崩れた。ゼロ幅Unicodeは目視では見えず、SessionStartフックはエージェント起動と同時に走る。CLAUDE.md / AGENTS.md / .cursorrules / .claude/settings.json をコードレビューの対象外にしていたなら、その運用は見直す前提に立つべきだ。加えて、MCPツールの出力やWeb取得コンテンツも「非信頼入力」として扱う——エージェントに渡る文字列は、どれも命令注入の経路になりうる。

ソース3: LiteLLM CVE-2026-42271がCISA KEV入り

確認できる事実

CISAは2026年6月8日、AIゲートウェイのLiteLLMのCVE-2026-42271(コマンドインジェクション、CVSS 8.7)を、実際の悪用(in-the-wild)を確認したうえでKnown Exploited Vulnerabilities(KEV)カタログに追加した。MCPサーバーのプレビュー用エンドポイント(POST /mcp-rest/test/connection など)が、stdioトランスポート用の command/args/env を含むサーバー設定をそのまま受け取る点が根本原因で、認証済みのプロキシAPIキー保持者が任意コマンドを実行できる。さらにCVE-2026-48710(Starletteのhost-headerバリデーションバイパス、通称BadHost)と連鎖させると認証を完全に回避し、露出したLiteLLMデプロイに対して認証情報不要のリモートコード実行に至りうる。LiteLLMはFBIのTeamPCP改ざん対象ツールの一覧にも登場する。

実務解釈

KEV入りは、CISAの期限に沿って今すぐパッチを当てる対象であることを意味する。あわせて、管理/adminインターフェースが非信頼ネットワークに露出していないかを監査する。要は、AIゲートウェイを「内部専用の便利なプロキシ」ではなく、インターネットに面した認証境界として扱うということだ。ネットワーク分離、host-header検証やWAF、資格情報ローテーションを、他のインターネット公開エンドポイントと同じ基準で適用する。供給網侵害とゲートウェイ脆弱性が同じ攻撃者ツール群で重なる点が、この複合リスクの厄介さだ。

実装チェックリスト

グループA: GitHub Actions堅牢化

  • 全actionをタグ(@v4など)ではなくフルコミットSHAでpinし直す
  • 各ワークフローで permissions: を宣言し、デフォルトの全権限を最小権限へ絞る
  • pull_request_target の使用箇所を棚卸しし、非信頼PRからのsecret露出経路を潰す
  • Actionsキャッシュの信頼境界を確認する(汚染されたキャッシュを信頼していないか)
  • OIDC subjectのaudience(対象)を限定し、トークンの実行時抽出・悪用の余地を狭める

グループB: 依存供給網

  • 新規バージョンに最低経過日数ゲートを設ける(FBIの例は7日)
  • lockfileを固定し、意図しないバージョン繰り上がりを防ぐ
  • provenance/署名を検証する。ただし今回の波は有効なprovenanceを伴っていた——署名の有無だけで安全と判断せず、公開元の振る舞い監視と併用する
  • 侵害メンテナ由来の異常な公開(短時間の一括publish等)を検知する仕組みを持つ

グループC: 秘密情報

  • CI/CDとクラウドの全キー(AWS/GCP/Azure、GitHub PAT)をローテーションする
  • フィッシング耐性MFAを、publish権限を持つ全アカウントに強制する
  • 最小権限を徹底し、静的な資格情報より一時的な資格情報を優先する
  • HashiCorp Vaultトークン・Kubernetes secretを棚卸しし露出を確認する

グループD: AIエージェント設定

  • .cursorrules / CLAUDE.md / AGENTS.md / .claude/settings.json / .gemini/settings.json の予期しない差分をレビュー必須化する
  • ゼロ幅Unicodeなど不可視文字を検出する(目視に頼らない)
  • SessionStart/フォルダオープン系フック(.vscode/tasks.json 等)と登録済みMCPサーバーを棚卸しする
  • MCPツールの出力とWeb取得コンテンツを非信頼入力として扱う

グループE: ランナー実行時挙動監視

  • ランナー上の実行時挙動(想定外の外部通信・トークンアクセス)を行動ベースで監視する

失敗パターン

  • パターン1: タグ(@v4)pinのまま安心する → 対策: タグは可変。フルコミットSHAでpinし、差し替えによる悪性コード注入を封じる。
  • パターン2: provenance署名があるから安全とみなす → 対策: 今回の波は有効なSLSA Build L3署名を伴っていた。署名は「どのパイプラインが作ったか」の証明で、安全性の証明ではない。振る舞い監視と併用する。
  • パターン3: AI設定ファイルをコードレビュー対象外にする → 対策: CLAUDE.md/AGENTS.md/.cursorrules/.claude/settings.json を差分レビューに含め、不可視文字とフックを検出する。
  • パターン4: 新規依存を即日採用する → 対策: 最低経過日数ゲート(例7日)とlockfile固定で、公開直後のワーム伝播を待ち受けない。
  • パターン5: AIゲートウェイを内部専用と誤認して公開する → 対策: インターネット面の認証境界として扱い、ネットワーク分離・host-header検証・資格情報ローテを適用する。
  • パターン6: 秘密ローテを「疑わしい時だけ」にする → 対策: KEV/FLASH級の警告時は疑いの有無に関わらず全キーをローテーションする定常運用にする。

参考リンク

この記事を書いた人✏️@YushiYamamoto
ITPRODX.com代表 / AIアーキテクト
Next.js / TypeScript / n8nを活用した自律型アーキテクチャ設計を専門としています。
日々の自動化の検証結果や、ビジネス側の視点(ROI等)に関するより深い考察は、以下の公式サイトおよびnoteで発信しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?