2026年3月、ML開発者の多くがCI/CDパイプラインで使っていたセキュリティスキャナー「Trivy」が、認証情報を盗むマルウェアに変えられました。

https://nvd.nist.gov/vuln/detail/CVE-2026-33634

脆弱性番号はCVE-2026-33634。GitHubがCNAとして付与したCVSSスコアは9.4(Critical)で、CWE-506(悪意あるコードの埋め込み)に分類されています。

この記事でわかること:

  • 攻撃者がどのようにTrivyの配布経路を乗っ取ったか
  • SSH鍵・AWSクレデンシャル・Kubernetes設定など5種類の認証情報が狙われた理由
  • PyTorchチームが特に大きな被害を受けた背景
  • 安全なバージョンと今すぐ実施すべき対応手順

Trivyはなぜ狙われたのか

Trivyは、コンテナイメージやファイルシステム、IaC(Infrastructure as Code)テンプレートの既知の脆弱性を検出するオープンソーススキャナーです。Aqua Securityが開発・管理しており、クラウドネイティブ開発の現場で広く採用されています。

問題は、CI/CDパイプラインにおけるTrivyの立ち位置にあります。Trivyはスキャンを実行するために、Dockerイメージや各種設定ファイルへのアクセスを必要とします。その性質上、クラウドAPIキーやKubeconfig、SSHキーが存在するランナー上で動作することが多く、「守るために最も機密情報に近い位置にある」ツールになっていました。

攻撃者グループ「TeamPCP」はこの構造を逆手に取りました。

攻撃のタイムライン

侵害は2026年2月下旬に始まっています。最初の足がかりは、Trivyリポジトリのワークフローに含まれていたpull_request_targetの安全でない使い方でした(参考)。このパターンはフォークのコードを信頼されたコンテキストで実行できる状態を作り出し、攻撃者がリリースパイプラインへのアクセスを確立することを許しました。

3月1日、Aqua Securityは初期インシデントを公開し、クレデンシャルのローテーションを実施しました。しかしこのローテーションはアトミックではなく、攻撃者は有効なアクセスを保ったまま潜伏を続けました。

そして3月19日17:43 UTCに実行フェーズへ突入します。

日時(UTC) 内容
3月19日 17:43 trivy-actionの76/77タグが悪意あるコードに上書き、setup-trivyの全7タグも侵害
3月19日 18:22 悪意あるTrivy v0.69.4がリリース
3月19日 21:42〜20日 05:40 Aquaが侵害を検知し、安全バージョンを公開
3月19〜23日 Docker Hubに0.69.5、0.69.6、latestとして追加の悪意あるイメージが公開

Docker Hubへの追加イメージはAquaの認証情報を使って公開されたため、Docker Hub自体のインフラは侵害されていません。ただしlatestタグを使っていたチームは、一度クリーンアップが行われた後にも再度汚染されたイメージを引いた可能性があります(Docker公式発表)。なお攻撃者はv0.70.0のリリースも試みましたが、タグのプッシュ前に中断されています。ログ上で0.70.0の参照が残っている場合も、侵害ウィンドウ内の活動として調査対象に含めるべきです。

MLチームが標的の中心にいた理由

PyTorchを使う機械学習チームは、学習用DockerイメージをCI/CD上でビルドしてからGPUクラスターやS3の学習データストアにデプロイするワークフローを持っていることが多いです。このパイプラインにTrivyを組み込んでいた場合、ランナー上には次のような認証情報が集中していました。

  • S3バケットへのAWSアクセスキー
  • GPUクラスター(Kubernetes)へのkubeconfig
  • プライベートイメージリポジトリへのDockerトークン
  • コードホスティングや訓練サーバーへのSSHキー

PyTorchのエコシステムには、2022年にもPyPI上のtorchtritonパッケージへの依存関係を悪用した侵害があります。今回のTrivyケースはベクターが違いますが、「MLツールチェーンのサードパーティ依存は攻撃の入口になりうる」という教訓は共通しています。

盗まれた5種類の認証情報とリスク

SSHキーは、対応する公開鍵が登録されているすべてのサーバーへパスワードなしでアクセスできます。訓練サーバーやGitHub/GitLabへの直接ログインに使われることが多く、侵害の影響範囲が広いのが特徴です。

AWSクレデンシャルは、紐づくIAMポリシーに応じたあらゆる操作を許可します。長期有効なアクセスキーは、CloudTrailに異常なAPIコールが現れるまで数週間気づかれないこともあります。

Kubeconfigにクラスター管理者コンテキストが含まれている場合、クラスター全体への書き込み権限を与えます。推論エンドポイントの改ざんや、Kubernetes Secretsに保存されたモデルウェイトの抜き取りが可能になります。

Dockerトークンはプライベートレジストリへのプッシュに使えます。攻撃者がバックドア入りのイメージをプッシュすれば、そのイメージを引いたすべてのシステムが二次的に侵害されます。

暗号通貨ウォレットファイルは、ブロックチェーン上の転送が取り消せないため5種類の中で最も即時性の高いリスクです。ファイルが平文か弱いパスフレーズで保護されていた場合、すでに資金が移動している可能性があります。

安全なバージョンと今すぐやる対応

まず安全なバージョンを確認します(GitHub Advisory)。

  • Trivyバイナリ・イメージ: v0.69.3以下
  • trivy-action: v0.35.0 またはコミット57a97c7
  • setup-trivy: v0.2.6 またはコミット3fb12ec

3月19日〜23日の間にTrivyを使っていたパイプラインがある場合、以下の順で対応します。

  1. SSHキーを再生成し、authorized_keysと各プラットフォームの登録を更新する
  2. AWSアクセスキーを新規作成し、IAMポリシーを最小権限に絞り、CloudTrailで当該期間の異常コールを確認する
  3. kubeconfigを差し替え、サービスアカウントトークンを再発行し、RBACポリシーに権限昇格の痕跡がないか確認する
  4. Dockerレジストリのクレデンシャルを無効化し、不審なイメージプッシュがないか確認する
  5. 暗号通貨ウォレットはエアギャップ環境で新規生成したウォレットに資産を移動する

長期的な対策として、GitHub ActionsのタグによるAction参照をフルコミットSHAへの固定に切り替えることが有効です。GitHubの公式ドキュメントはタグが移動・削除されうることを明示しており、SHAによる固定を推奨しています(GitHub Docs)。今回の侵害はまさに、mutableなタグへの依存が攻撃者に悪用される典型的なケースです。

セキュリティツールへの過信が招くリスク

セキュリティスキャナーは「守るためのもの」として、本番コードとは異なる審査なしに導入されることが少なくありません。しかしCI上で実行されるスキャナーは、組織内で最も認証情報が集まる環境の一つで動作しています。

TeamPCPはその構造を正確に理解した上で、TrivyだけでなくCheckmarx KICSやLiteLLMといった「開発者が信頼するツール」を標的に侵害活動を展開しました。SolarWinds Orion侵害(2020年)と構造は同じで、特権的なアクセスを持つ監視・セキュリティツールを攻撃のデリバリー経路に変えるアプローチです。

MLエコシステムにとってCVE-2026-33634が突きつけるのは、モデルのコードや訓練ライブラリだけでなく、パイプライン上のすべてのユーティリティが攻撃対象になりうるという認識です。ツールのバージョン固定、最小権限での実行、継続的な監視が、現在のベースラインになっています。