scagogogo/cpe-skills
GitHub: scagogogo/cpe-skills
一个综合性 CPE 工具包,提供解析、匹配、生成、SBOM 构建及漏洞关联功能,并支持 Go SDK、CLI、MCP 与 AI 代理四种集成方式。
Stars: 3 | Forks: 0
# cpe-skills
[](https://pkg.go.dev/github.com/scagogogo/cpe-skills)
[](https://goreportcard.com/report/github.com/scagogogo/cpe-skills)
[](https://github.com/scagogogo/cpe-skills/actions)
[](https://github.com/scagogogo/cpe-skills/actions)
[](https://github.com/scagogogo/cpe-skills/releases)
[](LICENSE)
[](https://github.com/scagogogo/cpe-skills/releases)
[](#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, 日志审计, 漏洞管理, 硬件无关