跳到正文
>_ITDITDWeb 安全平台

安全指南

Trivy 供应链攻击(2026年3月):在 CI 中使用 Trivy 的人该做什么

2026年3月19日至20日,恶意的 Trivy v0.69.4 被发布,trivy-action 和 setup-trivy 的标签被改写,目标是 CI 中的密钥。本文依据 Aqua Security 的公开说明,整理受影响的版本和时间段、密钥轮换、SHA 固定(按提交 ID 引用 Action)以及最小权限的 CI 令牌。

发布于 2026-09-30 更新于 2026-10-04 最后核实 2026-09-30 6 分钟阅读

本文面向:在 GitHub Actions 等 CI 中运行 Trivy(容器镜像和依赖的漏洞扫描器)、aquasecurity/trivy-action 或 aquasecurity/setup-trivy 的人,以及在工作站或服务器上使用 Trivy 二进制文件或容器镜像的人。

本文依据 Aqua Security 的官方说明和 Trivy 的安全公告撰写,不涉及攻击手法或入侵指标(IoC)的具体值。

CI 用户今天该做什么

1

检查受影响时间段内是否运行过与 Trivy 相关的工作流

Aqua 请用户检查2026年3月19日至20日的工作流运行日志。公告中的时间段(UTC)如下:

  • trivy-action:3月19日约17:43 至3月20日约05:40
  • setup-trivy:3月19日约17:43 至约21:44
  • Trivy v0.69.4:3月19日18:22 至约21:42
  • Docker Hub 镜像 v0.69.5 和 v0.69.6:3月22日15:43 至3月23日约01:40

如果你的组织有很多工作流,搜索引用了 aquasecurity/trivy-action 和 aquasecurity/setup-trivy 的工作流,再按这些时间段筛选运行记录。

2

不只看版本,还要看引用方式

在公告中,关键在于你是怎样引用这个组件的。

  • trivy-action——受影响:0.35.0 以外的任何标签(0.0.1–0.34.2);在时间段内显式设置 version: latest;按 SHA 固定在2025年4月9日之前的提交。不受影响:0.35.0 标签;按 SHA 固定在2025年4月9日之后的安全提交。
  • 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 公式。
3

如果受影响,轮换该作业能读取的所有密钥

Aqua 表示,只要被入侵的版本有可能运行过,受影响流水线能访问的所有密钥都必须视为已暴露:云凭据(AWS、GCP、Azure)、Git 凭据、容器镜像仓库凭据、SSH 密钥、Kubernetes 令牌,以及环境变量和其他自动化密钥。

它要求把 npm 发布令牌视为已被实际攻破,称被盗的令牌正被用来在 npm 上传播恶意软件。对于自托管运行器,Aqua 还列出了保存在运行器上的数据库凭据、TLS 私钥和 VPN 配置。

4

先让所有旧密钥失效,再统一签发新密钥

这一步来自 Trivy 自身的根本原因。据 Aqua 称,3月1日的轮换没有一次性完成;在持续数天的轮换期间,攻击者可能用一个仍然有效的令牌,连新签发的密钥也拿走了。

列出范围内的密钥之后,先统一让旧密钥失效,再签发新密钥。逐个轮换会留下空隙,让仍然有效的旧密钥读到新密钥。代价是短暂的服务中断,请提前做好安排。

5

按公告的检查清单,检查你的 GitHub 组织和运行过 Trivy 的机器

Aqua 列出的检查项目包括:如果使用了备用的外传路径,你的 GitHub 组织中可能会被创建一个仓库;以及在 CI 之外(例如开发者工作站)运行过 v0.69.4 的机器上留下的文件。如果你可能受到影响,请按照下方链接中 Aqua 的说明和公告里的检查清单进行检查(本文不转载指标值)。

6

迁移到已知安全的版本

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 固定 Action 的基本规则,在TanStack、Nx Console 与 GitHub 的连锁事件中已有说明。这里重点讲 Trivy 事件带来的新内容。

1

检查按 SHA 固定的 Action 内部是否按标签调用了其他组件

根据公告,trivy-action 在2025年4月9日合并的一个拉取请求中,把内部组件的引用改为了 SHA 固定。把 trivy-action 固定在更早提交上的人,得到的是一个安全的 trivy-action,但它会按标签调用恶意的 setup-trivy。

如果你使用由其他 Action 组合而成的 Action(复合 Action),请打开你所固定提交中的 action.yml,检查其中的 uses: 行是否按 SHA 固定。如果没有,请换到更新的提交,或者在你自己的工作流中直接按 SHA 固定调用内部组件。

2

在组织设置中强制 SHA 固定,而不是交给个人自觉

2025年8月,GitHub 在允许使用的 Action 策略中加入了一个选项,要求 Action 必须固定到完整的提交 SHA。它可以在企业、组织或仓库级别设置,使用未固定 Action 的工作流会失败。同一策略还能阻止特定的 Action 或版本,这也让你在类似这次的事件中,可以在整个组织范围内封锁受影响的版本。

3

不要只依赖“Immutable”标记

