Skip to content

osv-parse

解析 OSV JSON 文件并展示结构化的漏洞数据。

触发条件: 提到 OSV 解析、漏洞 JSON 读取、CVE/GHSA 数据提取,或用户提供了 OSV JSON 文件路径。 技能源码: .claude/skills/osv-parse/SKILL.md

CLI

bash
osv parse vulnerability.json           # 关键字段(文本)
osv parse -v vulnerability.json        # 全字段(日期、详情、鸣谢、范围)
osv parse -o json vulnerability.json   # JSON 输出
标志说明
-v, --verbose展示全字段
-o, --outputtext(默认)或 json

SDK 等价

go
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 和每范围事件。

bash
osv parse test_data/GHSA-vxv8-r8q2-63xw.json
text
ID:             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 完全一致:

bash
osv parse -o json vulnerability.json | jq '{id, summary, severity, affected}'
json
{
  "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]] — 对解析后的数据做收窄或提取

Last updated:

Released under the MIT License.