38,020 颗星的安全扫描器,自己先被打了两次:Trivy 的 2026 供应链事故与它现在能做什么
如果你在 CI 里跑过 trivy image,那你是这个故事的当事人之一。2026 年 9 月,aquasecurity/trivy 在 GitHub Trending 上重新出现,Star 数停在 38,020 颗。但让它在今年被反复讨论的,不是功能更新,而是它自己成了被攻击的目标——一款专门用来找漏洞的安全扫描器,在半年里被供应链攻击打了不止一次。
先把它是什么说清楚
Trivy 是 Aqua Security 主导的开源安全扫描器,Apache-2.0 协议,2019 年 4 月建仓,用 Go 写。官方的定位是”全面且多用途”:它有一组 scanner(找什么)和一组 target(在哪找)。
- 扫描目标:容器镜像、文件系统、远程 Git 仓库、VM 镜像、Kubernetes 集群
- 扫描能力:OS 包与语言依赖(生成 SBOM)、已知 CVE、IaC 配置错误、敏感信息与密钥、软件许可证
一句话:它能用一个二进制文件,把镜像里的系统包、依赖里的第三方库、Terraform/K8s YAML 的错配、硬编码密钥一次性扫完。这也是它在 CI 里被当成”默认选项”的原因——不用为了四类扫描装四个工具。安装也简单:
brew install trivy
docker run aquasec/trivy
trivy image python:3.4-alpine
trivy fs --scanners vuln,secret,misconfig myproject/
最新正式版是 v0.74.0(2026-08-14),GitHub 上累计已有 90 多页 Release,最近的 v0.73.0(2026-08-03)、v0.72.0(2026-06-30)都按正常节奏推进。
今年真正的新闻:它自己被供应链攻击了
这是写这篇的核心,也是很多”功能介绍文”会绕开的部分。
2026 年 3 月 19 日,攻击者用泄露的凭据发布了一个恶意版本 trivy v0.69.4,并把 aquasecurity/trivy-action 的 77 个版本标签中的 76 个强制推送成窃取凭据的恶意代码,同时替换了 aquasecurity/setup-trivy 的全部 7 个标签。3 月 22 日,攻击者又发布了恶意的 v0.69.5 和 v0.69.6 Docker Hub 镜像。官方安全公告 GHSA-69fq-xp46-6×23 把暴露窗口写得很具体:v0.69.4 约 3 小时,trivy-action 约 12 小时,setup-trivy 约 4 小时,Docker Hub 镜像约 10 小时。
到 6 月,又有一次针对 GitHub Actions 标签的入侵被 Socket 记录,Hacker News 上这条拿到了 250 分、83 条评论(讨论帖)。更麻烦的是,攻击链条还外溢了:Cisco 一处开发环境被关联入侵,源代码被窃取(BleepingComputer 报道);Wiz 和 VaultProof 都有针对攻击手法的拆解。
HN 评论里两句话值得原样记住。一句是:”temporarily(临时)这个词可能有点委婉。”另一句是一个做过审计的人说:他早前审 Trivy 的 GitHub Actions 时就发现 setup-trivy 会 clone trivy 仓库的 main 分支并执行里面的 shell 脚本,而且长期没有把引用钉死到具体 commit,直到几个月前才有人提 PR 修掉。
这不是要否定 Trivy,而是要说明一个事实:安全工具本身也是攻击面,而且因为它在 CI 里有高权限,一旦被污染,危害被放大。
项目边界:它能做什么,不能做什么
- 能: 已知 CVE 检测、SBOM 生成(SPDX/CycloneDX)、IaC 错配、密钥扫描、许可证合规、离线/气隙环境运行(数据库可预下载)
- 不能: 它不修正代码,不替你升级依赖。它的价值是把”有没有问题”变成一条可判断的结论,修复动作还得人来做
- 不擅长: 2026 年有第三方基准显示 Trivy 在 1GB 以上大镜像上的扫描速度不如 Grype(一份 johal.in 基准 给出 13.8s vs 4.2s 的差距,同时称 Trivy 严重 CVE 检出率 98.2%、略高于 Grype 的 91.5%)。这类数字来自第三方、口径各异,建议只当作方向参考
真实使用门槛
- 第一次跑要下载漏洞库,气隙环境需提前同步,否则 CI 首跑会卡住
- 误报要靠
.trivyignore.yaml管理,且最好写上过期时间和理由,而不是静默压制 - 版本一定要钉死。经历过上面的攻击后,还在 CI 里写
@latest或跟着 tag 走的,等于把供应链风险主动打开 - 别只依赖单一扫描器。有团队用 Trivy 做 PR 门禁、Grype 跑夜间批扫,两者叠加把严重 CVE 检出率抬到 97.1%(同样来自上面的第三方基准)
适合谁 / 不适合谁
适合: 需要”一个工具扫完镜像 + 依赖 + IaC + 密钥”的中小团队;预算有限但要做 SBOM 与合规证据的团队;气隙/内网环境(Trivy 支持预先下载数据库离线跑)。
不一定适合: 需要开箱即用的修复 PR、SSO、RBAC、合规报表这类企业级工作流的团队——那是 Snyk / Aqua 商业版的地盘,Trivy 本身不做这些。对扫描速度极度敏感、镜像普遍超过 1GB 的高频 CI,值得先做一次 Grype 对比测试。
可以立刻做的下一步
- 先自查有没有踩雷:用 GitHub 公告给出的暴露窗口,核对 2026 年 3 月 19—23 日期间你是否拉取过 v0.69.4/0.69.5/0.69.6,或 CI 里用过未钉版本的
trivy-action/setup-trivy - 把所有 CI 引用改成钉死到具体 commit SHA 或版本号,关掉跟随
latest的习惯 - 在你信任的、干净的环境里装一次、跑一次:
trivy image --severity CRITICAL,HIGH --ignore-unfixed --exit-code 1 your-image:tag
- 升级到 v0.74.0,并为
.trivyignore.yaml里的每条例外补上理由与到期时间 - 用
trivy fs --format cyclonedx先产出一份 SBOM,把”我到底依赖了什么”这件事变成可查的证据
仓库:https://github.com/aquasecurity/trivy
官网与文档:https://trivy.dev
评论区
登录后可评论。