はじめに
2026年3月、コンテナ脆弱性スキャナとして広く利用されているTrivyが、深刻なサプライチェーン攻撃の被害を受けました。公式バイナリにマルウェアが注入され、GitHub ActionsのタグやDocker Hubイメージが侵害されました。本記事では、攻撃の経緯、影響範囲、検知方法、そして今後の防御策について報告します。
背景:2段階の攻撃
今回の3月19日の攻撃は、以前の攻撃への対応が不完全だったことで生じた、2段階目の攻撃です。
攻撃1 ― hackerbot-claw(2026年2月27〜28日)
hackerbot-clawと名乗る自律型AIボットが、GitHub Actionsワークフローの設定ミスを悪用し、認証情報を窃取する攻撃を複数の著名なオープンソースリポジトリに対して組織的に実行しました。Trivyはその最大の被害者の一つでした。ボットはTrivyリポジトリのpull_request_targetワークフローの脆弱性を突いて特権的なPersonal Access Token(PAT)を盗み出し、それを使って178件のGitHubリリースをすべて削除し、リポジトリを乗っ取り、Open VSXマーケットプレイスに悪意あるVS Code拡張機能を公開しました。Microsoft、DataDog、その他複数の大規模オープンソースプロジェクトも同じキャンペーンの標的となりました。
攻撃2 ― TeamPCP / Trivyサプライチェーン侵害(2026年3月19〜23日)
Aqua Securityはhackerbot-clawの後に認証情報をローテーションしましたが、ローテーションは不完全でした。TeamPCPと名乗る脅威アクターグループが、ローテーション後も残存していた認証情報を使い、3週間後に攻撃を実行しました。公式Trivyバイナリ(v0.69.4)に認証情報を窃取するマルウェアを注入し、trivy-actionの76個中75個のバージョンタグを悪意あるコミットに書き換え、Docker Hubイメージも侵害しました。マルウェアはCI/CDシークレット、クラウド認証情報、SSHキー、各種トークンを標的にしていました。本件はCVE-2026-33634(CVSSスコア9.4)として追跡されています。
タイムライン
| 日付 | イベント |
|---|---|
| 2月27〜28日 | hackerbot-clawがTrivyリポジトリのPATを窃取、178件のリリースを削除 |
| 2月28日以降 | Aqua Securityが認証情報をローテーション(不完全) |
| 3月19日 | TeamPCPが残存認証情報を利用し、Trivyバイナリ(v0.69.4)にマルウェアを注入 |
| 3月19〜23日 |
trivy-actionの75バージョンタグが悪意あるコミットに書き換え、Docker Hubイメージも侵害 |
| 3月23日 | 攻撃が検知・公表、CVE-2026-33634が発行 |
影響範囲
-
CI/CDパイプライン: 侵害期間中(3月19〜23日)に
trivy-actionを実行したすべてのワークフローが影響を受けた可能性があります。タグ参照(@v1、@v2など)を使用していた場合、悪意あるコミットが実行されていた恐れがあります。 - バイナリ利用者: v0.69.4のバイナリを直接ダウンロードしたユーザーも、マルウェアが含まれたバイナリを実行していた可能性があります。
- Docker Hub: 公式Trivyイメージを利用していた環境も侵害対象です。
- 窃取対象: CI/CDシークレット、クラウドプロバイダの認証情報(AWS、GCP、Azureなど)、SSHキー、APIトークンなどが外部に送信されていた可能性があります。
検知方法:自分が影響を受けたか確認するには
-
GitHub Actionsのログを確認: 3月19〜23日の期間に
trivy-actionを使用したワークフロー実行のログを確認してください。 -
コミットSHAの検証: ワークフローで使用された
trivy-actionのコミットSHAが、Aqua Securityの公式アドバイザリに記載されている既知の悪意あるSHAと一致するか確認してください。 - バイナリのチェックサム検証: ダウンロード済みのTrivyバイナリがある場合、公式の正規チェックサムと照合してください。
- ネットワークログの確認: CI/CD環境からの不審な外部通信(認証情報の送信先サーバーへの接続)がないか確認してください。
防御策・教訓
本件から得られる防御策は、Trivyに限らずGitHub Actionsを利用するすべてのプロジェクトに適用できます。
1. アクションはタグではなくコミットSHAで固定する
# 危険:タグは書き換え可能
- uses: aquasecurity/trivy-action@v1
# 推奨:コミットSHAは不変
- uses: aquasecurity/trivy-action@abc123def456...
タグは任意のコミットに付け替え可能であり、今回の攻撃でもこの仕組みが悪用されました。
2. GITHUB_TOKENの権限を最小限にする
permissions:
contents: read
# 必要な権限のみ明示的に付与する
3. pull_request_targetの使用を避ける
pull_request_targetは、外部のPRコードをリポジトリの特権コンテキストで実行できるため、認証情報の窃取に直結します。やむを得ず使用する場合は、PRコードのチェックアウトを絶対に行わないでください。
4. 認証情報のローテーションは徹底的に行う
今回の攻撃2は、不完全なローテーションが直接の原因です。インシデント対応時には、すべての認証情報(PAT、デプロイキー、サービスアカウント、APIトークンなど)を漏れなくローテーションする必要があります。
5. 公開アクションへの依存を見直す
外部リポジトリのコードが自分のCI/CDパイプライン内で実行されるリスクを認識し、以下の対策を検討してください:
- バイナリを直接ダウンロードし、チェックサムで検証する
- 重要なアクションはフォークまたはベンダリングする
- 自前のラッパーアクションを作成する
補足:公開アクションへの依存について考えたこと
hackerbot-clawの攻撃でTrivyリポジトリのタグ付きリリースが大量に削除された際、公開アクションがすでに存在しないタグを参照し続けるという事態が発生しました。この出来事をきっかけに、GitHub Actionsの仕組み――外部のリポジトリにあるコードが自分たちのパイプライン内で実行される構造――のリスクが改めて浮き彫りになりました。「このコードが何か悪意あることをしていたとしても、気づけないのではないか?」という疑問は、公開アクションへの依存を止め、バイナリを直接取得して自前のラッパーアクションを作る方針へと切り替える動機となり得ます。