BastienBYRA/CPE-Mapper

GitHub: BastienBYRA/CPE-Mapper

一个将软件包名称精准映射到 CPE 的轻量 CLI 工具,解决 SBOM 中包名与 NVD 漏洞库 CPE 命名不一致导致的漏洞漏报问题。

Stars: 1 | Forks: 1

# CPE-Mapper CPE-mapper 是一个 CLI 工具和基于 JSON 的数据库,旨在准确地将软件包名称映射到其对应的 CPE(通用平台枚举,Common Platform Enumerations)。 它的主要目标是,在标准包名无法匹配已知 CPE 的情况下,改进漏洞识别能力。 ## 亮点 - 📦 易于安装且易于使用 - ⚡ 轻量且快速 - 🔒 以安全为核心,提供有证据支持的映射 - 🔍 通过自定义 CPE 映射改进漏洞检测 - ✨ 兼容 CycloneDX JSON 和 SPDX JSON - 🧩 路线图包括 XML 支持、自定义用户映射数据库以及将其部署为服务器 ## 工作原理 CPE-mapper 是一个相当简单的工具。 它不会分析你的源代码或仓库来猜测哪些依赖项对应哪些 CPE。相反,它依赖于一个 [JSON 映射文件(我们的 CPE 数据库)](./data/cpe-mapper.json),该文件为每个包名明确规定了其对应的 CPE。 我们使用 [NVD(国家漏洞数据库)](https://nvd.nist.gov/) 作为参考,以确定特定软件使用的是哪个 CPE,然后手动将它们链接在一起。 例如,NVD 报告 Apache Tomcat 的漏洞时使用的 CPE 是: ``` cpe:2.3:a:apache:tomcat:*:*:*:*:*:*:*:* ``` 然而,这个 CPE 无法直接从 Java 包名 `org.apache.tomcat.embed:tomcat-embed-core` 推导出来。 为了解决这个问题,CPE-mapper 在其数据库中维护了一个映射,这样当它处理 BOM 文件时,如果找到包 `org.apache.tomcat.embed:tomcat-embed-core`,它会自动将相应的 CPE `cpe:2.3:a:apache:tomcat::*:*:*:*:*:*:*` 添加到输出中。 ### 误报 由于 NVD 将 CPE 分配给 CVE 的方式,CPE-mapper **可能会报告误报**。 以 Log4j 为例:所有与 Log4j 相关的 CVE 都与以下 CPE 相关联: ``` cpe:2.3:a:apache:log4j::*:*:*:*:*:*:* ``` 这种标记漏洞的方式没有考虑到构成 Log4j 的不同模块,例如 `log4j-core`、`log4j-api`、`log4j-web` 或 `log4j-slf4j-impl`。 换句话说,NVD 不区分组成一个软件的不同包;它将整个项目视为一个单一实体。 因此,我们决定将 CPE 与每个软件的**核心**包(例如 `log4j-core`、`tomcat-embed-core`、`logback-core`...)关联起来,因为这些核心模块被其所有派生包使用或实现(例如在 Log4j 中:`log4j-api`、`log4j-web`...)。 这确保了每当为整个软件发布新的 CVE 时,你都会收到通知。 虽然这种方法可能会产生误报(例如,某些 CVE 可能影响你实际上并未使用的派生包),但它提供了最安全的覆盖范围,以确保你不会错过任何相关漏洞。 ## 入门指南 你可以在 CI/CD 或本地机器中使用 CPE-Mapper。 ### 安装 你可以通过多种方式安装 CPE-mapper: 1. 通过 `npm`。 ``` npm install -g @bastienbyra/cpe-mapper # 然后你可以使用 `cpe-mapper` 运行它 ``` 2. 通过我们的 `Docker image`。 ``` docker run -v path/to/your/bom/folder:/data --rm ghcr.io/bastienbyra/cpe-mapper:latest apply -i /data/bom.json -o /data/mapped_bom.json ``` ### 命令 #### 应用 ``` Usage: cpe-mapper apply [options] Apply CPE mappings to a BOM file Options: -i, --input-file Input BOM file (JSON) -o, --output-file Output mapped BOM file -u, --no-update Disable updating the CPE Mapping database --override-cpe Override BOM CPEs with mapped values from our database (CycloneDX only) -v, --verbose Enable verbose logging -h, --help display help for command ``` ##### 示例 将 CPE-mapper 数据库映射应用于 BOM 文件 ``` cpe-mapper apply -i input-bom.json -o output-bom.json ``` 将 CPE-mapper 数据库映射应用于 BOM 文件,并覆盖输入文件中现有的 CPE。 ``` cpe-mapper apply -i input-bom.json -o output-bom.json --override-cpe ``` #### 更新 ``` Usage: cpe-mapper update [options] Update the CPE mappings database Options: -h, --help display help for command ``` ##### 示例 检查数据库是否有更新并应用它们。 ``` cpe-mapper update ``` ### GitHub Actions CPE-Mapper 提供了一个 GitHub Action,可用于将 CPE 映射应用到你的 BOM 文件。 #### 配置 ``` - uses: BastienBYRA/CPE-Mapper@1.2.0 with: # The input BOM file to which CPE-Mapper applies the mapping. # Required. Example: testdata/bom.test.json input-file: '' # The name of the output BOM file. # Required. Example: testdata/bom.result.json output-file: '' # Whether to override existing CPEs in the input BOM file (CycloneDX only). Choices are `true` or `false`. # Optional. Default: false override-cpe: false # Enable verbose mode. Choices are `true` or `false`. # Optional. Default: false verbose: false ``` #### 用法 ``` name: Security CI on: [push] jobs: apply-cpe: name: Apply CPE to BOM file runs-on: ubuntu-latest steps: - name: Apply CPE mapping uses: BastienBYRA/CPE-Mapper@main with: input-file: testdata/bom.test.json output-file: testdata/bom.result.json # Archive the output BOM file as an artifact - name: Archive artifacts uses: actions/upload-artifact@v4 with: name: mapped-sbom path: testdata/bom.result.json retention-days: 1 ``` ## 贡献 如果你想为这个项目做贡献,无论是通过**报告问题**、**提出新想法**、**开发功能**,还是**向 CPE 数据库添加条目**,请参阅 [CONTRIBUTING](./CONTRIBUTING.md) 指南了解详细信息。 ## 路线图 [ROADMAP](./ROADMAP.md) 列出了未来计划的所有任务。 ## AI 使用 在为这个项目做贡献时,你可以使用 AI 作为助手。我唯一的要求 是你验证 AI 编写的代码是正确且安全的。 这个项目中的 AI 配置文件(例如 `CLAUDE.md`)包含了 [4 条 Karpathy 规则](https://github.com/multica-ai/andrej-karpathy-skills),作为更好进行 AI 辅助编程的基准。
标签:CISA项目, CPE映射, CycloneDX, GPT, Homebrew安装, JSON数据库, MITM代理, NVD, SBOM生成, SPDX, WebSocket, 依赖分析, 假阳性处理, 包管理映射, 安全合规, 暗色界面, 漏洞管理, 网络代理, 网络安全, 自定义脚本, 请求拦截, 资产识别, 跌倒检测, 软件物料清单, 隐私保护