対象:GitHub ActionsなどのCIで、Trivy(コンテナイメージや依存関係の脆弱性スキャナ)、aquasecurity/trivy-action、aquasecurity/setup-trivy を使っている人。Trivyのバイナリやコンテナイメージを手元やサーバーで使っている人。
本記事はAqua Securityの公式発表と、Trivyのセキュリティアドバイザリにもとづく解説で、攻撃の手順や侵害の痕跡(IoC)の値は扱いません。
CIの利用者が今日やること
該当する時間帯に、Trivy関連のワークフローが動いたかを確かめる
Aquaは、2026年3月19〜20日のワークフローの実行記録を確認するよう求めています。アドバイザリが示す時間帯(UTC、カッコ内は日本時間)は次のとおりです。
- trivy-action:3月19日17:43ごろ〜3月20日5:40ごろ(3月20日2:43〜14:40)
- setup-trivy:3月19日17:43ごろ〜21:44ごろ(3月20日2:43〜6:44)
- Trivy v0.69.4:3月19日18:22〜21:42ごろ(3月20日3:22〜6:42)
- Docker Hubのイメージv0.69.5・v0.69.6:3月22日15:43〜3月23日1:40ごろ(3月23日0:43〜10:40)
GitHubの組織全体でワークフローが多い場合は、aquasecurity/trivy-action と aquasecurity/setup-trivy を参照しているワークフローを検索し、その実行履歴を時間帯で絞ります。
参照のしかたで、影響を受けたかを判定する
アドバイザリの判定は、版の番号より「どう参照していたか」で決まります。
- trivy-action:影響あり=0.35.0以外のタグ(0.0.1〜0.34.2)で参照/時間帯に
version: latestを明示していた/2025年4月9日より前のコミットにSHAで固定していた。影響なし=0.35.0のタグ/2025年4月9日以降の安全なコミットへのSHA固定。 - setup-trivy:影響あり=SHAで固定していなかった場合すべて。影響なし=安全なコミットへのSHA固定。
- Trivy本体:影響あり=v0.69.4(期間中の
latestを含む。GitHub、deb、rpm、get.trivy.dev、GHCR、ECR Public、Docker Hub)とDocker Hubのv0.69.5・v0.69.6。影響なし=v0.69.3以前/ダイジェスト(イメージの中身から計算した固有の値)で指定したイメージ/ソースからのビルド/Homebrewの公式フォーミュラ。
該当したら、そのジョブから読めた秘密をすべてローテーションする
Aquaは、該当する版が動いた可能性が少しでもあるなら、そのパイプラインから読めた秘密情報をすべて漏れたものとして扱うよう求めています。対象は、クラウド(AWS、GCP、Azure)の認証情報、Gitの認証情報、コンテナレジストリの認証情報、SSH鍵、Kubernetesのトークン、環境変数などの自動化用の秘密です。
npmの公開用トークンは「実際に悪用されているもの」として扱うよう求めており、盗まれたトークンがnpmでの不正な拡散に使われているとしています。自分で管理するランナー(セルフホスト)の場合は、ランナーの上に置かれていたデータベースの認証情報、TLSの秘密鍵、VPNの設定なども対象として挙げられています。
ローテーションは、古い鍵をすべて無効化してから新しい鍵を一斉に発行する
これはTrivy自身の原因から引き出した手順です。Aquaによれば、3月1日のローテーションは一斉に行われず、数日にわたる入れ替えの間に、有効なままのトークンで新しい秘密まで持ち出された可能性があります。
対象の秘密を洗い出したら、まず古い鍵をまとめて無効化し、そのあとで新しい鍵を発行します。1本ずつ入れ替えると、まだ有効な古い鍵で、新しく入れた鍵を読まれる余地が残ります。サービスが一時止まる代償は、短い時間の停止として計画に入れてください。
組織のGitHubとTrivyを動かした端末を、アドバイザリの確認項目で点検する
Aquaは、持ち出しの代わりの経路が使われた場合に組織のGitHubアカウントに作られるリポジトリと、CIの外(開発者の端末など)でv0.69.4を動かした場合に端末に残るファイルを、確認項目として公表しています。該当する人は、下の出典にあるAquaの発表とアドバイザリの確認項目に沿って点検してください(本記事では痕跡の値は転載しません)。
安全な版に切り替える
Aquaが示す安全な版は、Trivy v0.69.2・v0.69.3、trivy-action v0.35.0、setup-trivy v0.2.6です。
アドバイザリによれば、trivy-actionの古いタグ(0.0.1〜0.34.2)は削除され、同じ名前では作り直せないため、頭に v を付けたタグ(例:v0.34.0)で元の正規のコミットを指すように公開し直されています(一部のタグは未復元)。古い版を使い続けている場合は参照を書き換える必要があります。
CIの設定で見直すこと
アクションをコミットのSHAで固定する、という基本は TanStack・Nx Console・GitHubの連鎖 でも扱いました。ここでは、Trivyの事案で新しく分かった点に絞ります。
SHAで固定したアクションが、中で何をタグで呼んでいるかを見る
アドバイザリによれば、trivy-actionは2025年4月9日のプルリクエストで、中で使う部品の参照をSHA固定に変えました。それより前のコミットにtrivy-actionを固定していた人は、trivy-action自体は安全でも、その中でタグで呼ばれるsetup-trivyが不正な版になっていました。
複数の部品を組み合わせるアクション(composite action)を使っている場合は、固定したコミットの action.yml を開き、中の uses: がSHAで固定されているかを確認します。固定されていなければ、より新しいコミットに上げるか、中の部品を自分のワークフローで直接SHA固定して呼ぶ方法を検討してください。
SHA固定を、個人の注意に任せず組織の設定で必須にする
GitHubは2025年8月、許可するアクションの方針にSHAでの固定を必須にする設定を加えました。企業・組織・リポジトリの単位で設定でき、SHAで固定していないアクションを使うワークフローは失敗します。同じ方針で、特定のアクションや版をブロックすることもできます。今回のような事案が起きたとき、該当する版を組織全体で止める手段にもなります。
「Immutable」の表示だけを頼りにしない
アドバイザリによれば、Trivy v0.69.3とtrivy-action 0.35.0は、公開前にGitHubの「変更できないリリース(immutable releases)」を有効にしていたため書き換えを免れました。
一方でAquaは、書き換えられたタグの横にも「Immutable」の表示が出ていたとし、表示だけに頼らず、完全なコミットSHAでの固定が確実な対策だとしています。表示は、そのリリースを公開した時点の状態を示すにすぎません。
バイナリは版を固定して署名を確かめ、イメージはダイジェストで指定する
アドバイザリでは、ダイジェスト(@sha256:…)で指定したイメージは影響を受けていません。latest や版番号のタグだけで取得していると、公開期間中に不正な版を取り込みます。
Trivyのアドバイザリは、Sigstore(オープンソースの署名の仕組み)の署名と署名の時刻でバイナリやイメージを検証する手順も示しています。CIで取得するツールは、版を明示し、可能ならダイジェストかチェックサムで固定します。
スキャナは、デプロイ用の秘密を持たないジョブで動かす
Aquaによれば、不正なコードは正規のスキャンより先に動き、スキャンの結果はふだんどおりに見えたため、利用者が気づきにくいものでした。スキャンそのものに、クラウドやレジストリへの書き込み権限はふつう要りません。スキャンは、デプロイ用の秘密を渡さない別のジョブで動かし、permissions: は読み取りだけにします。
Aquaによれば、代わりの持ち出し経路は個人のアクセストークン(PAT)がワークフローに渡されている場合にだけ働き、既定の GITHUB_TOKEN では失敗するものでした。スキャンのステップに個人のトークンを渡していないかも確認してください。
何が起きたのか(Aqua Securityの発表より)
以下はすべて、Aqua Securityの発表(3月22日の初回投稿と、4月1日までの更新)とTrivyのセキュリティアドバイザリに書かれた内容です。時刻はUTCです。
2026年2月下旬
TrivyのGitHub Actionsの設定の不備を突かれ、権限の強いアクセストークンが持ち出される。3月1日
Trivyのチームがこの侵害を公表し、認証情報をローテーション。Aquaによれば、このローテーションは一斉ではなく、攻撃者は有効なままの認証情報でアクセスを保った。3月19日 17:43ごろ
trivy-actionの77タグ中76、setup-trivyの全7タグが不正なコミットに書き換えられる。同時に、侵害されたサービスアカウントからリリースの仕組みが動かされ、不正なTrivy v0.69.4が公開される(配布開始は18:22)。3月19日 20:38ごろ
Trivyのチームが検知し、封じ込め。配布経路から不正な成果物を削除。3月20日
安全な版、利用者向けの案内、侵害の痕跡を公表。3月21日
セキュリティアドバイザリ GHSA-69fq-xp46-6x23(CVE-2026-33634)を公開。3月22日
Docker Hubに不正なイメージv0.69.5・v0.69.6が公開される(別に侵害されたDocker Hubの認証情報による)。同日、Aquaの社内リポジトリが無断でGitHubに公開される。Aquaは、最初の封じ込めのあとに攻撃者がアクセスを取り戻していたと説明。3月23日
Aquaが外部のインシデント対応企業を調査に加える。Aquaの別のスキャナKICSのGitHub Actionでも並行した侵害が確認される。4月1日
Aquaが、調査はほぼ完了し、商用製品が影響を受けた兆候は引き続きないと更新。
- 影響を受けたもの
- Trivy v0.69.4(バイナリ、deb/rpm、コンテナイメージ)、Docker Hubのv0.69.5・v0.69.6、trivy-actionの0.35.0以外のタグ、setup-trivyの全タグ
- 不正なコードの動き
- CIの実行環境や端末から、クラウド、SSH、Kubernetes、Docker、Git、データベースなどの認証情報や
.envを集め、暗号化して外部に送る。正規のスキャンより先に動くため、結果はふだんどおりに見えた - 原因
- 2月下旬にGitHub Actionsの設定の不備から権限の強いトークンが持ち出され、3月1日のローテーションが一斉でなかったため、アクセスが保たれた
- Aquaの対応
- 全配布経路から不正な成果物を削除、書き換えられたタグを削除または安全なコミットに付け替え、オープンソース組織の自動化・サービスアカウント・トークンを全面的に停止、長期間有効なトークンへの依存を減らす、変更できないリリースと来歴の証明を導入
- 影響がないとしたもの
- Aqua Platform内のTrivyを含む商用製品(GitHubと分離した基盤で、秘密情報や署名の仕組みを共有していないため)
読み方の注意:被害の件数は公表されていない
Aquaは、Trivyはオープンソースのため利用者を網羅した記録を持たず、全員に直接知らせる手段がないとしています。影響を受けた組織の数は公表されておらず、当サイトは推測の数字を載せません。
また、Aquaの発表は攻撃した側の呼び名や、分析に協力した外部企業の名前を挙げていますが、当サイトの方針として、被害を公表した組織以外の名前は載せていません。判断は件数ではなく、自分のワークフローが該当する時間帯に、該当する参照のしかたで動いたかどうかで行ってください。
どの段階で防げたか
① 2月下旬〜3月1日
トークン流出。ローテーションが数日がかりに
↓→
教訓(自分の組織で)
全部止めてから一斉に発行し直す
② 3月19日 タグの書き換え
同じタグ名が不正なコミットを指す
↓→
防げた設定
SHA固定(方針で強制)+中の部品も固定
③ 不正なv0.69.4と latest
正規の配布経路すべてに載る
↓→
防げた設定
版の明示、ダイジェスト指定、署名の確認
④ あなたのCIのジョブ
スキャンの前に秘密が集められる
↓→
被害を小さくする
スキャンのジョブに秘密と個人トークンを渡さない
影響を受けた参照のしかた(アドバイザリより)
trivy-action@0.34.2などのタグ参照(0.35.0以外)version: latestの明示(Trivy本体の公開期間中)- 2025年4月9日より前のコミットへのSHA固定(中のsetup-trivyがタグ参照)
setup-trivyのSHA固定なしの参照すべて- イメージの
latest・0.69.4などのタグ指定
影響を受けなかった参照のしかた
trivy-action@0.35.0(公開前から変更できないリリースが有効)- 2025年4月9日以降の安全なコミットへのSHA固定
setup-trivyの安全なコミットへのSHA固定- イメージのダイジェスト指定
- Trivy v0.69.3以前、ソースからのビルド、Homebrewの公式フォーミュラ
当サイトの視点:侵害が疑われるときの鍵の入れ替えは、一斉に行う
鍵のローテーションは、ふつう影響の少ない順に、1本ずつ、サービスを止めずに行います。止めずに済むのは利点ですが、今回のTrivyの事案は、その進め方では攻撃者がまだアクセスできる状態のときに、そのアクセスを断てないことを示しました。Aquaによれば、数日にわたる入れ替えの間に、有効なままのトークンで新しく入れた秘密まで持ち出された可能性があり、それが3週間後の不正なリリースにつながりました。
侵害が疑われるときのローテーションは、①どの鍵がどこから読めたかを先に全部洗い出す、②古い鍵をまとめて無効化する、③そのあとで新しい鍵を発行する、④古い鍵が本当に使えないことを確かめる、の順で行います。短い停止は計画に入れてください。平常時の入れ替え(止めずに新旧を並べる方式)は、漏れていないことが前提の手順です。
もう1つ。脆弱性スキャナは守りのための道具なので、CIの中で最も多くの場所に、最も広い権限で置かれがちです。守りの道具だからと安心せず、秘密情報を読めないジョブで動かしてください。
出典(公開記録)
本記事の事実関係は、以下の公開情報にもとづきます。攻撃の手順や、侵害の痕跡(IoC)の値、攻撃した側を特定する情報は扱っていません。
- Aqua Security「Trivy Supply Chain Attack: What You Need to Know」(2026年3月22日初回投稿、4月1日更新) — aquasec.com
- Trivy セキュリティアドバイザリ「Trivy ecosystem supply chain temporarily compromised」GHSA-69fq-xp46-6x23(CVE-2026-33634、3月21日公開、3月30日更新) — github.com
- Trivy「Trivy Security incident 2026-03-19」(GitHub Discussions、Trivyのチームによる経過報告) — github.com
- GitHub Changelog「GitHub Actions policy now supports blocking and SHA pinning actions」(2025年8月15日) — github.blog
- GitHub Docs「Secure use reference」(サードパーティのアクションの使い方) — docs.github.com
更新履歴
2026-09-30:初版。Aqua Securityの発表(4月1日更新版)と、Trivyのセキュリティアドバイザリ(3月30日更新版)にもとづく。
次に読む
- SHA固定と、1人で公開できない構造:TanStack・Nx Console・GitHubの連鎖で開発者が確認すること
- 盗まれたnpmトークンの失効の順序:npmサプライチェーン攻撃の守り方
- 秘密の置き方:.envとAPIキーは何が危ないのか / gitleaksでコミット前に秘密を止める
- プラットフォームの環境変数が漏れた事案:Vercelのセキュリティインシデントで開発者がやること
- 同じ型の事案(PyPI・Docker):LiteLLM 1.107.0へのマルウェア混入と、利用者がやること
- 2026年の他の事案:情報漏えい・サイバー攻撃の一覧(国内・海外)