根据公告,Trivy v0.69.3 和 trivy-action 0.35.0 之所以幸免,是因为在发布之前就启用了 GitHub 的不可变发布(immutable releases)。但 Aqua 表示,被改写的标签旁边也出现了“Immutable”标记,可靠的保护措施是固定到完整的提交 SHA,而不是这个标记。该标记描述的是发布那一刻的状态。

4

二进制文件固定版本并验证签名,镜像按摘要引用

在公告中,按摘要(@sha256:…)引用的镜像不受影响。只按 latest 或版本标签拉取的,会在时间段内拿到恶意构建。Trivy 的公告还说明了如何用 Sigstore 签名和签名时间戳来验证二进制文件和镜像。对于 CI 下载的工具,写明版本,并尽可能按摘要或校验和固定。

5

在不持有部署密钥的作业中运行扫描器

据 Aqua 称,恶意代码在合法扫描之前运行,扫描输出看起来一切正常,因此很难察觉。扫描通常不需要对云或镜像仓库的写权限。把扫描放在一个不接收部署密钥的独立作业中运行,并把 permissions: 设为只读。

据 Aqua 称,备用的外传路径只有在工作流中传入了个人访问令牌(PAT)时才能生效,使用默认的 GITHUB_TOKEN 时会失败。请确认你没有把个人令牌交给扫描步骤。

发生了什么(依据 Aqua Security 的说明)

以下内容均依据 Aqua Security 的说明(3月22日的首次发布及截至4月1日的更新)和 Trivy 的安全公告。时间为 UTC。

  1. 2026年2月下旬

    Trivy 的 GitHub Actions 环境中的配置错误被利用,一个特权访问令牌被提取。
  2. 3月1日

    Trivy 团队公开了这起事件并轮换凭据。据 Aqua 称,轮换没有一次性完成,攻击者通过仍然有效的凭据保住了访问权限。
  3. 3月19日 约17:43

    trivy-action 的 77个标签中有76个、setup-trivy 的全部7个标签被指向恶意提交。与此同时,一个被入侵的服务账户触发了发布自动化,发布了恶意的 Trivy v0.69.4(制品从18:22起可获取)。
  4. 3月19日 约20:38

    Trivy 团队识别并控制了攻击,从分发渠道中移除了恶意制品。
  5. 3月20日

    发布安全版本、用户指引和入侵指标。
  6. 3月21日

    发布安全公告 GHSA-69fq-xp46-6x23(CVE-2026-33634)。
  7. 3月22日

    恶意镜像 v0.69.5 和 v0.69.6 被推送到 Docker Hub(使用另外被盗的 Docker Hub 凭据)。同一天,Aqua 的内部仓库在未经授权的情况下在 GitHub 上被公开。Aqua 表示,攻击者在最初的控制措施之后重新获得了访问权限。
  8. 3月23日

    Aqua 请外部事件响应公司参与调查。另一款 Aqua 扫描器 KICS 的 GitHub Action 也被发现遭到同期入侵。
  9. 4月1日

    Aqua 表示调查已接近收尾,仍然没有迹象显示其商业产品受到影响。
76 / 77
被改写指向的 trivy-action 标签(只有 0.35.0 安全)
7 / 7
被改写指向的 setup-trivy 标签
约12小时
trivy-action 标签被改写的持续时间(公告)
无迹象
显示商业产品(包括 Aqua Platform 中的 Trivy)受影响(Aqua)
Aqua Security 公开的内容
受影响范围
Trivy v0.69.4(二进制文件、deb/rpm、容器镜像)、Docker Hub 的 v0.69.5 和 v0.69.6、除 0.35.0 以外的所有 trivy-action 标签、所有 setup-trivy 标签
代码做了什么
从 CI 运行器和机器上收集云、SSH、Kubernetes、Docker、Git 和数据库凭据以及 .env 文件,加密后发送出去。它在合法扫描之前运行,所以结果看起来正常
原因
2月下旬通过 GitHub Actions 配置错误提取了一个特权令牌;由于3月1日的轮换不是原子操作,访问权限被保留了下来
Aqua 的应对
从所有渠道删除恶意制品;删除被改写的标签或将其重新指向经过验证的提交;锁定开源组织中的所有自动化、服务账户和令牌;减少对长期凭据的依赖;引入不可变发布验证和来源证明(provenance attestation)
不受影响
商业产品,包括 Aqua Platform 中的 Trivy(构建在与 GitHub 分开的基础设施上,不共享密钥或签名系统)

阅读提示:没有公布受害数量

Aqua 表示,由于 Trivy 是开源软件,它没有完整的用户记录,也无法直接通知每一位用户。受影响组织的数量没有公布,本站也不刊登估计数字。

Aqua 的说明中还提到了攻击者以及协助分析的外部公司的名称;按照本站的方针,我们只写出公开这起事件的组织名称。请根据你的工作流是否在受影响时间段内、以受影响的引用方式运行过来判断,而不是根据新闻标题里的数字。

在哪个环节可以阻止

1. 2月下旬 – 3月1日

令牌被提取;轮换花了好几天

↓

教训(在你的组织中)

先全部停用,再统一重新签发

2. 3月19日:标签被改写

