
2026/03/20 12:30
**Trivy エコシステム・サプライチェーン – 簡潔に脆弱化されたケース** - Trivy はコンテナイメージ、ファイルシステム、Git リポジトリを対象としたオープンソースの脆弱性スキャナーです。 - サプライチェーン攻撃は、Trivy が処理する際に利用される人気パッケージや依存関係に悪意あるコードが注入されたケースです。 - 侵害されたアーティファクトがエコシステム内に入り込むと、そのパッケージを直接または間接的に使用しているすべてのプロジェクトが隠れた脆弱性に曝される恐れがあります。 - 検出は、Trivy がイメージレイヤーや設定ファイル、パッケージの系譜(provenance)を解析する能力に依存します。 - 対策としては、依存関係の定期的な更新、パッケージ署名の検証、および統合前に改ざんがないかチェックする堅牢化されたビルドパイプラインの導入が推奨されます。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要:
2026年3月19日に、脅威アクターがAquasecurityのTrivyエコシステムを乗っ取り、侵害された認証情報を使用して悪意あるコミットを強制プッシュしました。攻撃者は
aquasecurity/trivy-action の77タグ中76タグをプッシュし、 aquasecurity/setup-trivy の7つのタグすべてをクレデンシャル窃盗マルウェアに置き換えました。サプライチェーン侵害は2月末から始まり、GitHubの認証情報ローテーションが3月1日に原子操作で実行されなかったため、攻撃者は短時間のウィンドウ内で新しくローテートされたシークレットを読み取ることができました。悪意あるTrivy v0.69.4リリース(最新タグ)はGHCR、ECR Public、Docker Hub、deb/rpmパッケージ、および公式ダウンロードサイト経由で配布されました。露出ウィンドウは以下の通りです:trivy v0.69.4(約3時間 2026年3月19日)、trivy‑action(約12時間 17:43 UTC 3月19日〜05:40 UTC 3月20日)、setup‑trivy(約4時間 2026年3月19日)。
trivy‑action内の情報盗難ツールはRunner.Workerメモリをダンプし、50以上のファイルシステムパスから秘密情報を収集、AES‑256‑CBC + RSA‑4096で暗号化して攻撃者インフラに送信するか、入力PATが提供されていれば公開
tpcp‑docs リポジトリを作成します。setup‑trivyの7つのタグはすべて置き換えられ、悪意あるaction.yamlは約4時間以内に削除され、v0.2.6は安全に再生成されました。Trivyをv0.69.3以前(2026年3月3日に有効化されたイミュータブルリリースで保護)に固定したユーザー、ダイジェストで画像をプルし、trivy‑action@0.35.0(2026年3月4日に有効化されたイミュータブルリリース)を参照していたか、安全なコミットSHAに固定していた場合は影響を受けませんでした。
推奨アクション:
既知の安全バージョン(Trivy v0.69.2/0.69.3、trivy‑action v0.35.0、setup‑trivy v0.2.6)に更新し、曝露される可能性のあるすべてのシークレットをローテーションしてください。2026年3月19日〜20日のTrivy使用とGitHub Action参照を監査し、
tpcp‑docs リポジトリを検索し、Actionsを完全SHAハッシュに固定します。バイナリはsigstore署名で検証し、コンテナイメージはcosign/rekorチェックで確認してください。修復後、元のタグ0.0.1–0.34.2は再生成できません。新しいvプレフィックス付きタグは正当なコミットを参照しますが、3つのタグ(v0.0.10、v0.34.1、v0.34.2)は未復元です。本文
概要
2026年3月19日、脅威アクターが流出した認証情報を使用して悪意のある Trivy v0.69.4 リリースを公開し、
aquasecurity/trivy-action の 77 タグのうち 76 を認証情報窃盗マルウェアへ強制プッシュし、さらに aquasecurity/setup-trivy のすべてのタグ(7 本)を悪意あるコミットに置き換えました。
根本原因
このインシデントは2026年2月下旬から始まったサプライチェーン攻撃の継続です。3月1日の初期公開後、認証情報はローテーションされましたが、アトミックに行われていなかったため、攻撃者は有効なトークンを使ってローテーション期間(数日間)中に新しくローテートされたシークレットを外部転送できました。これにより、3月19日の攻撃を実行する権限を保持できます。
対象コンポーネント
| コンポーネント | タイプ | 対象バージョン | 修正済みバージョン |
|---|---|---|---|
| Go / コンテナイメージ | 0.69.4(最新タグも影響) | 0.69.3 |
| GitHub Actions | タグ 0.0.1 – 0.34.2(76/77) | 0.35.0(未影響) |
| GitHub Actions | すべてのタグ (v0.2.0 – v0.2.6) | v0.2.6(安全に再作成) |
エクスポージャウィンドウ
| コンポーネント | 開始 (UTC) | 終了 (UTC) | 時間 |
|---|---|---|---|
| trivy v0.69.4 | 2026‑03‑19 18:22 | 2026‑03‑19 21:42 | 約3時間 |
| trivy-action | 2026‑03‑19 17:43 | 2026‑03‑20 05:40 | 約12時間 |
| setup-trivy | 2026‑03‑19 17:43 | 2026‑03‑19 21:44 | 約4時間 |
攻撃詳細
Trivy v0.69.4 バイナリとコンテナイメージ
攻撃者は次の手順で悪意あるリリースを作成しました。
- コミット 1885610c をプッシュし、
の参照を偽装コミット 70379aad に差し替えました。このコミットには、typosquatted ドメインから悪意ある Go ソースファイルをダウンロードするコンポジションアクションが含まれています。actions/checkout - goreleaser の
を追加してバイナリ検証を回避しました。--skip=validate - このコミットに v0.69.4 タグを付与し、リリースパイプラインをトリガーしました。
流出したリリースは GHCR、ECR Public、Docker Hub(v0.69.4 と latest 両方)、deb/rpm パッケージ、および
get.trivy.dev で配布されました。
trivy-action タグハイジャック
攻撃者は 77 バージョンタグのうち 76 を強制プッシュし、
entrypoint.sh に情報窃盗マルウェアを注入しました。コードは以下のように動作します。
を介して Runner.Worker のプロセスメモリからシークレットを抽出。/proc/<pid>/mem- SSH キー、クラウド認証情報、Kubernetes トークン、Docker 設定、
ファイル、データベース資格情報、暗号通貨ウォレットなど、50 以上のファイルシステムパスを検索。.env - AES‑256‑CBC と RSA‑4096 ハイブリッド暗号で収集データを暗号化。
- 攻撃者管理インフラへ送信。
エクスポートが失敗し
が設定されている場合、被害者の GitHub アカウントに公開INPUT_GITHUB_PAT
リポジトリを作成し、盗まれたデータをリリースアセットとしてアップロードします。tpcp‑docs
setup-trivy リリース置き換え
すべての既存タグ(v0.2.0 – v0.2.6)に対して悪意あるコミットが強制プッシュされました。悪意ある
action.yaml には同様の情報窃盗マルウェアが含まれ、Trivy の正規インストール前に実行される「Setup environment」ステップとして注入されていました。
約4時間ですべての悪意あるリリースを削除し、安全な内容で v0.2.6 を再作成しました。v0.2.0 – v0.2.5 は復元していません。
影響を受けないケース
- trivy を v0.69.3 またはそれ以前に固定したユーザー
- v0.69.3 は GitHub の不変リリース機能(2026年3月3日有効化、v0.69.3 公開前)で保護されています。
- v0.69.2 はこの設定以前ですが、Sigstore シグネチャにより整合性を検証可能です。
- コンテナイメージをダイジェストでプルしたユーザー
を使用したユーザー – 不変リリース(2026年3月4日有効化)により保護され、タグハイジャックの影響を受けません。trivy-action@0.35.0- trivy‑action または setup‑trivy を安全なコミット SHA に固定しているユーザー
推奨対策
安全バージョンへの更新
| コンポーネント | 安全バージョン |
|---|---|
| Trivy バイナリ | v0.69.2, v0.69.3 |
| trivy-action | v0.35.0 |
| setup-trivy | v0.2.6 |
すべての潜在的に露出したシークレットをローテーション
影響を受けたバージョンが稼働していた場合、アクセス可能なすべてのシークレットは漏洩済みと見なし、直ちにローテートしてください。
Trivy バージョン監査
組織内で trivy v0.69.4 をプルまたは実行したか確認し、影響を受けたアーティファクトを即座に削除します。
GitHub Actions 参照の監査
aquasecurity/trivy-action または aquasecurity/setup-trivy を使用しているすべてのワークフローをレビュー。バージョンタグではなく完全なコミット SHA を指定していない場合、2026年3月19–20日の実行ログで妥当性チェックを行ってください。
エクスポートアーティファクト検索
GitHub 組織内に
tpcp-docs というリポジトリが存在するか確認します。これが見つかった場合、フォールバックエクスポート機構が作動しシークレットが盗まれた可能性があります。
GitHub Actions を完全 SHA に固定
アクションを完全で不変のコミット SHA ハッシュに固定し、可変タグは避けてください。詳細は GitHub Docs を参照。
注意: 元のタグ(0.0.1 – 0.34.2)は対策中に削除されました。攻撃者が強制プッシュしたため、GitHub では同じ名前で再作成できません。新しいタグは
プレフィックス付きで公開されています(例:v)。0.35.0 より古いバージョンを参照する必要がある場合は、aquasecurity/trivy-action@v0.34.0プレフィックス付きタグを使用してください。v
既存インストールの検証方法
バイナリ検証
# バイナリと Sigstore バンドルをダウンロード curl -sLO "https://github.com/aquasecurity/trivy/releases/download/v0.69.2/trivy_0.69.2_Linux-64bit.tar.gz" curl -sLO "https://github.com/aquasecurity/trivy/releases/download/v0.69.2/trivy_0.69.2_Linux-64bit.tar.gz.sigstore.json" # シグネチャを検証 cosign verify-blob \ --certificate-identity-regexp 'https://github\.com/aquasecurity/' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \ --bundle trivy_0.69.2_Linux-64bit.tar.gz.sigstore.json \ trivy_0.69.2_Linux-64bit.tar.gz # => Verified OK # シグネチャタイムスタンプを確認 date -u -d @$(jq -r '.verificationMaterial.tlogEntries[].integratedTime' trivy_0.69.2_Linux-64bit.tar.gz.sigstore.json) # => Sat Mar 1 19:11:02 UTC 2026
コンテナイメージ検証
# シグネチャを検証し、イメージダイジェストを取得 cosign verify \ --certificate-identity-regexp 'https://github\.com/aquasecurity/' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \ --new-bundle-format \ ghcr.io/aquasecurity/trivy:0.69.2 # ダイジェストを取得し、Rekor を使ってすべてのシグネチャタイムスタンプを確認 DIGEST=$(cosign verify \ --certificate-identity-regexp 'https://github\.com/aquasecurity/' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \ --new-bundle-format -o json ghcr.io/aquasecurity/trivy:0.69.2 2>/dev/null | \ jq -r '.[0].critical.image."docker-manifest-digest"') rekor-cli search --sha "$DIGEST" | grep IntegratedTime # => All timestamps on Mar 1, before the attack on Mar 19
参考文献
- Issue #10425 – “v0.69.4 リリースアーティファクトが公開され始めた時点。”
- 当社監査ログで観測された最初の疑わしい活動。