osv-parse
解析 OSV JSON 文件并展示结构化的漏洞数据。
触发条件: 提到 OSV 解析、漏洞 JSON 读取、CVE/GHSA 数据提取,或用户提供了 OSV JSON 文件路径。 技能源码:
.claude/skills/osv-parse/SKILL.md
CLI
osv parse vulnerability.json # 关键字段(文本)
osv parse -v vulnerability.json # 全字段(日期、详情、鸣谢、范围)
osv parse -o json vulnerability.json # JSON 输出| 标志 | 说明 |
|---|---|
-v, --verbose | 展示全字段 |
-o, --output | text(默认)或 json |
SDK 等价
v, err := osv.UnmarshalFromJsonFile[any, any]("vulnerability.json")
fmt.Println(v.ID, v.Summary, v.Aliases.GetCVE())决策树
输出结构
它打印什么
ID、schema 版本、摘要、aliases/CVE、severity、受影响包、引用。加 -v 还会展示 published/modified 日期、withdrawn、related、details、credits 和每范围事件。
osv parse test_data/GHSA-vxv8-r8q2-63xw.jsonID: GHSA-vxv8-r8q2-63xw
Schema Version: 1.4.0
Summary: TensorFlow vulnerable to `CHECK` fail in `FractionalMaxPoolGrad`
Aliases: CVE-2022-35981
CVE: CVE-2022-35981
Severity:
CVSS_V3: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H (score: 0.0)
Affected Packages:
PyPI/tensorflow
PyPI/tensorflow
PyPI/tensorflow
PyPI/tensorflow-cpu
PyPI/tensorflow-cpu
PyPI/tensorflow-cpu
PyPI/tensorflow-gpu
PyPI/tensorflow-gpu
PyPI/tensorflow-gpu
References:
[WEB] https://github.com/tensorflow/tensorflow/security/advisories/GHSA-vxv8-r8q2-63xw
[ADVISORY] https://nvd.nist.gov/vuln/detail/CVE-2022-35981
[WEB] https://github.com/tensorflow/tensorflow/commit/8741e57d163a079db05a7107a7609af70931def4
[PACKAGE] https://github.com/tensorflow/tensorflow
[WEB] https://github.com/tensorflow/tensorflow/releases/tag/v2.10.0每个受影响包按它出现的每个 affected 条目打印一次——这条记录为 tensorflow 带了 3 个独立 affected 条目(每个修补分支一条),所以 PyPI/tensorflow 出现 3 次。这是数据结构本身如此,不是 bug。引用按源顺序列出,横跨 WEB/ADVISORY/PACKAGE/… 各类型(不分组)。
CVSS 向量旁的 (score: 0.0) 就是 方法清单 → severity 里记录的向量字符串解析失败表现——向量本身在 Score: 字段里。
底层发生了什么
osv parse 只是 SDK UnmarshalFromJsonFile 之上的一层薄壳——和你在 Go 里会写的调用一模一样。与 SDK 路径唯一的区别就是文本/JSON 的渲染。
文本 vs JSON:怎么选
-o json 把带类型的 OsvSchema 内核重新 marshal,所以输出就是标准 OSV 记录——字段名与 OSV Schema 完全一致:
osv parse -o json vulnerability.json | jq '{id, summary, severity, affected}'{
"id": "GHSA-vxv8-r8q2-63xw",
"summary": "TensorFlow vulnerable to `CHECK` fail in `FractionalMaxPoolGrad`",
"severity": [{ "type": "CVSS_V3", "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H" }],
"affected": [{ "package": { "ecosystem": "PyPI", "name": "tensorflow", "purl": "" }, "ranges": [...] }]
}解析绝不修改文件
parse 只读。它把数据解码进带类型内核再打印——绝不写回。想在解析前先确认文件格式正确,用 [[osv-validate]];格式错误的文件会让 parse 以非零码退出并给出解码错误。
交叉引用
- [[osv-validate]] — 先确认文件 schema 合规
- [[osv-filter]] / [[osv-query]] — 对解析后的数据做收窄或提取