2026年3月Trivyサプライチェーン攻撃とDockerイメージのバージョンピニング #trivy #docker #security

はじめに
2026年3月に発生した人気OSSセキュリティスキャナ「Trivy」を標的としたサプライチェーン攻撃により、多くの開発現場に激震が走りました。
このインシデントは、私たちが日常的に利用しているセキュリティツールでさえもが攻撃の踏み台となり得ること、そしてDockerイメージのバージョンピニング(ピン留め)が重要であることを、再認識することになりました。
本稿では、この攻撃の概要と、その対策の一つであるDockerイメージのバージョンピニングについて簡単に見ていきます。詳細は必ず、公式の情報を確認してください。
2026年3月のTrivyサプライチェーン攻撃とは
2026年3月19日、セキュリティスキャナとして世界的に利用されている「Trivy」のエコシステムに対し、大規模なサプライチェーン攻撃が確認されました。
Trivyを提供しているAqua Securityの発表によると、攻撃者はTrivyのGitHub Actionsから認証情報を盗み出し、TrivyのGitHubリポジトリの既存のバージョンタグを改ざんしました。さらに攻撃者は、悪意あるコードを注入するTrivy 0.69.4 という偽のバージョンをリリースしました。この改竄されたツールを実行したCI/CDパイプラインからは、環境変数に含まれるAPIキーやパスワードなどの認証情報が外部サーバーへ流出した可能性があります。
Dockerイメージのバージョンピニングとは
今回の攻撃で被害が拡大した要因の一つとして、多くのユーザーがDockerイメージを使用する際に latest のような「不安定」なタグを使用しており、攻撃者が latest タグを差し替えたことにより、自動的に悪意あるイメージを使用してしまった点にあるでしょう。これを防ぐ手段が「バージョンピニング(Version Pinning)」です。これはDockerイメージをビルドする際のベストプラクティスの一つとして上げられています。
バージョンピニングする際も単純に 0.69.3 タグを付与するだけでなく、そのイメージの内容を指し示すダイジェスト(SHA256ハッシュ値)を付与するのが最も強力です。Dockerイメージの仕様上、タグは自由に付け替えや上書きが可能ですが、ダイジェストはレジストリにプッシュされたときに内容から生成される不変のハッシュ値だからです。既存のDockerイメージのダイジェストは docker image ls --digests オプションや docker image inspect コマンドの出力で RepoDigests として確認できます。Docker Hubでも「Digest」として確認できます。
なお、 DockerイメージIDとは異なります 。イメージIDはローカル環境で生成される一意の識別子であり、ダイジェストとは異なります。

次のように、タグの後に @sha256:..... のダイジェストを付与して指定します。
image:
name: aquasec/trivy:0.69.3@sha256:7228e304ae0f610a1fad937baa463598cadac0c2ac4027cc68f3
entrypoint: [""]
もっとも、侵害されたイメージそのものをダイジェストでバージョンピニングしてしまっては意味がありません。この手法は「後から置き換えられること」を防げますが、「既に置き換えられてしまっていること」は防げません。
さらに安全性を高めるには、Docker Hubから直接イメージをプルせず、十分に監査とテストを行ったイメージのみを格納したプライベートレジストリからプルするといった、厳密な運用が必要になってくるでしょう。しかし今回は、そのような監査を行うためのTrivyが侵害されてしまったという点で頭が痛いです。
まとめ
今回のTrivyの事例は「信頼しているセキュリティツールそのものが攻撃経路になる」というサプライチェーン攻撃の深刻さを浮き彫りにしました。
Dockerイメージの latest タグは確かにバージョンが自動更新されるため非常に便利です。しかし今回のようにタグを差し替えられてしまう攻撃には脆弱です。ダイジェスト指定によるバージョンピニングは不変のため更新が手間ですが、それを引き換えにある程度の安全性が保たれます。そのバランスを今一度見直す機会だと思います。
