OWASP/cve-lite-cli
GitHub: OWASP/cve-lite-cli
面向 JS/TS 开发者的本地依赖漏洞扫描工具,通过解析 lockfile 匹配 OSV 漏洞数据库,提供可复制的修复命令和离线扫描能力,帮助开发者在提交代码前快速发现并解决依赖安全问题。
Stars: 133 | Forks: 15
[](https://owasp.org/cve-lite-cli)
[](https://www.npmjs.com/package/cve-lite-cli)
[](https://www.npmjs.com/package/cve-lite-cli)
[](https://github.com/OWASP/cve-lite-cli/actions)
[](https://github.com/marketplace/actions/cve-lite-cli)
[](https://github.com/OWASP/cve-lite-cli/blob/main/LICENSE)
[](https://github.com/OWASP/cve-lite-cli)
[](https://www.bestpractices.dev/projects/12731)
## 当前安全扫描机制的问题
大多数安全工具是为流水线设计的,而不是为人服务的。
Dependabot 提交的 PR 你总会抽空去看。CI 扫描器在事后数小时阻塞合并。安全仪表盘展示了一堆 CVE ID 列表,却没有提供明确的解决路径。当开发者查看扫描结果时,代码通常已经经过审查并准备交付了。
这种反馈循环太慢以至于毫无用处,并且噪音太多以至于无法信任。开发者逐渐学会了忽视它。
还有一个更根本的问题:这些工具只告诉你哪里有漏洞。很少有工具告诉你到底该怎么处理。结果就是检测与修复之间产生了脱节,安全团队只能通过人工分类来敷衍了事,而开发者则饱受警报疲劳的折磨。
## 一种不同的模式
CVE Lite CLI 基于一种不同的理念构建:**漏洞扫描属于开发者的终端,而不是流水线的末端。**
它在本地读取你的 lockfile,向 [OSV](https://osv.dev) 查询建议数据,并生成具体的修复计划 —— 而不仅仅是一个标识符列表。你可以获得适配你的包管理器的、可直接复制运行的 `npm install`、`pnpm add`、`yarn add` 或 `bun add` 命令。你可以清楚地看到哪些包是直接安装的,哪些是传递依赖引入的。在受限网络环境中,你可以在没有网络连接的情况下进行扫描。
该工具专为你在推送代码前的那一刻设计:快速、诚实且可执行。
## 快速入门
```
npm install -g cve-lite-cli
cve-lite /path/to/project
```
或者使用 `npx` 一次性运行:
```
npx cve-lite-cli /path/to/project
```
无需账户。无需配置。源代码绝不离开你的机器。
## 功能特性
- **生成可直接复制运行的修复命令** —— 每个发现都附带一个你可以立即运行的、适配包管理器的安装命令
- **区分直接风险与传递风险** —— 显示漏洞存在于你安装的包中,还是深埋于依赖链的第三层中
- **解释父包更新路径** —— 对于传递依赖的 npm 发现,当当前父包范围可以解析已知的非漏洞子包时,推荐 `npm update `;当必须改变范围本身时,推荐升级父包
- **感知使用情况的可达性** —— 可选地使用静态分析来检测易受攻击的包是否实际在你的代码中被导入,通过 `--usage` 和 `--only-used` 减少噪音
- **离线建议数据库** —— 提前同步建议数据,并在扫描时不进行任何运行时 API 调用,专为企业和隔离网络环境设计
- **交互式 HTML 报告** —— 生成一个独立的仪表盘,包含严重性卡片、可搜索的发现列表以及可复制的修复命令(`--report`)
- **自动修复模式** —— 自动应用已验证的直接依赖修复并重新扫描(`--fix`)
- **适配 CI** —— `--fail-on high` 在发现达到或超过严重性阈值时以非零状态退出;GitHub Marketplace 上提供了第一方 [GitHub Action](https://github.com/marketplace/actions/cve-lite-cli)
- **极小的占用空间** —— 四个运行时依赖,对于安全工具而言刻意保持精简
## 截图展示
## 工作流集成
CVE Lite CLI 适用于开发工作流的每个阶段,而不仅仅是 CI。
**本地开发** —— 在发起 PR 前运行扫描。默认输出快速且简洁。`--verbose` 添加完整的修复计划,包含依赖路径和优先级排序的修复命令。`--report` 会打开一个交互式 HTML 仪表盘。
**CI 流水线** —— 使用 `--fail-on high` 根据严重性门控构建。JSON 输出(`--json`)可与 SIEM、仪表盘和自定义自动化集成。SARIF 输出已在路线图中,用于直接与 GitHub Security 集成。
**受限与企业环境** —— 提前使用 `cve-lite advisories sync` 同步建议数据库,然后使用 `--offline` 进行离线扫描。扫描期间不产生任何运行时出站调用。同步约 217,065 条建议记录可在 9 秒内完成。
**GitHub Actions** —— Marketplace 上提供了第一方操作:
```
- uses: OWASP/cve-lite-cli@v1
with:
verbose: "true"
fail-on: high
```
CVE Lite CLI 在 CI 中扫描自身的依赖项。参见 [`self-scan.yml`](https://github.com/OWASP/cve-lite-cli/blob/main/.github/workflows/self-scan.yml)。
有关完整的 CI 模式(包括离线工作流、git 钩子和脚本自动化),请参阅 [CI 和工作流集成指南](https://owasp.org/cve-lite-cli/docs/ci-integration)。
## 功能对比
| 功能 | CVE Lite CLI | npm audit | OSV-Scanner | Snyk CLI | Socket CLI |
|---|:---:|:---:|:---:|:---:|:---:|
| JS/TS lockfile 扫描 | ✅ | ✅ | ✅ | ✅ | ✅ |
| npm + pnpm + Yarn + Bun 支持 | ✅ | ❌ | ✅ | ✅ | ✅ |
| 无需账户 | ✅ | ✅ | ✅ | ❌ | ❌ |
| 免费使用 | ✅ | ✅ | ✅ | ❌ | ❌ |
| 感知使用情况的可达性扫描 | ✅ | ❌ | ❌ | ✅ | ⚠️ |
| 直接依赖与传递依赖可见性 | ✅ | ⚠️ | ✅ | ✅ | ✅ |
| 可复制运行的修复命令 | ✅ | ❌ | ❌ | ✅ | ⚠️ |
| 传递依赖父包更新指导 | ✅ | ❌ | ⚠️ | ⚠️ | ⚠️ |
| 建议的修复计划 | ✅ | ❌ | ⚠️ | ✅ | ⚠️ |
| JSON 输出 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 离线/本地建议数据库 | ✅ | ❌ | ⚠️ | ❌ | ❌ |
✅ = 核心强项 · ⚠️ = 部分支持或取决于工作流 · ❌ = 非核心强项
传递依赖父包更新指导是一个关键区别:CVE Lite CLI 避免建议为仅作为传递依赖存在的包进行直接安装。对于 npm lockfile,它可以识别何时 `npm update ` 足以在当前父包范围内重新解析已知非漏洞的子包,以及何时父包本身需要升级。
有关详细的各工具分析,请参阅[与其他工具的对比](https://owasp.org/cve-lite-cli/docs/comparison)。
## 真实世界验证
CVE Lite CLI 已针对真实的开源项目进行评估,以验证它能揭示有意义的问题——包括非显而易见的传递依赖漏洞和复杂的升级路径——而不仅仅是低信号量的建议匹配。
- [OWASP Juice Shop](https://owasp.org/cve-lite-cli/docs/case-studies/owasp-juice-shop) —— 扫描一个具有已知依赖项问题的、故意存在漏洞的应用程序
- [NestJS](https://owasp.org/cve-lite-cli/docs/case-studies/nestjs) —— 在一个广泛使用的 Node.js 框架中,处理真实的传递依赖修复序列
- [Analog](https://owasp.org/cve-lite-cli/docs/case-studies/analog) —— 扫描一个现代的 pnpm v9 Angular monorepo(3,367 个包),发现意外的工具链漏洞
这些不是演示。它们是对真实代码库的记录扫描,包含真实的发现,在应用修复命令前后均有记录。
如果你维护一个开源的 JavaScript 或 TypeScript 项目,并希望在其上评估 CVE Lite CLI,请提交一个 issue 并分享仓库。优秀的候选项目可能会成为未来的公开案例研究。
## OWASP 认可
CVE Lite CLI 是一个 [OWASP 孵化器项目](https://owasp.org/cve-lite-cli),由 Open Web Application Security Project 基金会进行同行评审和维护。成为 OWASP 的一部分意味着:
- 由安全专业人员进行**同行评审**
- **社区驱动**的开发与治理
- **供应商中立**,不需要商业平台
- **开源**,具有透明的安全实践和最小的依赖占用
**它在 OWASP 生态系统中的定位:**
CVE Lite CLI 填补了一个特定的空白——快速、本地优先的 JS/TS 依赖项扫描,贴近发布阶段——这是更广泛的 OWASP 工具未优化覆盖的领域:
| 工具 | 重点 |
|---|---|
| CVE Lite CLI | Lockfile 优先,本地开发者 CLI,专注于修复,JS/TS |
| OWASP Dependency-Check | 多语言,SAST 风格,更广泛的生态系统 |
| OWASP dep-scan | 多语言和环境,SBOM 及云原生 |
| OWASP Dependency-Track | 平台与 SBOM 管理,非本地 CLI |
CVE Lite CLI 是这些工具的补充。它不能替代持续监控或完整的 SBOM 管理——它是你在推送代码前运行的快速本地检查工具。
## 理念
安全工具在检测广度和合规性报告方面进行了大量优化。这在平台层面很有用。但对于试图在下班前交付干净代码的个人开发者来说,这是一个错误的模型。
检测而不修复只会徒增工作量而无法解决问题。一份仅以 CVE ID 列表结尾的漏洞报告将负担完全转移给了开发者:查阅每一条建议,找出哪个版本是安全的,弄清楚它是直接依赖还是传递依赖,并手动构建正确的安装命令。正是这种摩擦导致安全发现迟迟得不到解决。
CVE Lite CLI 基于这样一个前提构建:**安全工具越接近开发者的自然工作流,就越有可能被使用**——而且一个将问题及其修复方案一并展示的工具,比一个只抛出问题的工具更有价值。
## 后续计划
CLI 是基础。这种模式——本地优先、可执行、开发者原生——自然而然地超越了终端的范畴。
JSON 和 SARIF 输出使得当前的发现能被编辑器、仪表盘和自动化工作流所使用。项目的下一阶段围绕更紧密的开发者集成展开:在依赖安装时而非仅在扫描时暴露漏洞;更深入的 IDE 集成;以及无需云平台即可实现的团队级可见性。
有关当前计划,请参阅[路线图](https://owasp.org/cve-lite-cli/docs/roadmap)。
## 使用方法
```
# 基础扫描
cve-lite /path/to/project
# 显示所有发现
cve-lite /path/to/project --all
# 仅关注紧急发现
cve-lite /path/to/project --min-severity high
# 完整输出:修复计划、路径和完整表格
cve-lite /path/to/project --verbose
# 应用已验证的直接依赖修复并重新扫描
cve-lite /path/to/project --fix
# 仅生产依赖(在 lockfile 支持的情况下)
cve-lite /path/to/project --prod-only
# 高及以上严重级别导致构建失败
cve-lite /path/to/project --fail-on high
# JSON 输出
cve-lite /path/to/project --json
# 生成 HTML 漏洞仪表板(自动在浏览器中打开)
cve-lite /path/to/project --report
cve-lite /path/to/project --report ./my-report --no-open
# 扫描项目源文件以检查易受攻击的依赖项是否实际被导入
cve-lite /path/to/project --usage
# 通过仅显示源代码中导入的包的漏洞来过滤干扰信息
cve-lite /path/to/project --usage --only-used
# 同步本地 advisory DB 以进行离线扫描
cve-lite advisories sync
# 在零运行时 advisory API 调用下扫描
cve-lite /path/to/project --offline
# 使用特定的本地 advisory DB 文件
cve-lite /path/to/project --offline-db /path/to/advisories.db
# 使用自定义 advisory 端点
cve-lite /path/to/project --osv-url https://security.company.internal/osv
# 显示版本
cve-lite --version
```
### 为什么 `--usage` 是一个可选标志?
CVE Lite CLI 的设计初衷是快。扫描 lockfile 几乎是瞬间完成的,而对数千个源文件运行静态可达性分析则需要耗费大量时间。当包在构建脚本中使用或在运行时动态导入时,静态分析也可能产生漏报。将 `--usage` 设为可选,确保了默认的 lockfile 扫描保持即时性并严格反映你的依赖图,同时在分类发现时为你提供了积极过滤不可达噪音的。
## 自动修复模式 (`--fix`)
`--fix` 使用你项目的包管理器应用已验证的直接依赖修复,然后自动重新扫描。
在当前版本中,它会:
- 仅应用具有已验证的最低已知非漏洞目标的直接依赖修复
- 根据你的 lockfile 使用 `npm install`、`pnpm add`、`yarn add` 或 `bun add`
- 应用修复后自动重新扫描
- **不会**自动应用传递依赖覆盖或保证应用程序兼容性
```
npx cve-lite-cli /path/to/project --fix
```
有关输出详情和解释,请参阅[修复模式指南](https://owasp.org/cve-lite-cli/docs/fix-mode)。
有关 CLI 如何为传递依赖发现选择直接升级、父包升级和 npm `update` 建议的更深入解释,请参阅[修复策略指南](https://owasp.org/cve-lite-cli/docs/remediation-strategy)。
## HTML 漏洞报告 (`--report`)
从任何扫描中生成一个独立的 HTML 仪表盘——包含严重性卡片、带有搜索功能的交互式发现列表、可复制的修复命令以及升级时的破坏性变更指示器——全部写入本地目录并在浏览器中自动打开。
```
cve-lite /path/to/project --report
cve-lite /path/to/project --report ./my-report --no-open
```
有关完整的选项参考和输出详情,请参阅 [HTML 报告指南](https://owasp.org/cve-lite-cli/docs/html-report)。
## 离线支持
对于处于企业、受限网络或隔离网络环境中的团队:
```
# 在本地同步 advisory 数据
cve-lite advisories sync
# 在无运行时 API 调用下扫描
cve-lite . --offline
```
在经过批量 SQLite 摄取优化后,同步约 217,065 条建议记录可在 9 秒内完成——大约比初始实现**快 9.9 倍**。
有关包含 CI、计划刷新和受控网络模式在内的完整工作流,请参阅[离线建议数据库指南](https://owasp.org/cve-lite-cli/docs/offline-advisory-db)。
## 适用人群
CVE Lite CLI 非常适合:
- **独立开发者和 OSS 维护者** —— 无需任何平台开销的快速发布前检查
- **初创公司和小型团队** —— 零成本的轻量级 CI 门控
- **顾问** —— 几秒钟内对客户项目运行扫描,并提供清晰的修复计划以便交付
- **处于受限网络环境的企业团队** —— 离线建议数据库工作流消除了扫描期间对运行时出站调用的需求
- **使用 npm、pnpm、Yarn 和 Bun 的团队** —— 在一个工具中统一扫描所有四种包管理器
有关这些场景的具体模式,请参阅 [CI 和工作流集成指南](https://owasp.org/cve-lite-cli/docs/ci-integration)。
## 当前局限性
- 不能在恶意包出现在建议数据之前检测到它们
- 不执行行为恶意软件检测或包内容分析
- 不证明可利用性或验证运行时可达性
- 不扫描容器镜像、二进制文件、机密或 IaC
- 不替代完整的应用程序安全计划
- 目前专注于 JS/TS 依赖项扫描
- 随着建议数据集的增长,本地建议同步性能需要持续优化
## 依赖项占用
**运行时:** `yaml` · `yarn-lockfile` · `better-sqlite3` · `fflate`
**仅开发:** `@types/node` · `tsx` · `typescript`
这是有意为之。因为 CVE Lite CLI 是一款安全导向的工具,运行时依赖被保持在最低限度且易于审查。
## 路线图
有关完整计划,请参阅[路线图](https://owasp.org/cve-lite-cli/docs/roadmap)。阶段 1 和 2 已完成。阶段 3(生态系统覆盖:Bun、Deno、解析器改进)正在进行中。
## 故障排除
有关常见问题(未找到 lockfile、结果为零、建议同步缓慢、离线数据库错误、`--fix` 跳过发现以及 CI 失败),请参阅[故障排除指南](https://owasp.org/cve-lite-cli/docs/troubleshooting)。
## 解析器覆盖
有关支持的 lockfile 格式、选择优先级、`package.json` 回退机制以及已知边缘情况(包括 monorepo 和私有注册表),请参阅[解析器覆盖指南](https://owasp.org/cve-lite-cli/docs/parser-coverage)。
有关 CVE Lite CLI 如何选择包升级目标和父包更新路径,请参阅[修复策略指南](https://owasp.org/cve-lite-cli/docs/remediation-strategy)。
## 网站
公开文档站点发布在 [owasp.org/cve-lite-cli](https://owasp.org/cve-lite-cli/),使用 Docusaurus 从 [`website/`](website/) 构建。所有公开指南和案例研究均位于 [`website/docs/`](website/docs/) 目录下——该文件夹是面向用户的文档的唯一可靠来源。
```
cd website
npm install
npm run build
```
## 治理
CVE Lite CLI 是一个 OWASP 孵化器项目,由 Sonu Kapoor 作为项目负责人进行维护。该项目遵循单一维护者(仁慈独裁者)治理模型。项目负责人在考虑贡献者和更广泛社区的意见后,对范围、设计方向和发布做出最终决策。
### 角色
- **项目负责人** —— 目前为 Sonu Kapoor。负责路线图,设定发布节奏,审查并合并 Pull Request,并担任基金会的 OWASP 项目负责人。
- **贡献者** —— 任何提交 issue、提出 Pull Request 或改进文档的人。无需事先的提交记录即可参与贡献,我们欢迎来自 OWASP 外部的贡献。
### 决策机制
- 重大变更(新功能、破坏性变更、范围决策)首先以 GitHub Issue 的形式提出,以便在编写代码之前公开讨论设计。
- Pull Request 由项目负责人审查。小型修复可以直接合入。较大的变更可能需要修订或跟进 Issue。
- 当累积的变更值得进行版本升级时,由项目负责人进行发布,遵循 [CONTRIBUTING.md](https://github.com/OWASP/cve-lite-cli/blob/main/src/docs/CONTRIBUTING.md) 中的流程。
### 争议解决
技术分歧由项目负责人在权衡贡献者意见后解决。与社区标准或[行为准则](https://github.com/OWASP/cve-lite-cli/blob/main/CODE_OF_CONDUCT.md)执行相关的争议可上报给 OWASP 基金会,该基金会将作为项目社区规范的最后保障。
随着贡献者群体的增长,此治理模型可能会演进。对模型的任何变更都将在此处记录并通过 GitHub 仓库宣布。
## 安全与验证
CVE Lite CLI 对每个版本的源代码发布和构建产物均进行签名。任一签名本身均足以验证。
**源代码(已签名的 git tag)。** 从 v1.12.1 之后的版本开始,每个发布 tag 都是一个经过 GPG 签名的注释 tag。项目负责人的公钥发布在 [`https://github.com/sonukapoor.gpg`](https://github.com/sonukapoor.gpg)。私钥仅保存在项目负责人的本地机器上——不在 GitHub、不在 npm 注册表、也不在 CI 上。验证方法:
```
curl -sSL https://github.com/sonukapoor.gpg | gpg --import
git tag -v vX.Y.Z
```
**发布压缩包(Sigstore 制品证明)。** 每次 GitHub 发布都会附加一个在构建时通过 [GitHub Artifact Attestations](https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds) 签名的 `cve-lite-cli-X.Y.Z.tgz` 资产。签名密钥是每次构建生成的临时 OIDC 颁发密钥,提供等同于 SLSA Level 2 的构建来源证明。验证方法:
```
gh attestation verify cve-lite-cli-X.Y.Z.tgz --repo OWASP/cve-lite-cli
```
**npm 安装的包。** npm 注册表为每个已发布的包添加 ECDSA 签名,与项目上述的自有签名密钥相互独立:
```
npm audit signatures
```
有关完整的验证详情、指纹和安全问题报告,请参阅 [SECURITY.md](https://github.com/OWASP/cve-lite-cli/blob/main/src/docs/SECURITY.md)。有关项目的威胁模型、信任边界以及如何应对常见实现缺陷的信息,请参阅[安全保证案例](https://owasp.org/cve-lite-cli/docs/security-assurance-case)。
## 贡献
关于输出清晰度、修复指导、生态系统覆盖和 CI 使用的反馈尤其有价值。
请参阅 [CONTRIBUTING.md](https://github.com/OWASP/cve-lite-cli/blob/main/src/docs/CONTRIBUTING.md) 开始参与。
## 为你的项目添加徽章
如果你在你的项目中使用 CVE Lite CLI,请将此徽章添加到你的 README 中:
```
[](https://github.com/OWASP/cve-lite-cli)
```
[](https://github.com/OWASP/cve-lite-cli)
## 社区与支持
对于 Bug 报告和功能请求:[GitHub Issues](https://github.com/OWASP/cve-lite-cli/issues)
有价值的反馈包括可复现的 Bug 报告、真实的 lockfile 边缘情况、关于更清晰的输出和修复指导的想法,以及 CI 或 JSON 工作流示例。
对于安全相关报告:[SECURITY.md](https://github.com/OWASP/cve-lite-cli/blob/main/src/docs/SECURITY.md)
本项目遵循[行为准则](https://github.com/OWASP/cve-lite-cli/blob/main/CODE_OF_CONDUCT.md)。请在参与之前阅读。
如果 CVE Lite CLI 对你的发布工作流有所帮助,一个 [GitHub star](https://github.com/OWASP/cve-lite-cli) 将有助于更多开发者发现它。
*大多数工具只会告诉你出了什么问题。CVE Lite CLI 告诉你该运行什么。*
## 许可证
MIT
CVE Lite CLI
**🏆 正式认可为 [OWASP 孵化器项目](https://owasp.org/cve-lite-cli)**属于你的终端漏洞扫描工具 —— 而不是 CI 流水线。
扫描你的 lockfile,获取可直接复制运行的修复命令,交付干净的代码。
🆓 免费使用无需账户,无订阅, 无需云服务 |
🏠 本地运行在你的机器上扫描 lockfile。 数据绝不离开你的环境 |
⚡ 速度快几秒内出结果。本地缓存使 重复扫描近乎即时 |
| Terminal output | HTML dashboard (--report) |
|---|---|
|
|
| Default scan output · verbose output guide | Generated with --report · HTML report guide |
标签:API安全, CI/CD安全, DevSecOps, GraphQL安全矩阵, JavaScript安全, JSON输出, Llama, Lockfile解析, MITM代理, Node.js安全, npm安全, OSV数据库, TypeScript安全, 上游代理, 依赖项分析, 前端安全, 安全修复, 安全扫描器, 暗色界面, 本地扫描, 自动化攻击, 软件成分分析(SCA)