同样的标签名现在指向恶意提交

↓

可以阻止它的设置

用策略强制 SHA 固定,内部组件也固定

3. 恶意的 v0.69.4 和 latest

通过所有官方渠道分发

↓

可以阻止它的设置

明确版本、使用摘要、验证签名

4. 你的 CI 作业

扫描运行之前密钥已被收集

↓

限制损害

扫描作业中不放密钥和个人令牌

根据 Aqua Security 的说明和公告还原的路径。每一步的右侧是用户这一侧可以阻止或减轻损害的设置。

受影响的引用方式(依据公告)

  • trivy-action@0.34.2 这类标签引用(0.35.0 以外的任何标签)
  • 显式的 version: latest(在二进制文件的时间段内)
  • 按 SHA 固定在2025年4月9日之前的提交(内部按标签调用 setup-trivy)
  • 任何没有按 SHA 固定的 setup-trivy 引用
  • latest 或 0.69.4 这类镜像标签

不受影响的引用方式

  • trivy-action@0.35.0(发布前已启用不可变发布)
  • 按 SHA 固定在2025年4月9日之后的安全提交
  • 按 SHA 固定在安全提交上的 setup-trivy
  • 按摘要引用的镜像
  • Trivy v0.69.3 及更早版本、从源码构建、官方 Homebrew 公式

本站的看法:怀疑被入侵时,一次性替换所有密钥

密钥轮换通常是逐个进行的,从不太重要的开始,不停机。避免停机确实有好处,但 Trivy 事件表明,这种做法无法切断仍然持有访问权限的攻击者。据 Aqua 称,在持续数天的轮换期间,一个仍然有效的令牌可能被用来连新签发的密钥也拿走,进而导致了三周后的恶意发布。

怀疑被入侵时,按以下顺序轮换:(1) 列出所有密钥以及可以从哪里读取它们,(2) 统一让旧密钥失效,(3) 然后才签发新密钥,(4) 确认旧密钥确实已无法使用。请预留短暂的停机时间。新旧密钥并行的常规做法,前提是什么都没有泄露。

还有一点。漏洞扫描器是防御工具,所以它往往比 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”(使用第三方 Action)— docs.github.com

更新记录

2026-09-30:初版,依据 Aqua Security 的说明(4月1日更新)和 Trivy 的安全公告(3月30日修订版)。

延伸阅读

FAQ

Q哪些 Trivy 版本受到影响?
A

根据 Trivy 的安全公告 GHSA-69fq-xp46-6x23(CVE-2026-33634),受影响的制品是 Trivy v0.69.4(通过 GitHub、deb、rpm 和 get.trivy.dev 分发的二进制文件,以及 GHCR、ECR Public 和 Docker Hub 上的容器镜像;在暴露时间段内 latest 标签也指向它),以及发布到 Docker Hub 的容器镜像 v0.69.5 和 v0.69.6。v0.69.3 及更早版本、按摘要(digest)引用的镜像、从源码构建的二进制文件以及官方 Homebrew 公式不受影响。

Q我在用 trivy-action,受影响吗?
A

根据公告,以下情况受影响:引用了 0.35.0 以外的任何标签(0.0.1 至 0.34.2);在二进制文件暴露时间段内显式设置了 version: latest;或按 SHA 固定在2025年4月9日之前的提交。0.35.0 标签以及按 SHA 固定在2025年4月9日之后安全提交上的不受影响。标签被改写的时间是2026年3月19日 UTC 约17:43 至3月20日约05:40。

Q我在用 setup-trivy,受影响吗?
A

根据公告,凡是没有按 SHA 固定的使用方式都受影响。全部7个标签(v0.2.0 至 v0.2.6)在3月19日 UTC 约17:43 至约21:44 之间被指向恶意提交。按 SHA 固定在安全提交上的不受影响,v0.2.6 已用安全内容重新创建。

Q如果受影响了,该怎么做?
A

Aqua 表示,只要被入侵的版本有可能在你的环境中运行过,受影响流水线能访问的所有密钥都必须视为已暴露并立即轮换:云凭据(AWS、GCP、Azure)、Git 凭据、容器镜像仓库凭据、SSH 密钥、Kubernetes 令牌、环境变量及其他自动化密钥。它表示 npm 发布令牌应视为已被实际攻破。

Q原因是什么?
A

据 Aqua 称,2026年2月下旬,攻击者利用 Trivy 的 GitHub Actions 环境中的配置错误,提取了一个特权访问令牌。3月1日公开了这起事件并轮换了凭据,但轮换不是原子操作(花了几天),攻击者可能用一个仍然有效的令牌拿到了新轮换的密钥。Aqua 表示这使得3月19日的恶意发布成为可能。

QAqua Security 的商业产品受影响了吗?
A

Aqua 表示,没有迹象显示其商业产品受到影响,包括 Aqua Platform 中提供的 Trivy。它解释说,商业平台与 GitHub 分开构建和运营,不共享仓库、CI/CD 基础设施、密钥或签名系统,并且只在经过把关的安全审查后才引入开源版本。这一说法不适用于直接使用开源 Trivy 的情况。