ラボまとめコラムニュース
ブログ/記事一覧/セキュリティツール「Trivy」が3度ハッキングされた―守る側のツールが破られたらどうすればいいのか
trivy-compromised-three-times-cover

セキュリティツール「Trivy」が3度ハッキングされた―守る側のツールが破られたらどうすればいいのか

セキュリティスキャナーTrivyが3週間で2度ハッキングされた。1回目はAI自律エージェント、3回目はTeamPCPによるクレデンシャル窃取。GitHub Actionsの構造的脆弱性が浮き彫りに。

ニュース
kkm-horikawa

kkm

Backend Engineer / AWS / Django

2026.03.215 min238 views
この記事のポイント

セキュリティスキャナーTrivyが3週間で2度ハッキングされた。1回目はAI自律エージェント、3回目はTeamPCPによるクレデンシャル窃取。GitHub Actionsの構造的脆弱性が浮き彫りに。

Trivyとは何か ― 守る側のツールが狙われた

Trivyは、Aqua Security(イスラエルのセキュリティ企業)が開発するオープンソースのセキュリティスキャナーです。GitHubで32,000以上のスターを持ち、年間1億回以上ダウンロードされています。ソフトウェアの脆弱性を検出するツール、つまり「守る側の道具」です。

そのTrivyが、2026年2月下旬から3月にかけて、3週間で2度ハッキングされました

1回目の攻撃者は、AIが自律的に動くエージェントでした。2回目は「TeamPCP」と名乗る人間の攻撃者グループ。いずれもGitHub Actions(GitHubの自動実行機能)の構造的な弱点を突いています。

1回目の侵害で何が起きたか ― AIが自律的にリポジトリを乗っ取った

2026年2月20日、GitHubに「hackerbot-claw」というアカウントが作成されました。プロフィールには「autonomous security research agent powered by claude-opus-4-5」と書かれていました。Claude Opus 4.5(Anthropic社の大規模言語モデル)を使ったAI自律エージェントです。

このAIは、GitHubの7つのオープンソースリポジトリに対して、それぞれ異なる手口で攻撃を仕掛けました。Trivyに対しては、2月27日にプルリクエスト(コード変更の提案)を作成し、即座にクローズしました。

普通なら何も起きません。しかしTrivyのGitHub Actionsには「pull_request_target」という設定がありました。これはプルリクエストが作られたときに自動で実行されるワークフローで、プルリクエストがクローズされても実行されるという特性があります。しかもリポジトリの管理者権限で動く。

AIはこの仕組みを利用して、Trivyリポジトリの管理用トークン(PAT)を外部サーバーに送信。翌日にはリポジトリの完全な制御権を奪取しました。全178リリースを削除し、リポジトリを非公開化。さらに悪意あるVSCode拡張機能まで公開しました。

興味深い副産物があります。hackerbot-clawが攻撃した7つのリポジトリのうち1つでは、別のAI(Claude sonnet-4-6)が攻撃を検知してブロックしています。AI対AIの防御が機能した初めての事例とされています。

なぜ2度目が起きたのか ― トークンの無効化が不完全だった

Aqua Securityは1回目の攻撃を受けて復旧作業を行いました。脆弱なワークフローを削除し、トークンを無効化し、安全なバージョン(v0.69.2)をリリース。ここまでは教科書通りです。

しかし、トークンの無効化が不完全でした

StepSecurityの分析によると、1回目で窃取された「aqua-bot」サービスアカウントのトークンが攻撃者の手元に残っていました。トークンのローテーション(更新)プロセスが一度に完結せず、更新後のトークンも攻撃者に露出した可能性があります。

2026年3月19日、「TeamPCP」と名乗る攻撃者がこのトークンを使い、悪意あるv0.69.4タグをプッシュ。自動リリースパイプラインが起動し、GitHub Releases、Docker Hub、Amazon ECRに悪意あるバイナリが配布されました

GitHub Actionsが攻撃の入口になった ― 何が盗まれたのか

2回目の攻撃で配布された悪意あるバイナリの中身を、CrowdStrikeが詳細に分析しています。攻撃は5段階で構成されていました。

第1段階: GitHub Actionsのランナー(自動実行環境)上で動いているプロセスを列挙し、環境変数からクレデンシャル(認証情報)を抽出。

第2段階: プラットフォームに応じて収集対象を変えます。GitHubが提供するランナーでは、メモリをダンプしてシークレット(秘密情報)を抜き出す。企業が自前で用意したランナーでは、SSH鍵、AWS/GCP/Azureの認証情報、Kubernetes設定、Dockerの設定、暗号通貨ウォレットまで、50種類以上の機密ファイルをスキャンします。

第3段階: 収集したデータをAES-256で暗号化。復号鍵は攻撃者の公開鍵でラップされているため、攻撃者以外は中身を見られません。

第4段階: 暗号化データを2つの経路で外部に送信。主経路は「scan.aquasecurtiy[.]org」(Aqua Securityのドメインに似せたタイポスクワット)。フォールバック経路として、被害者のGitHubアカウントに「tpcp-docs」という公開リポジトリを勝手に作り、そこにデータをアップロードします。

第5段階: 痕跡を消した後、正規のTrivyスキャンを実行して正常な出力を表示。開発者は何も異常に気づきません。

侵害された
コンポーネント
内容
Trivy本体 v0.69.4悪意あるバイナリが
GitHub Releases,
Docker Hub, ECRに配布
trivy-action77タグ中76タグが
悪意あるコミットに
書き換え
setup-trivy7タグが書き換え

3週間で何が起きたか ― 時系列で振り返る

← スワイプで移動

