漏洞
概览
公开漏洞,外加决定紧急程度的两件事:CISA 是否见过在野利用,以及被利用的概率。
- 状态
- live
- 文档 id
doc_id如CVE-2024-3400- 引用格式
[CVE-2024-3400]
常用调用
按产品找漏洞
POST /v1/cve/search {"query": "palo alto globalprotect rce"}在野利用 + 高危,按利用概率排
POST /v1/cve/search {"query": "", "filters": {"kev": true, "severity": ["critical","high"]}, "sort": "epss"}读一条
GET /v1/cve/read/CVE-2024-3400 → 默认 level=detail(NVD 原文描述、CVSS 向量、CWE、KEV 与 EPSS 明细)是词,不是意思。这个域没有向量:mode 只有 keyword,写一句话描述需求搜不出东西——要给确切的词。支持引号短语、OR、-排除;中文会分词,中英混写会自动拆成两路。
细则
- NVD 数据按其条款使用:展示时须带「本服务未经 NVD / NIST 背书」声明(响应的 attribution 字段)。
- kev=true 表示 CISA 确认在野利用;epss 是 FIRST 的概率估计,两者口径不同,别混用。
- severity 是由 cvss_score 推出的,3,347 条没有分数的 CVE 这两个字段都空。
- 按被利用风险排序:sort=epss(降序);按时间:sort=date。
- vuln_class / attacker_needs / impact / one_liner* 是模型写的,做摘要可以,别当原文引用;原文在 detail 的 description。
- 模型写的字段(做摘要可以,别当原文引用):affected、attacker_needs、impact、one_liner、one_liner_zh、vuln_class。
- 字段表与枚举值由库的自描述(search.field)生成,不是手写的;枚举计数的口径是 2026-10-13。
检索
POST
/v1/cve/search混合检索,每条命中一张卡片。2 credits。免费样例:
log4j。过滤字段
| 字段 | 类型 · op | 含义 |
|---|---|---|
| cvss_score | number · range | CVSS 分数区间 |
| epss | number · range | EPSS 30 天利用概率区间(0–1) |
| kev | bool · eq | 是否在 CISA KEV(已知被在野利用) |
| published | datetime · range | 发布日期区间 |
| severity | keyword · eq anymedium · high · critical · low | CVSS 等级(由分数推出) |
| vuln_class | keyword · eq anyxss · remote_code_execution · denial_of_service · information_disclosure · injection · memory_corruption …共 17 个,/facets 可列全 | 漏洞类别(闭集 17 类,模型判定) |
还有 3 个,照样能用
| 字段 | 类型 · op | 含义 |
|---|---|---|
| affected | text · text | 受影响产品(模糊匹配,如 globalprotect) |
| cwe | keyword · eq any | CWE 编号 |
| kev_added | datetime · range | 进入 KEV 的日期区间 |
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| query 必填 | string | 1–1000 字符。也可以是最多 5 条的数组(批量,hits 变 results[])。 |
| top_k | integer= 10 | 1–200。 |
| fields | brief · head= brief | head 多扣 1 credit,每条附 head 视图。 |
| filters | json | 过滤 DSL 对象(见快速开始);可用字段见上表。 |
| mode | keyword= keyword | 这个域只有一种模式——词面匹配,不是语义检索。 |
| sort | relevance · date · epss · kev_added · published= relevance | 结果排序。epss 把最可能被利用的排在前面。 |
| offset | integer= 0 | 翻页。 |
示例
{ "domain": "cve", "query": "…", "hits": [ { "id": "CVE-2024-3400", "score": 0.83, "brief": { … } } ], "total": null, "coverage": …, "warnings": [],
"meta": { "request_id": "req_…", "credits": { "charged": 2, "balance": 1998, "pool": "allowance" }, "latency_ms": 41, "cached": false } } 用了未声明的过滤字段返回 400,不会静默忽略。过滤条件是 AND;可用
_or / _not。读
GET
/v1/cve/read/{doc_id}三档深浅,不传就是
detail。免费样例:CVE-2024-3400。三档
| 深浅 | credits | 返回 |
|---|---|---|
| brief | 1 | 卡片:affected、cvss_score、doc_id、epss、kev、one_liner、one_liner_zh、published… |
| detail (默认) | 2 | 全部结构化字段(卡片 + 原文摘要 / 明细字段) |
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| doc_id (path) 必填 | string | 文档 id(doc_id)。 |
| level | brief · detail= detail | 读多深。 |
| format | json · md · html= json | 响应形态。 |
示例
{ "domain": "cve", "id": "CVE-2024-3400", "level": "detail", "view": "detail", "data": { … } | "text": "…", "token_count": 1834, "meta": { … } } 旧写法
GET /v1/cve/doc/{id}?view=… 仍然可用。批量读
POST
/v1/cve/read最多 50 个 id,同一档。查不到的 id 返回
error: "not_found",不扣费。参数
| 参数 | 类型 | 说明 |
|---|---|---|
| ids 必填 | string[] | 文档 id 列表。 |
| level | brief · detail= detail | 所有 id 共用的档。 |
示例
{ "domain": "cve", "level": "detail", "docs": [ { "id": "…", "data": { … } }, { "id": "…", "error": "not_found" } ], "meta": { … } } Facets
GET
/v1/cve/facets?field={field}某个过滤字段的合法值,agent 不用猜;预聚合字段带计数,声明的枚举没有。免费、不需要 key。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| field 必填 | severity · vuln_class | 有 facets 的过滤字段。 |
| limit | integer= 50 | 最多返回多少个值。 |
示例
{ "domain": "cve", "field": "…", "values": [ { "value": "…", "count": 3120 } ], "meta": { … } } 问registered key+ /stream
POST
/v1/cve/ask本域的 agentic 问答:没有向量层,模型把问题翻成结构化筛选 + 中英分词全文检索,读详情后作答,引用写成 [cve: <标题>];/stream 为 NDJSON,answer_delta 是边生成边发的真实片段。
effort low / medium / high 对应 50 / 100 / 200 credits。加 /stream 走 NDJSON,第一个事件一定是 billing。首个 answer_delta 之前失败会退款。参数
| 参数 | 类型 | 说明 |
|---|---|---|
| query 必填 | string | 1–2000 字符。问得具体;要数字就直接问数字。 |
| effort | low · medium · high= low | 检索轮数,也决定价格:50 / 100 / 200 credits。套餐限制最高档。 |
| verbose | bool= false | 返回工具调用轨迹(流式时多 tool_call / tool_result / thinking 事件)。 |
| top_k | integer= 10 | 预取候选数。 |
| stream_answer | bool= true | 仅流式:false 时只发一个 answer 事件。 |
| max_rounds | integer | 0–8,覆盖 effort 预设。 |
| force_answer_after | number | 秒;强制切入作答阶段。 |
| max_answer_tokens | integer= 4096 | 触顶时置 answer_truncated。 |
| language | string | 回答语言,默认跟随 query。 |
示例
{ "answer": "… [CVE-2024-3400] …", "sources": [ … ], "stats": { "rounds": 1, "elapsed_s": 6.2, "answer_truncated": false }, "coverage"?: { … }, "meta": { "credits": { "charged": 50, … } } } 引用是真的——
answer 里的每个 id 都存在于本垂域(格式 [CVE-2024-3400])。sources 是召回集,不是引用列表。answer_truncated 表示不完整。