sonukapoor/cve-lite-cli

GitHub: sonukapoor/cve-lite-cli

专注于 JavaScript 和 TypeScript 项目的快速、轻量级依赖漏洞扫描工具,支持离线操作并提供实用的修复指导。

Stars: 23 | Forks: 0

[![npm version](https://img.shields.io/npm/v/cve-lite-cli)](https://www.npmjs.com/package/cve-lite-cli) [![npm downloads](https://img.shields.io/npm/dm/cve-lite-cli)](https://www.npmjs.com/package/cve-lite-cli) [![CI](https://img.shields.io/github/actions/workflow/status/sonukapoor/cve-lite-cli/ci.yml?branch=main)](https://github.com/sonukapoor/cve-lite-cli/actions) [![GitHub Marketplace](https://img.shields.io/badge/GitHub%20Marketplace-CVE%20Lite%20CLI-blue)](https://github.com/marketplace/actions/cve-lite-cli) [![License](https://img.shields.io/github/license/sonukapoor/cve-lite-cli)](https://github.com/sonukapoor/cve-lite-cli/blob/main/LICENSE)
CVE Lite CLI

CVE Lite CLI

快速、对开发者友好的 JavaScript 和 TypeScript 项目漏洞扫描工具,提供实用的修复指导、离线支持,以及清晰的直接依赖与传递性依赖可见性。

扫描。理解。修复。

快速开始新手上路功能用法贡献

## 目录
概述
什么是 CVE Lite CLI
新手上路
离线公告数据库支持
为什么离线模式很重要
OWASP Juice Shop 案例研究
NestJS 案例研究
修复模式指南 (--fix)
如何阅读详细输出
输出示例
为什么存在此工具
项目范围与差异化
用法
快速开始
用法
工作流模式
网络行为与隐私
功能
支持的工作流
CI 与离线
依赖足迹
示例用例
推荐的工作流模式
与其他工具的比较
当前限制
定位
项目
路线图
贡献
社区与支持
许可证
## 什么是 CVE Lite CLI **CVE Lite CLI** 帮助开发者扫描 JavaScript 和 TypeScript 项目中已知的依赖漏洞,更重要的是,它展示了应该优先修复什么。它专为发布前的时刻而构建,此时你需要一个明确的答案、一条实用的修复路径,以及一个可以在本地运行而无需平台开销的工具。 它的设计目标是: - 在日常开发工作流中对开发者友好 - 本地优先,并对网络行为保持透明 - 可用于企业环境和受限网络环境 - 能够通过本地公告数据库实现零运行时网络扫描 有关真实世界的修复示例,请参阅 [OWASP Juice Shop 案例研究](docs/case-studies/owasp-juice-shop.md) 和 [NestJS 案例研究](docs/case-studies/nestjs.md)。 如果你不熟悉详细模式,请使用 [如何阅读详细输出指南](docs/how-to-read-verbose-output.md)。 如果你想要自动的直接依赖修复,请使用 [修复模式指南](docs/fix-mode.md)。 ## 新手上路 如果一开始觉得详细输出内容过于密集,请从 [如何阅读详细输出指南](docs/how-to-read-verbose-output.md) 开始。 1. 在真实项目上运行一次扫描:`npx cve-lite-cli /path/to/project --verbose` 2. 查看直接依赖与传递性依赖的发现结果,以及 `Copy And Run These Fix Commands` 部分(直接命令组适用于清单中声明的依赖) 3. 将输出与你当前的扫描器工作流进行比较 4. 查看真实的演练: - [OWASP Juice Shop 案例研究](docs/case-studies/owasp-juice-shop.md) - [NestJS 案例研究](docs/case-studies/nestjs.md) 5. 使用 [如何阅读详细输出指南](docs/how-to-read-verbose-output.md) 将扫描部分转化为后续步骤 如果你希望影响路线图,请提交 issue 并提供关于以下内容的反馈: - 直接依赖与传递性依赖的划分在实际中是否有用 - 修复指导在哪些方面仍然缺失 - 什么会增加或减少对 CLI 安全工具的信任 - 什么能让以前端为主的 CI 工作流更顺畅 ## 新功能:离线公告数据库支持 CVE Lite CLI 现在支持本地公告数据库工作流,适用于不允许运行时出站公告 API 调用的团队。 这意味着你可以: - 提前同步公告数据 - 完全离线扫描项目 - 更轻松地在受限、企业或隔离环境中使用该工具 离线工作流示例: ``` # 构建本地 advisory 数据库 cve-lite advisories sync # 使用默认本地 advisory DB 扫描 cve-lite /path/to/project --offline # 或使用特定的本地 advisory DB 文件扫描 cve-lite /path/to/project --offline-db /path/to/advisories.db ``` ## 为什么离线模式很重要 对于许多团队来说,“能在本地运行”是不够的。他们还需要一个能适应运行时出站调用受限、受到严格审查或完全禁止的环境的扫描器。 离线公告数据库支持使 CVE Lite CLI 在以下方面更加实用: - 具有严格网络控制的企业环境 - 需要明确公告数据处理方式的受监管团队 - 不应依赖公共运行时 API 访问的内部 CI 系统 - 隔离或部分连接的工作流 这是该项目目前最重要的差异化优势之一,因为它不仅提高了便利性,还提高了信任度和可采纳性。 该项目还提供了一个可重用的第一方 GitHub Action,现已可在 [GitHub Marketplace](https://github.com/marketplace/actions/cve-lite-cli) 上获取,适用于希望获得低摩擦 CI 集成路径的团队。 ## 快速开始 全局安装: ``` npm install -g cve-lite-cli ``` 然后运行: ``` cve-lite /path/to/project ``` 或者使用 `npx` 运行一次: ``` npx cve-lite-cli /path/to/project ``` ## 用法 ``` # 基本扫描 cve-lite /path/to/project # 显示所有发现 cve-lite /path/to/project --all # 仅关注紧急发现 cve-lite /path/to/project --min-severity high # 显示完整详细输出、修复计划、路径和完整表格 # 适用于需要完整上下文的 CI 日志 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 # 使用自定义 advisory 端点 cve-lite /path/to/project --osv-url https://security.company.internal/osv # 显示 CLI 版本 cve-lite --version # 为离线扫描构建本地 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 ``` ## 自动修复模式 (`--fix`) `--fix` 旨在加速修复,而不对安全性做出过度承诺。 在 v1 中,`--fix`: - 仅应用具有已验证的最低已知非易受攻击目标的直接依赖修复 - 使用你项目的包管理器(`npm install`、`pnpm add` 或 `yarn add`) - 应用修复后自动重新扫描 - 打印已应用的修复、跳过的发现结果和剩余发现结果的简明摘要 在 v1 中,`--fix` 不会: - 自动应用传递性覆盖/解决方案 - 保证与应用程序代码的兼容性 - 执行可利用性或运行时可达性分析 示例: ``` npx cve-lite-cli /path/to/project --fix ``` 有关输出详情和解读,请参阅 [修复模式指南](docs/fix-mode.md)。 ## 工作流模式 CVE Lite CLI 现在支持三种清晰的公告工作流: ### 1. 标准在线扫描 当运行时公告 API 访问可接受时,使用默认的 OSV 支持模式: ``` cve-lite /path/to/project ``` ### 2. 公告数据库同步 提前构建或刷新本地公告数据库: ``` cve-lite advisories sync ``` ### 3. 离线本地数据库扫描 针对本地公告数据库进行扫描,实现零运行时公告 API 调用: ``` cve-lite /path/to/project --offline ``` ## 输出示例 CVE Lite CLI 生成一个以摘要优先的控制台视图,专为快速发布分流而设计。它最有用的差异化优势是“Copy And Run These Fix Commands”部分,该部分将发现结果转化为直接依赖的具体后续步骤,同时在可用时显示传递性问题的父级升级指导。 默认输出旨在保持简洁,同时仍然显示最重要的下一步,包括当存在确定目标时,感知包管理器的修复命令。 在输出中要寻找的最重要部分是: ``` 🛠 Copy And Run These Fix Commands ``` 这是 CVE Lite CLI 最清晰的差异化优势之一。该工具不仅显示公告和严重性计数,还试图将发现结果转化为开发者可以立即复制并运行的针对清单声明的直接依赖的具体命令,同时在可用时显示传递性问题的父级升级指导。 例如,该工具现在可以建议一个具体的后续命令,例如: ``` npm install jsonwebtoken@4.2.2 express-jwt@2.1.0 sanitize-html@2.17.2 ``` 确切的命令会适应用于扫描的依赖文件,因此 `package-lock.json`、`pnpm-lock.yaml` 和 `yarn.lock` 都可以生成特定于包管理器的建议。 要进行更深入的调查,请使用 `--verbose` 运行,以提供更完整的修复上下文,包括 `Copy And Run These Fix Commands` 部分、依赖路径、传递性问题的父级升级指导(如果可用)、完整的修复计划、未解决的紧急发现结果的跳过项上下文以及详细的表格视图。 这就是核心理念:安装它,将其指向你的项目,并立即获得实用的依赖修复计划,而不是一堆原始公告。 这种本地循环在实践中非常重要。在 NestJS 案例研究中,随着依赖图在每次安装后发生变化,一条依赖路径需要按顺序进行多次 `tar` 升级。如果团队仅依赖管道扫描器,他们可能会: 1. 升级 `tar` 2. 推送分支 3. 等待 CI 或计划扫描器报告回来 4. 得知他们需要再次升级 `tar` 5. 重复整个周期 这种分支和管道修复很容易为一个 CVE 路径耗费数小时或数天,而在较慢的团队中,这可能会拖延数周。CVE Lite CLI 将反馈循环缩短为可以在同一会话中进行的本地扫描-修复-重新扫描工作流,并且其本地缓存使连续的重新扫描非常快,而不是每次都从头开始重复相同的公告查找。 最终状态行还为扫描提供了清晰的结束,这使得终端使用和屏幕截图更易于阅读。 请参阅下面使用 OWASP Juice Shop 的真实输出示例。 有关真实世界的案例研究,请参阅 [OWASP Juice Shop 案例研究](docs/case-studies/owasp-juice-shop.md) 和 [NestJS 案例研究](docs/case-studies/nestjs.md)。 有关终端输出的逐节演练,请参阅 [如何阅读详细输出](docs/how-to-read-verbose-output.md)。 如果你维护一个开源 JavaScript 或 TypeScript 项目,并希望 CVE Lite CLI 对其进行评估,请提交 issue 并分享仓库。强有力的候选项目可能会成为未来的公开案例研究。 ## 示例:扫描 OWASP Juice Shop(真实输出) CVE Lite CLI 可用于真实世界的易受攻击应用程序,例如 OWASP Juice Shop。 OWASP [Juice Shop](https://github.com/juice-shop/juice-shop) 是一个故意不安全的 JavaScript 应用程序,广泛用于安全培训和测试。针对它运行 CVE Lite CLI 提供了该工具在具有已知漏洞的依赖树上如何行为的真实示例。 要亲自尝试: 示例: ``` git clone https://github.com/juice-shop/juice-shop.git cd juice-shop cve-lite . ```

CVE Lite CLI default output screenshot

详细示例: 在下面的屏幕截图中查找 `Copy And Run These Fix Commands` 部分。这是将发现结果转化为直接修复步骤的输出部分。

CVE Lite CLI verbose output screenshot CVE Lite CLI verbose output screenshot CVE Lite CLI verbose output screenshot

## 为什么存在此工具 许多开发人员希望在发布前进行实用的依赖扫描,但他们不希望仅仅为了回答一个简单的问题而承担更大平台的成本、复杂性或摩擦: **我们在这个项目中有已知的易受攻击包吗,我们应该首先修复什么?** CVE Lite CLI 就是为此工作流而构建的。 它专注于: - 快速 - 本地优先 - 易于理解 - 在 CI 中有用 - 诚实地说明它能做什么和不能做什么 ## 项目范围与差异化 CVE Lite CLI 是有针对性的。 它是为 JavaScript 和 TypeScript 依赖扫描而构建的,特别是在开发人员在发布前希望进行快速本地检查或在依赖审查期间希望获得简单 CI 网关的工作流中。 该项目强调: - npm、pnpm 和 Yarn lockfile 支持 - 直接依赖与传递性依赖可见性 - 最高优先级的修复和建议的依赖修复计划 - 用于自动化的 JSON 输出 - 通过本地公告数据库进行离线扫描 - 通过 `--osv-url` 支持可配置的公告端点,用于内部代理或镜像 - 小型、可审查的运行时足迹 这种狭窄是故意的。CVE Lite CLI 并不试图成为完整的应用程序安全平台或广泛的多表面扫描器。它试图成为一个轻量级、易于理解的、以开发者为中心的工具,适用于希望进行实用漏洞扫描而无需额外成本或复杂性的团队。 ## 与类似 OWASP 项目的关系 CVE Lite CLI 并不试图取代更广泛的 OWASP 安全工具。 它的作用更狭窄且专注于工作流: - 专注于 JavaScript 和 TypeScript 依赖扫描 - 专为快速本地检查和简单的 CI 发布网关而设计 - 以直接依赖与传递性依赖可见性为中心 - 旨在突出最高优先级的修复和建议的依赖修复计划 - 在运行时足迹和设置方面故意保持轻量级 最接近的 OWASP 比较对象是: - **OWASP Dependency-Check** 一个更广泛的依赖分析工具,涵盖了许多生态系统和用例,超出了此处强调的以 lockfile 为首的 JavaScript/TypeScript 工作流。 - **OWASP dep-scan** 一个更广泛的依赖和安全分析工具,比本项目试图提供的语言和环境覆盖范围更广。 - **OWASP Dependency-Track** 更多以 SBOM 和平台为导向,其操作模型与专注于发布时间附近开发者检查的轻量级本地 CLI 不同。 CVE Lite CLI 故意更狭窄:它专注于 JavaScript/TypeScript,以 lockfile 为首,本地优先,专为快速本地检查和简单的 CI 网关而设计,旨在展示直接依赖与传递性依赖可见性、最高优先级的修复、建议的修复指导、离线公告数据库工作流以及小型、可审查的运行时足迹。 本节旨在明确范围。CVE Lite CLI 旨在通过服务于发布时间附近的实用开发者工作流来补充更广泛的 OWASP 生态系统。 这种关注点最明显的例子之一是离线支持:CVE Lite CLI 旨在让团队显式同步公告数据,然后在本地扫描,而不是强迫每个环境都依赖运行时出站漏洞 API 访问。 ## 网络行为与隐私 CVE Lite CLI 是一个本地优先的扫描器。它在本地解析依赖信息,使用本地缓存来减少重复查找,并且在标准模式下查询 OSV 以获取匹配所需的公告数据。它现在还支持本地公告数据库工作流,用于零运行时公告 API 调用的离线扫描。 它不需要托管帐户、云仪表板或源代码上传。 有关完整说明,请参阅 [网络行为与隐私](https://github.com/sonukapoor/cve-lite-cli/blob/main/src/docs/network-and-privacy.md)。 ### 离线工作流 对于处于受控或受限环境中的团队,预期的模式是: 1. 将公告数据同步到本地数据库 2. 根据需要分发该数据库 3. 使用本地数据库而不是运行时 OSV API 调用来扫描项目 同步本地公告数据库: ``` cve-lite advisories sync ``` 在我们的本地基准测试中(在同一台机器上),同步包含约 `217,065` 条公告记录的 OSV npm 转储在批量 SQLite 摄取优化后从 `87.53s` 提升到了 `8.84s`,即端到端快了约 `9.9` 倍。结果将因机器和网络条件而异。 将公告数据库写入特定路径: ``` cve-lite advisories sync --output /path/to/advisories.db ``` 使用默认本地公告数据库进行扫描: ``` cve-lite . --offline ``` 使用显式本地公告数据库文件进行扫描: ``` cve-lite . --offline-db /path/to/advisories.db ``` 在需要时,通过计划作业保持本地公告数据库为最新。例如,团队可以运行 cron 作业、CI 作业或其他调度器来定期刷新公告数据库: ``` cve-lite advisories sync --output /path/to/advisories.db ``` 这有助于确保离线扫描继续使用最新的公告数据,而无需开发人员每次都记得手动刷新数据库。 当你需要实时 OSV 支持的扫描时,标准在线模式仍然可用: ``` cve-lite . --osv-url https://security.company.internal/osv ``` ### 公告数据库新鲜度 本地公告数据库仅与上次成功同步时一样新。 离线扫描现在会报告公告数据库的新鲜度,并在本地数据库看起来陈旧或缺少同步元数据时发出警告。 推荐的模式是: - 使用 cron、CI 或其他自动化系统按计划同步公告数据库 - 在需要的地方分发刷新后的数据库 - 针对该更新的数据库运行离线扫描 这有助于保持离线扫描结果为最新,而无需开发人员手动跟踪公告更新节奏。 ## 检测恶意包事件 CVE Lite CLI 可以帮助检测恶意包事件和供应链妥协 **一旦受影响的版本在 OSV 或通过配置的公告端点可用的等效公告数据中得到体现**。 实际上,这意味着该工具可以捕获诸如 npm 包被妥协之类的事件 **当确切的恶意版本出现在你的 lockfile 中** 并且公告数据已经发布并建立索引时。这使得该工具在恶意包披露为人所知后,对于真实世界的发布检查很有用。 重要的是要准确说明当前的范围: - CVE Lite CLI 是 **由公告驱动的**,而不是行为恶意软件检测器 - 它 **不** 对包内容执行静态恶意软件分析 - 它 **不** 在存在针对它的公告情报之前检测包被妥协 - 它最适用于 lockfile,因为它们捕获了实际安装的确切解析版本 因此,实用的模式是:**本地 lockfile 扫描 + 公告匹配**。当恶意版本发布到 OSV 或通过兼容的内部端点镜像时,CVE Lite CLI 可以在扫描期间标记这些确切版本。 如果安装并执行了恶意包,仅升级或删除依赖项可能就不够了;团队应将其视为潜在的安全事件,并遵循其事件响应流程。 ## 工作原理 ### 架构理念 CVE Lite CLI 被设计为一个 **本地优先、仅元数据** 的扫描器。与需要代码上传或繁重代理安装的传统 SaaS 安全平台不同,该工具直接在开发者的环境中运行。它专注于“发布时刻”——通过分析项目 lockfile 中的解析版本,对依赖树进行高速、低噪音的评估。

CVE Lite CLI Workflow

### 工作流规范 * **信任边界与隐私:** 扫描是非侵入性的。仅提取包名称和确切版本。没有源代码、环境变量或专有逻辑会传输到外部 OSV(开源漏洞)API。 * **Lockfile 驱动的准确性:** 通过解析 `package-lock.json`、`pnpm-lock.yaml` 或 `yarn.lock`,该工具避免了“在我的机器上能运行”的差异。它扫描将要部署的 *确切* 依赖树。 * **智能分流:** 分析引擎利用 lockfile 的图结构来区分你直接管理的依赖项和由第三方包引入的依赖项(传递性)。这允许采用“修复根源”的策略,而不是追逐单个嵌套漏洞。 * **性能优化:** 本地 TTL(生存时间)缓存存储公告结果。这确保了后续扫描(在迭代开发或 CI/CD 重试循环中很常见)几乎是即时的,并遵守外部 API 速率限制。 * **支持离线的公告流:** 公告数据可以同步到本地 SQLite 数据库,并用于零运行时公告 API 调用的离线扫描。 * **基于标准的输出:** 结果原生以 **SARIF(静态分析结果交换格式)** 和 **JSON** 格式提供,确保与现代 DevSecOps 仪表板和 IDE 集成的兼容性。 ## 它的突出之处 - **快速、低摩擦的工作流** 在本地针对项目运行它,而无需采用大型安全平台。 - **实用的依赖修复指导** 它不仅停留在原始公告输出。它突出显示最高优先级的修复,建议依赖修复计划,并在存在确定的升级目标时生成开发者可以复制并运行的感知包管理器的命令。当公告和注册表数据允许时,它推荐最低已知非易受攻击版本,并显示已检查包版本的透明扫描/排除计数。 - **直接依赖与传递性依赖可见性** 输出使查看风险是来自你直接安装的内容还是来自嵌套包变得更加容易。 - **以开发者为中心** 它针对使用 npm、pnpm 和 Yarn lockfile 的开发者进行了优化。 - **预算友好** 它适用于希望获得有用的安全检查而无需为大型商业产品付费的开发人员和团队。 - **本地优先** 它在本地读取你的项目,并使用包/版本匹配与 OSV 公告进行对比。 - **支持离线** 它可以同步并针对本地公告数据库进行扫描,以实现零运行时网络工作流。 - **对企业友好的网络模型** 团队可以控制何时同步公告数据以及离线扫描在何处运行,这在受限环境中很有价值。 - **专注于发布** 它在发布前、CI 中或最终依赖清理期间特别有用。 ## 功能 ### 1. 基于 Lockfile 的扫描 CVE Lite CLI 扫描来自以下内容的解析依赖版本: - `package-lock.json` - `pnpm-lock.yaml` - `yarn.lock` 它还支持有限的 `package.json` 回退,用于精确固定的直接依赖。 ### 2. 清晰的漏洞输出 CLI 不仅显示公告 ID,还报告: - 包名称和版本 - 严重性 - 直接依赖与传递性依赖关系 - 修复版本提示(如果可用) - 公告 ID - 依赖路径提示 - 建议的父级升级(如果可用),用于传递性问题 默认情况下,CLI 现在呈现更清晰的以摘要为首的视图,并提供 `--verbose` 以获取完整的详细输出。 ### 3. 复制并运行的修复命令 这是 CLI 输出中最重要的部分之一。 当存在确定的升级目标时,CVE Lite CLI 会显示一个专用的 `Copy And Run These Fix Commands` 部分,以便开发者可以直接从发现结果转向操作。 这些命令: - 感知包管理器 - 按严重性和修复类型分组 - 旨在直接从终端复制 - 直接命令组仅限于在扫描的根清单中声明的依赖 - 在详细模式中,在更深入的修复细节之前显示 - 当存在足够的公告数据时,针对最低已知非易受攻击版本,并在详细输出中显示透明的版本扫描计数 在实践中,这有助于避免重复的安装和重新扫描循环。 例如:如果公告元数据建议 `tar@7.5.3`,CVE Lite CLI 会根据已知公告范围验证该目标。如果 `7.5.3` 仍然已知易受攻击,它会检查下一个发布的版本(`7.5.4`、`7.5.5` 等),直到找到最低已知非易受攻击版本。然后,详细输出显示扫描了多少个版本以及有多少个版本因仍然已知易受攻击而被排除。 在 NestJS 演练中,该验证流程为 `tar` 修复路径扫描了 22 个包版本,并在选择最低已知非易受攻击目标之前排除了 21 个仍然已知易受攻击的版本(请参阅 [NestJS 案例研究](docs/case-studies/nestjs.md))。 这为开发者提供了一条更直接的修复路径,而不是反复升级、重新扫描并发现下一个版本仍然受影响。在较慢的仅 CI 工作流中,这种试错循环可能会花费更长的时间。 ### 4. 最高优先级的修复 CLI 首先突出显示最重要的问题,以便开发者可以专注于最可能立即重要的发现结果。 ### 5. 建议的修复计划 CVE Lite CLI 将可能的依赖修复工作组织成一个实用的序列,例如: - 首先是直接的关键和高严重性问题 - 接下来是紧急的传递性问题 - 然后是中等严重性的直接清理 - 重复的易受攻击包以进行合并 ### 6. 传递性问题的父包提示 对于传递性漏洞,CVE Lite CLI 可以显示依赖路径,并且当它可以可靠地确定一个父包时,建议升级该父包。这使得输出比仅仅说嵌套包易受攻击更具可操作性。 ### 7. JSON 输出 结构化的 JSON 输出使其更容易与脚本、日志或管道工件集成。 ### 8. 对 CI 友好的行为 CLI 可以在 CI/CD 管道中使用,并且可以根据严重性阈值使构建失败。 ### 9. 离线公告数据库支持 CLI 可以将官方 OSV npm 公告转储同步到本地 SQLite 公告数据库,并稍后针对它进行扫描,而无需运行时公告 API 调用。 这使其在以下方面更加实用: - 企业环境 - 受限的 CI 系统 - 隔离工作流 - 希望显式本地公告控制的团队 ### 10. 本地缓存 它在本地缓存公告详细结果,因此重复扫描更快,并且重复请求更少。 ### 11. 清晰的最终扫描状态 在每次运行结束时,CVE Lite CLI 会打印一条简短的最终状态行,以便用户立即知道扫描是否干净,或者他们是否应该从上面的优先修复开始。 ### 12. 小型运行时足迹 该项目故意保持运行时依赖最小化,以减少攻击面并使工具更易于审查。 ## 依赖足迹 CVE Lite CLI 故意设计得具有非常小的依赖表面。 **运行时依赖** - `yaml` - `yarn-lockfile` - `better-sqlite3` - `fflate` **开发依赖** - `@types/node` - `tsx` - `typescript` 这是一个深思熟虑的设计选择。因为 CVE Lite CLI 本身就是一个面向安全的工具,我们希望尽量减少不必要的第三方包,并保持运行时尽可能小和易于审查。 ## 示例用例 CVE Lite CLI 非常适合: - 发布副业的独立开发者 - 关注每个工具预算的初创公司 为客户项目进行发布检查的顾问 - 希望在 CI 中进行轻量级依赖扫描的团队 - 希望与其他工具一起获得第二意见的开发者 - 在发布前需要实用扫描的 OSS 维护者 - 需要离线或受控网络依赖扫描的团队 - 需要清晰公告数据控制的安全意识强的组织 ## 支持的工作流 ### 本地开发 在发布前、依赖清理期间或主要包升级后运行它。 对于支持离线的本地工作流: ``` cve-lite advisories sync cve-lite . --offline ``` ### CI/CD 此仓库还在其自己的 GitHub Actions 工作流中使用 CVE Lite CLI 作为 CI 的一部分扫描自身。请参阅 [`self-scan.yml`](https://github.com/sonukapoor/cve-lite-cli/blob/main/.github/workflows/self-scan.yml)。 在另一个仓库中使用可重用的第一方 GitHub Action: ``` name: Dependency Scan on: pull_request: push: branches: [main] jobs: cve-lite: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: sonukapoor/cve-lite-cli@v1 with: verbose: "true" fail-on: high ``` 对于首先刷新公告数据库的离线 GitHub Actions 工作流: ``` name: Offline Dependency Scan on: pull_request: jobs: cve-lite: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: sonukapoor/cve-lite-cli@v1 with: sync-advisories: "true" offline: "true" offline-db: ./.cache/cve-lite/advisories.db verbose: "true" fail-on: high ``` 对于 CI,我们建议使用 `--verbose`,以便构建日志包含完整的修复计划、依赖路径、详细的表格输出,以及扫描失败时的建议修复命令。 在 CI 中将其用作发布网关: ``` cve-lite . --verbose --fail-on high ``` ### 脚本自动化 使用 JSON 输出进行自定义报告: ``` cve-lite . --json > cve-lite-report.json ``` 在受控环境中使用离线本地公告数据库: ``` cve-lite advisories sync --output ./.cache/advisories.db cve-lite . --offline-db ./.cache/advisories.db --json > cve-lite-report.json ``` ## 推荐的工作流模式 当团队将其作为显式工作流的一部分,而不是依赖开发人员记住一次性命令时,CVE Lite CLI 最有用。 推荐的模式是: 1. 选择一个适合你环境的扫描命令 2. 将其连接到脚本、钩子、CI 或计划刷新作业 3. 保持行为显式,以便开发人员和安全审查人员可以准确看到扫描何时运行以及是否涉及网络访问 ### 包脚本 向使用项目添加一个简单的脚本,以便开发人员有一个易于记忆的命令: ``` { "scripts": { "security:scan": "cve-lite .", "security:scan:offline": "cve-lite . --offline" } } ``` 这是大多数团队的最佳默认设置,因为它是可见的、易于记录的,并且易于在本地开发和 CI 中重用。 ### 可选的 postinstall 使用 一些团队希望在安装包后立即运行依赖扫描。CVE Lite CLI 支持该工作流,但建议在使用项目中作为显式选择加入,而不是工具本身中的隐藏默认行为。 例如: ``` { "scripts": { "postinstall": "cve-lite . --offline || true" } } ``` 为什么这是可选的: - 安装钩子应该对使用它们的团队可见 - 受控环境通常更喜欢离线扫描以进行安装时检查 - 显式项目脚本比隐式包行为更容易审查、调整和禁用 ### Git 钩子 对于希望在代码离开工作站之前进行轻量级本地网关的团队,git 钩子可能是一个很好的选择: ``` cve-lite . --fail-on high ``` 如果你希望在更改共享之前捕获高严重性依赖问题,这在 `pre-push` 或其他团队批准的钩子中效果很好。 ### CI 管道 对于 CI,一个强有力的基线是: ``` cve-lite . --verbose --fail-on high ``` 对于受控或受限环境,请单独同步公告数据库,然后离线扫描: ``` cve-lite advisories sync --output ./.cache/advisories.db cve-lite . --offline-db ./.cache/advisories.db --verbose --fail-on high ``` ### 计划公告数据库刷新 如果你使用离线模式,请使用调度器(如 cron、CI 或内部自动化系统)保持公告数据库为最新: ``` cve-lite advisories sync --output /path/to/advisories.db ``` 这使离线扫描结果保持最新,而无需强迫每个开发人员机器或构建运行器在扫描本身期间进行实时公告 API 调用。 ## 与其他工具的比较 CVE Lite CLI 并不试图成为所有人的万能工具。它旨在成为对于希望进行快速发布时检查而无需完整安全平台的成本和复杂性的 JavaScript 和 TypeScript 开发人员来说,最简单且最具可操作性的漏洞扫描器之一。 ### CVE Lite CLI 的突出之处 与该领域的其他工具相比,CVE Lite CLI 专注于: - **免费使用** - **运行快速** - **易于理解** - **实用的依赖修复指导**,而不仅仅是原始公告转储 - **清晰的直接依赖与传递性依赖可见性** - **最高优先级的修复**和建议的修复计划 - 支持 **npm**、**pnpm** 和 **Yarn** lockfile - 用于 CI 和自动化的 **SARIF** 和 **JSON** 输出 - **轻量级**、**安全意识强**的依赖足迹 - 用于受控环境的 **离线本地公告数据库支持** - 对于希望获得有用的 **CVE 扫描而无需为更大的商业产品付费**的团队来说,这是一个 **对开发者友好** 的选项 ### 一览 | 工具 | 最擅长 | 生态系统范围 | Lockfile 支持 | 依赖修复指导 | 自动修复支持 | JSON/SARIF | 最适合 | |---|---|---|---|---|---|---|---| | **CVE Lite CLI** | 快速、对开发者友好的发布前 CVE 扫描 | 专注于 JS/TS | npm、pnpm、Yarn | **依赖修复指导** | **是(v1 中针对已验证的直接依赖的范围限定 `--fix`)** | **是** | 希望获得免费、实用的发布时检查的开发人员和小型团队 | | `npm audit` | 内置 npm 审计 | 以 npm 为中心 | npm | 基本修复信息 | 是(`npm audit fix`) | 与专用扫描器工作流相比有限 | 完全生活在 npm 内部的团队 | | OSV-Scanner | 广泛的多生态系统扫描 | 广泛 | 许多生态系统和 lockfile | 更通用 | 是(指导性修复,实验性) | 强大的机器可读工作流 | 需要更广泛生态系统覆盖的团队 | | Snyk CLI | 更广泛的企业安全工作流 | 广泛 | 强大的生态系统覆盖 | 强大的商业指导 | 是(CLI + 平台驱动的修复/PR 工作流) | 强大 | 采用更大安全平台的团队 | | Socket CLI | 更广泛的包和供应链风险可见性 | 广泛 | 多生态系统/包风险关注 | 强大的包风险工作流 | 因产品/工作流而异 | 强大 | 希望获得超出 CVE 扫描的更多功能的团队 | ### 离线支持一览 | 工具 | 本地公告数据库工作流 | 零运行时公告 API 调用 | |---|---|---| | **CVE Lite CLI** | **是** | **是** | | `npm audit` | 没有内置的本地公告数据库工作流 | 否 | | OSV-Scanner | 取决于更广泛的工作流设置,而不是此处强调的本地数据库模式 | 因设置而异 | | Snyk CLI | 不是主要工作流重点 | 因产品/工作流而异 | | Socket CLI | 不是主要工作流重点 | 因产品/工作流而异 | ### CVE Lite CLI vs npm audit `npm audit` 是 npm 用户的内置默认设置,这使得当你的工作流完全基于 npm 时它很方便。 当你想要以下功能时,CVE Lite CLI 脱颖而出: - 跨 npm、pnpm 和 Yarn lockfile 的支持 - 更清晰、更有指导意义的控制台输出 - 优先修复和建议的修复计划 - 为 JS/TS 团队提供更专注的发布前扫描体验 ### CVE Lite CLI vs OSV-Scanner OSV-Scanner 支持许多生态系统和 lockfile 类型,这使得它总体上更广泛。 当你想要以下功能时,CVE Lite CLI 脱颖而出: - 一个更狭窄、更易于理解的工具,专门围绕 JS/TS 依赖工作流构建 - 以修复为首的输出,而不是更通用的多生态系统扫描器体验 - 对日常开发者来说更平易近人的本地工作流 - 用于离线或受限环境的更显式的本地公告数据库工作流 ### CVE Lite CLI vs Snyk CLI Snyk CLI 是一个更广泛的商业平台的一部分,具有更广泛的企业覆盖范围。 当你想要以下功能时,CVE Lite CLI 脱颖而出: - 一个更简单、更轻量的依赖 CVE 工作流 - 小型团队、初创公司、顾问和独立开发人员的负担得起的选择 - 一个专注于基于 lockfile 的发布检查的工具,而无需采用更大的平台 - 具有本地公告数据库控制的更显式的离线扫描模型 ### CVE Lite CLI vs Socket CLI Socket CLI 超越了 CVE,进入更广泛的包和供应链风险信号。 当你想要以下功能时,CVE Lite CLI 脱颖而出: - 一个专注的依赖漏洞扫描器 - 对“发布前我应该修复什么?”的简单回答 - 以已知漏洞发现结果和实用后续步骤为中心的可读输出 ### 最适合 CVE Lite CLI 最适合: - 发布 JavaScript 或 TypeScript 应用程序的开发人员 - 希望获得轻量级发布网关的团队 - 希望获得可操作的漏洞输出而没有繁重平台开销的维护者 - 关心简单性、可读性和快速采用的用户 如果你的目标是在发布前进行实用的以开发者为中心的 CVE 扫描,CVE Lite CLI 旨在成为该工作流中最平易近人的选项之一。 ## 当前限制 为了保持项目的诚实性,以下是它在当前版本中 **不** 做的事情: - 它不会在恶意包出现在公告数据中之前检测到它们 - 它不执行行为恶意软件检测或包内容分析 - 它不证明可利用性 - 它不验证运行时可达性 - 它不扫描容器镜像、二进制文件、机密或 IaC - 它不取代完整的应用程序安全程序 - 它目前专注于 JS/TS 依赖扫描 - 随着公告数据集的增长,本地公告同步性能需要持续优化 ## 定位 CVE Lite CLI 最好被描述为: **一种快速、对开发者友好的 JavaScript 和 TypeScript 项目依赖漏洞扫描器,专为希望获得可操作结果而无需完整安全平台的成本和复杂性的团队而构建。** ## 路线图 CVE Lite CLI 正在从漏洞扫描器演变为综合修复引擎。 ### 第一阶段:高级修复智能(短期) * **可执行的修复计划:** 从建议计划转变为生成可执行命令(例如,`npm install package@version`)以解决直接漏洞。 * **传递性父级映射:** 增强输出,以显式映射从根到易受攻击嵌套包的依赖路径,使人工分流变得毫不费力。 * **重复数据分析:** 识别存在同一易受攻击包的多个版本的实例,并建议单个版本以进行合并。 ### 第二阶段:生态系统与集成(中期) * **扩展的 Lockfile 支持:** 为新兴的 JS/TS 生态系统引入解析器,包括 `bun.lockb`。 * **IDE 集成:** 开发一个轻量级扩展,以在代码编辑器中直接突出显示易受攻击的包。 * **工作流集成指导:** 扩展本地脚本、钩子、CI 和离线开发者采用的官方工作流模式。 ### 第三阶段:成熟与合规(长期) * **标准化 SBOM 支持:** 添加将发现结果以 CycloneDX 或 SPDX 格式导出为 **SBOM(软件物料清单)** 的能力。 * **社区插件系统:** 解耦扫描器逻辑,以允许社区贡献的数据源和自定义安全规则。 ## 贡献 该项目正在围绕真实世界的开发者可用性进行塑造。有关输出清晰度、修复指导、生态系统覆盖和 CI 使用的反馈特别有价值。 要开始,请参阅 [CONTRIBUTING.md](https://github.com/sonukapoor/cve-lite-cli/blob/main/src/docs/CONTRIBUTING.md)。 ## 社区与支持 CVE Lite CLI 正在公开塑造中,欢迎反馈。 如果你遇到错误、想要提出改进建议,或者有一个工具应该更好地处理的 lockfile 边缘情况,请在仓库中提交 issue。 有用的反馈包括: - 可重现的错误报告 - 真实世界的 lockfile 边缘情况 - 关于更清晰的输出和修复指导的想法 - CI 使用示例 - JSON 和 SARIF 工作流反馈 - 基于真实使用的比较反馈 随着项目的发展,贡献和安全指导将在专门的项目文档中进一步扩展。 有关错误报告和功能请求,请使用 [GitHub Issues](https://github.com/sonukapoor/cve-lite-cli/issues)。有关贡献指导,请参阅 [CONTRIBUTING.md](https://github.com/sonukapoor/cve-lite-cli/blob/main/src/docs/CONTRIBUTING.md)。有关安全相关的报告,请参阅 [SECURITY.md](https://github.com/sonukapoor/cve-lite-cli/blob/main/src/docs/SECURITY.md)。 ## 许可证 MIT
标签:Claude, CMS安全, CVE检测, GNU通用公共许可证, JavaScript, MITM代理, Node.js, npm安全, OSV, pnpm安全, SARIF, TypeScript, Vercel, yarn安全, 依赖安全, 包管理器安全, 威胁情报, 安全插件, 开发者工具, 离线扫描, 自动修复, 自动化攻击