NVD API 2.0 是什么
NVD(美国国家漏洞数据库)的 REST API 2.0 提供按 CVE 编号或时间窗口查询漏洞记录的接口,返回 CVSS 评分、CWE 分类、CPE 适用性与参考链接。相对早期只能整包下载的 JSON feed,2.0 支持条件查询与分页,适合做增量同步。代价是接口有明确的速率限制,批量拉取必须做退避重试与本地缓存。
基本信息
| 接口基址 | https://services.nvd.nist.gov/rest/json/cves/2.0 |
|---|---|
| 认证方式 | 可选 apiKey 请求头,不填为匿名访问 |
| 速率限制(匿名) | 滚动 30 秒窗口内 5 次请求 |
| 速率限制(带 Key) | 滚动 30 秒窗口内 50 次请求 |
| 时间窗口上限 | 单次查询的日期跨度不超过 120 天 |
| 分页参数 | startIndex 起始偏移,resultsPerPage 每页条数,上限 2000 |
| 增量参数 | lastModStartDate / lastModEndDate 按修改时间拉取 |
| 数据许可 | NVD 数据为美国联邦公开数据,引用仍建议标注来源与获取时间 |
典型使用场景
- 资产漏洞匹配完成后补 CVSS 评分与 CWE 分类
- 每日增量同步新增与修订的 CVE,落到内部漏洞库
- 定级会前批量导出高危清单,附评分与参考链接
- 与 KEV 目录联合排序,标出有在野利用记录的条目
- 审计报告引用:用编号与评分作为客观依据
- 工具链集成:扫描器结果用 API 补齐标准字段后入库
查询示例
查询示例
# 1) 按编号查询,取出所有版本的 CVSS 度量
curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228" \
| jq '.vulnerabilities[0].cve.metrics'
# 2) 带 API Key 提升配额,Key 放在请求头
curl -s -H "apiKey: $NVD_KEY" \
"https://services.nvd.nist.gov/rest/json/cves/2.0?pubStartDate=2024-01-01T00:00:00.000&pubEndDate=2024-01-07T00:00:00.000&startIndex=0&resultsPerPage=100" \
| jq '.totalResults'
# 3) 先看 totalResults 再决定翻页次数,避免一次拉爆配额
# 4) 增量同步用修改时间窗口,比发布时间更贴近真实变化响应字段读法
| 字段 | 含义 | 正常与异常 |
|---|---|---|
| vulnerabilities[] | 命中的漏洞条目数组 | 空数组表示没查到,不是接口故障 |
| totalResults | 命中总数 | 大于 resultsPerPage 时必须翻页 |
| cve.metrics.cvssMetricV31 | CVSS v3.1 评分与向量 | 缺失表示尚未评分,不能当 0 分处理 |
| cve.weaknesses | CWE 分类 | 缺失通常是尚未富化 |
| cve.vulnStatus | 分析状态 | Awaiting Analysis 表示细节可能后续变化 |
| timestamp | 本次响应数据版本时间 | 用于记录同步水位 |
| cve.configurations | CPE 适用性条件 | 历史条目可能缺失,需回看厂商公告 |
超过速率限制或窗口跨度超 120 天会返回 403、503 或超时。同步脚本必须做指数退避、断点续传与本地缓存,否则任务会长期断档。
metrics 下可能同时存在 cvssMetricV2、V30、V31 甚至 v4.0 条目,取数逻辑要按版本优先取最新可用值,并按来源区分 NVD 自评与 CNA 提交。