scagogogo/cpe-skills

GitHub: scagogogo/cpe-skills

一个综合性 CPE 工具包,提供解析、匹配、生成、SBOM 构建及漏洞关联功能,并支持 Go SDK、CLI、MCP 与 AI 代理四种集成方式。

Stars: 3 | Forks: 0

# cpe-skills
[![Go Reference](https://pkg.go.dev/badge/github.com/scagogogo/cpe-skills.svg)](https://pkg.go.dev/github.com/scagogogo/cpe-skills) [![Go Report Card](https://goreportcard.com/badge/github.com/scagogogo/cpe-skills)](https://goreportcard.com/report/github.com/scagogogo/cpe-skills) [![测试覆盖率](https://img.shields.io/badge/coverage-%E2%89%A5_91%25-brightgreen)](https://github.com/scagogogo/cpe-skills/actions) [![测试](https://img.shields.io/badge/tests-1258-brightgreen)](https://github.com/scagogogo/cpe-skills/actions) [![发布版本](https://img.shields.io/github/v/release/scagogogo/cpe-skills?include_prereleases)](https://github.com/scagogogo/cpe-skills/releases) [![许可证](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![平台](https://img.shields.io/badge/platforms-108-blue)](https://github.com/scagogogo/cpe-skills/releases) [![MCP](https://img.shields.io/badge/MCP-server-purple)](#mcp) **[官方网站](https://scagogogo.github.io/cpe-skills/) · [简体中文](README_zh.md) · [SKILLS](SKILLS.md) · [文档](https://scagogogo.github.io/cpe-skills/en/) · [发布版本](https://github.com/scagogogo/cpe-skills/releases)**
| 字段 | 值 | |-------|-------| | **项目** | cpe-skills | | **简介** | CPE (Common Platform Enumeration) 工具包 — 解析、匹配、生成、漏洞关联、SBOM、VEX。 | | **语言** | Go (`module github.com/scagogogo/cpe-skills`, 要求 **Go ≥ 1.25**) | | **MCP SDK** | `github.com/modelcontextprotocol/go-sdk` v1.0.0 | | **覆盖率** | ≥ 91% (主 package 的 CI 门禁为 90%) | | **测试用例** | 1258 | | **导出符号** | ~1470 | | **平台** | 每次发布包含 108 个预编译二进制文件 — 9 种操作系统 × 13 种架构 | | **许可证** | MIT | | **网站** | https://scagogogo.github.io/cpe-skills/ | | **仓库** | https://github.com/scagogogo/cpe-skills | | **API 稳定性** | Package 级别的 API 是稳定的;在各个次要版本中,函数是附加的且向后兼容的。 | ### 集成方式(4 种使用方式 — 均已实现) | 方式 | 最适用于 | 安装 / 配置 | 入口点 | |------|----------|------------------|-------------| | **SKILLS** | AI / LLM 代理 | `https://github.com/scagogogo/cpe-skills` | [SKILLS.md](SKILLS.md) | | **Go SDK** | Go 应用程序 | `go get github.com/scagogogo/cpe-skills` | `cpeskills.Parse` | | **CLI** | Shell / CI / 脚本 | `go install github.com/scagogogo/cpe-skills/cmd/cpe@latest` | `cpe parse/match/search/dict` | | **MCP** | 兼容 MCP 的 AI 客户端 | `command: cpe`, `args: ["mcp", "serve"]` | `cpe mcp serve` (6 个工具) | ### MCP 工具(由 `cpe mcp serve` 暴露) `parse_cpe` · `format_cpe` · `match_cpe` · `validate_cpe` · `generate_cpe` · `compare_versions` ### 功能分类(11 个类别) → 入口函数 | 类别 | 入口函数 | |----------|----------------| | **解析** | `Parse`, `ParseCpe22`, `ParseCpe23`, `MustParse` | | **匹配 (NISTIR 7696)** | `Match`, `MatchCPE`, `QuickMatch`, `AdvancedMatchCPE`, `BatchMatchCPEs` | | **生成与构建器** | `GenerateCPE`, `FuzzyGenerateCPE`, `NewBuilder`, `RandomCPE` | | **WFN 绑定与转义** | `BindToFS`, `BindToURI`, `UnbindFS`, `FromCPE` | | **验证与标准化** | `ValidateCPE`, `NormalizeCPE`, `NormalizeVendorName`, `NormalizeProductName` | | **存储与索引** | `NewMemoryStorage`, `NewFileStorage`, `NewCPEIndex`, `ParseDictionary` | | **漏洞关联** | `CreateNVDDataSource`, `NewOSVClient`, `NewEPSSClient`, `NewKEVClient` | | **SBOM 与 PURL** | `NewSBOM`, `ParseCycloneDXJSON`, `ParseSPDXJSON`, `CPEToPURL`, `PURLToCPE` | | **风险评分与 VEX** | `NewDefaultRiskScorer`, `ScoreComponents`, `NewVEXDocument`, `GenerateVEXFromFindings` | | **导出** | `ExportToJSON`, `ExportToCSV`, `ExportToSARIF`, `ExportSBOMToCycloneDX` | | **基础设施** | `NewCPESet`, `ParseExpression`, `NewParsingError`, `SetLogger` | ### 平台矩阵(108 个二进制文件) | 操作系统 | 架构 | |----|---------------| | Linux | 386, amd64, arm64, arm (5/6/7), mips, mips64, mipsle, mips64le, ppc64, ppc64le, riscv64, s390x, loong64 | | macOS | amd64, arm64 (Apple Silicon) | | Windows | 386, amd64, arm64 | | FreeBSD / OpenBSD / NetBSD | 386, amd64, arm64, arm | | Illumos / Solaris | amd64 | | AIX | ppc64 | ## 快速开始(可直接复制粘贴) ### SKILLS — 适用于 AI / LLM 添加到你的 Claude Code skills 配置中: ``` https://github.com/scagogogo/cpe-skills ``` ### Go SDK ``` go get github.com/scagogogo/cpe-skills ``` ``` package main import ( "fmt" cpeskills "github.com/scagogogo/cpe-skills" ) func main() { // Parse any CPE format (auto-detect 2.2 / 2.3) c, _ := cpeskills.Parse("cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*") fmt.Printf("Vendor: %s, Product: %s, Version: %s\n", c.Vendor, c.ProductName, c.Version) // NISTIR 7696 matching matched, _ := cpeskills.QuickMatch( "cpe:2.3:a:apache:log4j:2.14.1:*:*:*:*:*:*:*", "cpe:2.3:a:apache:log4j:2.14.1:*:*:*:*:*:*:*", ) fmt.Println("Matched:", matched) } ``` ### CLI ``` # 选项 A:通过 Go 安装 go install github.com/scagogogo/cpe-skills/cmd/cpe@latest # 选项 B:从 Releases 下载适用于您平台的预编译二进制文件 # → https://github.com/scagogogo/cpe-skills/releases (108 个平台) # 选项 C:从源码构建 git clone https://github.com/scagogogo/cpe-skills.git cd cpe-skills && go build -o cpe ./cmd/cpe # 用法 cpe parse "cpe:2.3:a:microsoft:windows:10:*:*:*:*:*:*:*" cpe match "cpe:2.3:a:apache:log4j:2.14.1:*:*:*:*:*:*:*" \ "cpe:2.3:a:apache:log4j:2.14.1:*:*:*:*:*:*:*" cpe search --vendor apache --product log4j ``` ### MCP ``` { "mcpServers": { "cpe-skills": { "command": "cpe", "args": ["mcp", "serve"] } } } ``` 连接成功后,AI 客户端可以调用以下工具: - `parse_cpe {cpe}` — 将 CPE 解析为各个组件 - `format_cpe {cpe, to}` — 在 2.2/2.3/wfn 格式之间转换 - `match_cpe {criteria, target, ignore_version?}` — NISTIR 7696 匹配 - `validate_cpe {cpe}` — 验证 CPE 字符串 - `generate_cpe {part, vendor, product, version}` — 构建 CPE - `compare_versions {a, b, min?, max?}` — 比较版本字符串 ## AI 代理工作流示例 这是一个典型的 AI 代理工作流,使用 cpe-skills 对易受攻击的依赖项进行分类处理: ``` flowchart LR A[User: is log4j 2.14.1 vulnerable?] --> B[Agent calls parse_cpe] B --> C[Generate CPE for log4j 2.14.1] C --> D[Query NVD/OSV by CPE] D --> E{CVE found?} E -- yes --> F[match_cpe to confirm affected] F --> G[Report CVE + remediation] E -- no --> H[Report: not vulnerable] ``` 作为 Claude Code skills,可以通过自然语言调用该代理: - *"解析这个 CPE 字符串,并告诉我厂商/产品/版本"* - *"检查该组件的 CPE 是否与任何已知的易受攻击 CPE 匹配"* - *"为 Apache log4j 2.14.1 生成一个 CPE"* - *"将这个 CPE 2.2 字符串转换为 2.3 格式"* ## 实用方案(面向 AI 代理的任务驱动代码片段) ### 检测组件是否受到某个 CVE 的影响 ``` c, _ := cpeskills.Parse("cpe:2.3:a:apache:log4j:2.14.1:*:*:*:*:*:*:*") nvd := cpeskills.CreateNVDDataSource("") search := cpeskills.NewMultiSourceSearch([]*cpeskills.VulnDataSource{nvd}) findings, _ := search.SearchByCPE(c) // returns matching CVEs ``` ### 从 lockfile 生成 SBOM ``` components, _ := cpeskills.ParseManifestFile("go.sum", content) sbom, _ := cpeskills.BuildSBOMFromManifest("go.sum", content, "my-app") json, _ := cpeskills.ExportSBOMToCycloneDX(sbom) ``` ### 按风险确定漏洞优先级 ``` scorer := cpeskills.NewDefaultRiskScorer() scores := cpeskills.ScoreComponents(components, nvdData) cpeskills.SortByRisk(scores) critical := cpeskills.FilterByPriority(scores, cpeskills.RiskCritical) ``` ### 桥接 CPE ↔ PURL (package URL) ``` purl, confidence, _ := cpeskills.CPEToPURL(cpe) // CPE → PURL cpe, confidence, _ := cpeskills.PURLToCPE(purl) // PURL → CPE ``` ### 使用版本范围条件进行匹配 ``` matched := cpeskills.MatchCPE(criteria, target, &cpeskills.MatchOptions{ VersionRange: true, MinVersion: "2.0", MaxVersion: "3.0", }) ``` ## 它解决了什么问题? CPE (Common Platform Enumeration) 是 NIST 标准的命名方案 (NIST IR 7695/7696),用于识别 IT 系统、软件和包 — 它是 CVE 漏洞匹配、SBOM 组件跟踪和供应链安全的基石。 处理 CPE 非常困难:存在两种不兼容的格式(2.2 URI 与 2.3 Formatted String)、复杂的 WFN 绑定规则、多源漏洞数据(NVD、OSV、EPSS、KEV)以及 SBOM ↔ PURL 的桥接。**cpe-skills 解决了所有这些问题**,提供了一个涵盖完整 CPE 生命周期的单一工具包,并通过 4 种集成方式暴露接口。 ### 架构 ``` flowchart LR subgraph Input S1[CPE 2.2 URI] S2[CPE 2.3 FS] S3[Product Info] S4[Lockfile / Manifest] end subgraph Core["CPE Core Engine"] P[Parse & Validate] M[NISTIR 7696 Match] G[Generate / Build] W[WFN Bind & Escape] N[Normalize] end subgraph Correlation V[Vulnerability] NVD[NVD] OSV[OSV] EPSS[EPSS] KEV[CISA KEV] end subgraph SupplyChain["Supply Chain"] SB[SBOM CycloneDX/SPDX] PU[CPE ↔ PURL] DG[Dependency Graph] end subgraph Output R[Risk & VEX] E[Export JSON/CSV/SARIF] end S1 --> P S2 --> P S3 --> G S4 --> SB P --> M P --> W P --> N M --> V V --> NVD V --> OSV V --> EPSS V --> KEV SB --> PU SB --> DG V --> R SB --> R R --> E ``` ### 功能思维导图 ``` mindmap root((cpe-skills)) Parsing CPE 2.2 URI CPE 2.3 FS Auto-detect WFN binding Matching NISTIR 7696 Exact / Subset / Superset Fuzzy & Regex Batch Generation From product info Templates Fluent Builder Fuzzy generate Vulnerability NVD OSV EPSS scoring CISA KEV SBOM CycloneDX SPDX CPE ↔ PURL Dependency graph Risk & VEX Risk scoring Reachability VEX statements Remediation Export JSON CSV SARIF SBOM formats Infrastructure CPE Sets Applicability Structured errors Logging ``` ## 文档 完整的文档位于**[官方网站](https://scagogogo.github.io/cpe-skills/)**: - **[指南](https://scagogogo.github.io/cpe-skills/en/guide/)** — 实际使用示例(解析、匹配、WFN、NVD、SBOM 等) - **[API 参考](https://scagogogo.github.io/cpe-skills/en/api/)** — 完整的 API 文档 - **[SKILLS.md](SKILLS.md)** — AI skills 入口点 有关涵盖各项功能(CPE 解析、高级匹配、漏洞关联、SBOM、VEX、导出等)的全面代码示例,请查阅网站指南。 ## 贡献 欢迎各种贡献!请随时提交 Pull Request。 ## 许可证 本项目基于 MIT 许可证授权 — 详情请参阅 [LICENSE](LICENSE) 文件。
标签:CPE解析, EVTX分析, Go, GPT, MCP, Ruby工具, SBOM, 日志审计, 漏洞管理, 硬件无关