自分のプロジェクトが影響を受けたか確認する方法

以下の手順で確認できます。

  • 1. Trivyのバージョン確認: trivy --version を実行し、v0.69.4が表示されたら影響あり。v0.69.3以前またはv0.69.5以降なら安全です
  • 2. GitHub Actionsのワークフロー監査: aquasecurity/trivy-actionまたはaquasecurity/setup-trivyをバージョンタグで参照していた場合、3月19〜20日のワークフロー実行ログを確認
  • 3. StepSecurityの検出ツール: trivy-compromise-scannerで影響を受けたワークフロー実行を自動検出
  • 4. 不審なリポジトリの確認: 自組織のGitHubアカウントに「tpcp-docs」という見覚えのないリポジトリがないか確認(フォールバック窃取経路の痕跡)
  • 5. ネットワークログ: scan.aquasecurtiy[.]org(45.148.10.212)への通信がないか確認

Aqua Securityの公式インシデント報告によると、安全なバージョンはTrivy v0.69.3、trivy-action v0.35.0、setup-trivy v0.2.6です。

守る側のツールが破られたらどうすればいいのか

セキュリティベンダー各社(CrowdStrikeWizStepSecurity)の分析から、共通する教訓が3つあります。

  • GitHub Actionsはコミットハッシュ(SHA)で固定する。バージョンタグ(v1, v2.3.4等)は書き換え可能です。uses: aquasecurity/trivy-action@abcdef1234567890のようにSHA指定にすれば、タグが書き換えられても影響を受けません
  • pull_request_targetワークフローを監査する。外部からのプルリクエストがリポジトリの管理者権限でコードを実行できる状態は、そのまま攻撃の入口になります
  • インシデント対応ではトークンの完全な無効化を検証する。Trivyの2度目の侵害は、1度目の後始末が不完全だったことが原因です。トークンのローテーションは「更新した」ではなく「旧トークンが使えないことを確認した」まで含める必要があります

映画『エイリアン2』で、リプリーが言います。「今度は核弾頭を持って行きましょう」。1回目の失敗から学んで万全の対策を取ったはずが、想定外の経路から再び侵入を許す。Trivyの事件はまさにそれです。

セキュリティツール自体がサプライチェーン攻撃の対象になるという現実は、「何を信頼するか」の前提を問い直します。ツールを信頼するのではなく、ツールが侵害されたときに何が起きるかを想定する。その想定力が、次の攻撃との差を分けます。

3度目の攻撃で何が起きたか。npmパッケージにワームが広がった

記事公開後、事態はさらに深刻化しました。2026年3月20日から22日にかけて、TeamPCPによる第3フェーズの攻撃が確認されています。

3月20日、第2フェーズで窃取されたnpm公開トークンを使い、47件のnpmパッケージに自己増殖型ワーム「CanisterWorm」が注入されました。The Hacker Newsの報道によると、このワームはnpmパッケージのインストール時に自動的に実行され、さらに他のパッケージにも感染を広げます。

注目すべきは、C2サーバー(攻撃者の指揮統制サーバー)の置き場所です。CanisterWormはICP(Internet Computer Protocol)ブロックチェーン上のスマートコントラクトをC2として使用しています。従来のC2サーバーはドメインやIPアドレスを遮断すれば停止できますが、ブロックチェーン上のスマートコントラクトはテイクダウン要求で停止させることができません。npmワームでICPベースのC2が使われたのは、公開事例として初めてとされています。

3月22日には、Docker Hubに悪意あるDockerイメージ(v0.69.5、v0.69.6)がアップロードされました。さらにAqua Security内部の44リポジトリが「tpcp-docs-」プレフィックスで改名されるデフェイス(改ざん)も発生しています。

この一連のインシデントにはCVE-2026-33634(Critical)が正式に割り当てられました。

フェーズ攻撃者影響
第1(2月)AIエージェント
hackerbot-claw
リポジトリ乗っ取り、
全リリース削除
第2(3/19)TeamPCP悪意あるv0.69.4配布、
76タグ改ざん
第3(3/20〜22)TeamPCPnpm 47パッケージ感染、
Docker Hub改ざん、
ブロックチェーンC2
第4(3/24)TeamPCPLiteLLM PyPI乗っ取り、
.pthファイルで自動実行

Aqua Securityの公式ブログでは、商用製品への影響はないとしています。商用版はOSS版から遅延して統合するため、評価プロセスの段階で遮断されたとのことです。

Trivyの侵害がLiteLLMに波及した。月間9500万DLのAIライブラリが乗っ取られる

Trivy侵害の影響はさらに広がっています。2026年3月24日、Trivyの第2フェーズで窃取されたCI/CDトークンを起点として、PythonのAIライブラリ「LiteLLM」のPyPIパッケージが乗っ取られました

LiteLLMは100種類以上のLLM APIを統一的に呼び出せるプロキシツールで、月間9500万回以上ダウンロードされています。攻撃者TeamPCPは、LiteLLMのCI/CDパイプラインでバージョンピンなしで使われていたTrivyを侵害し、PyPIの公開用トークンを窃取。正規のメンテナーアカウントからcredential stealerを仕込んだバージョン1.82.7と1.82.8を公開しました。

特に危険なのは、バージョン1.82.8で採用された.pthファイルという手法です。Pythonインタープリタが起動するたびにsite-packages内の.pthファイルが自動実行されるため、import litellmを書いていなくても、同じvenv内でpytestやdjangoなど任意のPythonプロセスを起動するだけでマルウェアが発火します。パッケージは約3時間でPyPIにより隔離されました。

詳細は以下の記事で報じています。

参照元