为何Trivy扫描器报告项目中不存在的依赖漏洞?
问题描述
我使用Trivy GitHub Action(aquasecurity/trivy-action@master)扫描NestJS项目,尽管未直接或间接使用相关包(yarn.lock中无任何痕迹),但仍收到以下漏洞报告:
┌─────────────────────────────────────┬────────────────┬──────────┬───────────────────┬───────────────┬────────────────────────────────────────────────────────────┐ │ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │ ├─────────────────────────────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤ │ dot-object (package.json) │ CVE-2019-10793 │ MEDIUM │ 1.1.0 │ 2.1.3 │ Prototype Pollution in dot-object │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-10793 │ ├─────────────────────────────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤ │ http-cache-semantics (package.json) │ CVE-2022-25881 │ HIGH │ 4.1.0 │ 4.1.1 │ http-cache-semantics: Regular Expression Denial of Service │ │ │ │ │ │ │ (ReDoS) vulnerability │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-25881 │ └─────────────────────────────────────┴────────────────┴──────────┴───────────────────┴───────────────┴────────────────────────────────────────────────────────────┘
问题分析与解决建议
针对你遇到的情况,以下是几个常见原因及验证方法:
- Trivy直接读取package.json声明:报告里标注了
(package.json),说明Trivy是从package.json文件识别到这两个包的,哪怕它们没被实际安装、没出现在yarn.lock里。先打开package.json搜索这两个包名,确认是否有遗漏的直接依赖声明(比如添加后没彻底删除)。 - yarn.lock未同步依赖状态:如果最近调整过依赖但没重新生成锁文件,可能导致yarn.lock和实际依赖不符。执行
yarn install --force强制更新依赖并重新生成锁文件,再重新扫描试试。 - Trivy缓存旧扫描结果:GitHub Action环境中的Trivy可能缓存了之前的扫描数据,导致重复报告已不存在的依赖。可以在Action配置中添加缓存清理步骤,或手动触发工作流时选择清除缓存。
- 动态依赖未被yarn.lock记录:部分NestJS相关包可能在运行/构建时动态引入这些依赖,这类动态加载的包不会被yarn.lock记录。用
yarn why dot-object和yarn why http-cache-semantics命令,强制查询依赖链路,能找出是否有间接引用。 - Trivy漏洞匹配错误:极少数情况下,Trivy可能错配漏洞。核对这两个CVE的影响版本,确认项目中是否真存在对应版本的包,或向Trivy仓库提交误报反馈。
内容的提问来源于stack exchange,提问作者Peter_101
相关产品推荐
相关产品推荐

