Common Vulnerability Scoring System
Common Vulnerability Scoring System(CVSS)是 FIRST 维护的开放漏洞严重度表达标准。它把攻击前提和技术影响编码为可审计的向量,并将一次评估映射为 0.0—10.0 分及可选的 None/Low/Medium/High/Critical 等级。CVSS 回答的是“在给定指标取值下,这个漏洞的技术严重度是什么”;它不分配 CVE、不给出未来利用概率,也不直接等于某个组织的业务风险或补丁顺序。
引用一个 CVSS 数字时,至少应同时保留 CVSS 版本、评分提供者、完整向量、适用产品或环境和观测时间;若为 v4.0,再保留 score nomenclature。裸写“CVSS 7.8”会丢失评分是 v3.1 还是 v4.0、由谁给出、使用了什么攻击前提,以及 Threat/Environmental 是否已显式纳入。
v3.1 与 v4.0 不是同一把尺
FIRST 在 2019 年 7 月 12 日发布 v3.1 公告;v3.1 主要澄清 v3.0 的定义、公式和取整,没有新增指标。v4.0 于 2023 年 11 月 1 日正式发布,重构了指标、计算方法和结果命名。当前 FIRST 页面以 v4.0 为现行版本,同时继续保留旧版规范与计算器。
| 维度 | CVSS v3.1 | CVSS v4.0 |
|---|---|---|
| 指标组 | Base、Temporal、Environmental | Base、Threat、Environmental、Supplemental |
| Base Exploitability | AV、AC、PR、UI | AV、AC、Attack Requirements、PR、UI |
| 技术影响 | C/I/A;Scope 表达影响是否跨安全边界 | 分开记录 Vulnerable System 的 VC/VI/VA 与 Subsequent System 的 SC/SI/SA |
| 利用成熟度 | Temporal 中的 Exploit Code Maturity,另有 Remediation Level、Report Confidence | Threat 只保留 Exploit Maturity;旧 RL/RC 退役 |
| 环境修正 | CR/IR/AR 加 Modified Base metrics | CR/IR/AR 加与新 Base 对应的 Modified metrics,并允许 MSI/MSA 的 Safety 值 |
| 补充语境 | 无独立组 | Safety、Automatable、Recovery、Value Density、Vulnerability Response Effort、Provider Urgency;均不改变数值分数 |
| 数学模型 | 公开权重与代数公式 | 专家排序的 equivalence sets/MacroVectors 加组内插值 |
因此,v4.0 不是给 v3.1 向量换一个版本前缀。Attack Complexity 的部分旧含义被拆到 Attack Requirements,User Interaction 被细分为 Passive/Active,Scope 被两个系统的影响指标替代,计算模型也改变。跨版本趋势分析必须保留原始向量和版本,不能把同一 CVE 的 v3.1 与 v4.0 数字当作无损换算或直接解释成严重度升降。
两个版本沿用相同的定性区间:0.0 为 None,0.1—3.9 为 Low,4.0—6.9 为 Medium,7.0—8.9 为 High,9.0—10.0 为 Critical。区间相同不代表底层评估或分值可直接横比。
v4.0 的四层信息
| 指标组 | 回答的问题 | 典型责任位置 | 不能推出什么 |
|---|---|---|---|
| Base | 在合理最坏实现下,利用需要什么条件,会对易受攻击系统及后续系统造成什么技术影响 | 通常由产品提供者、CNA 或代评分方给出;11 个 Base metrics 必填 | 不能推出已被利用、某资产可达或业务损失 |
| Threat | 当前利用成熟度是 Attacked、Proof-of-Concept 还是 Unreported | 由威胁情报提供者或掌握持续威胁情报的消费者 enrichment;未定义 E:X 在计算中按最坏的 E:A 处理 | E:X 默认按 E:A 计算不是利用证据;显式 E:A 只表示该 assessment provider 依据其证据判断为 Attacked,仍不等于 KEV 收录、跨来源确认或具体资产已遭利用 |
| Environmental | 本地资产的 C/I/A 重要性、部署条件和缓解措施如何改变评估 | 最了解实际部署、控制与资产价值的消费者重算 | 一个组织的 Modified metrics 不能成为所有部署的通用 Base |
| Supplemental | 安全、攻击链自动化、恢复、价值密度、响应工作量和供应商紧迫度等额外语境 | 通常由产品维护方或代评分方赋值;消费者据此调整本地响应;Provider Urgency 可沿供应链传递 | Supplemental 值不进入 CVSS 数值,U:Red 或 S:P 不是“加分项” |
v4.0 用 CVSS-B、CVSS-BT、CVSS-BE、CVSS-BTE 标记哪些 Threat/Environmental metrics 被显式使用。数值计算始终考虑 Base、Threat 与 Environmental;未显式提供 T/E 时使用 X 的计算默认。一次评估是一个数值及其 nomenclature,不是四个可以并列挑选的子分数。Supplemental 不产生 “S” 数值后缀。
完整向量比裸分数重要。FIRST 要求发布分数时同时发布向量;向量保存了指标取值,数值本身无法反推出这些判断。v4.0 的 11 个 Base metrics 不允许 X,必须完整赋值;Threat/Environmental 的 X 有计算默认,Supplemental 的 X 不改变数值。因此“字段没填”和“事实已被确认”为不同状态。
严重度、可利用性与风险必须分层
v3.1 User Guide 明确写出 “CVSS Measures Severity, not Risk”。v4.0 的 Threat 和 Environmental 能让结果更接近时间与部署语境,但 CVSS-BTE 仍不是完整风险概率:它没有自动纳入资产外网暴露、攻击者偏好、业务依赖、补丁副作用、停机成本、合规期限和组织风险承受度。
更稳健的决策链是:
CVE 标识 → 产品适用性 → CVSS 技术严重度 → 利用证据或预测 → 本地资产与处置约束 → 修复决策
- CVE Numbering Authority 与 CVE Record 解决“我们在谈哪一个弱点”及其产品、版本和参考资料,不负责给所有部署统一定级。
- CVSS Base 统一表达攻击条件与技术影响;Environmental 需要本地重算,不能用上游组件分数替代产品适用性分析。
- Exploit Prediction Scoring System(EPSS)每日估计未来 30 天观察到利用活动的概率;它受观测源与模型覆盖约束,不是攻击次数、真实利用率或业务损失概率。CISA Known Exploited Vulnerabilities Catalog(KEV)记录达到 CISA 收录门槛的已知在野利用。前者是预测,后者是经确认但不完备的历史/现行集合,两者都不是严重度分数。
- Stakeholder-Specific Vulnerability Categorization(SSVC)允许不同 stakeholder 构造自己的 decision tree;CISA 定制实现使用 exploitation、automatable、technical impact 等 decision points。它不是所有组织共享的一棵固定树或通用效果分数。CISA BOD 26-04则是联邦机构按风险安排安全更新的制度要求。
- 发行版或产品方还要判断代码是否存在、配置是否启用、修复是否已 backport、攻击面是否可达,以及升级会不会破坏服务。Linux Kernel CVE Authority因此把 CVE 编号、NVD enrichment、KEV 与发行版产品状态分开。
这些异质信号如何在有限补丁容量下组合、设 override 和校验时间泄漏,另见 漏洞优先级信号组合;组合关系不能被压成另一个 CVSS 数字。
FIRST 的 EPSS FAQ 还特别反对把 EPSS 概率与 CVSS 序数分数直接相乘:两个量的语义和标度不同,乘积没有可解释的概率或风险单位。把多种信号组合进本地模型可以是组织决策,但必须明确输入、阈值、目标结果和验证方法,而不是靠算术拼接制造一个看似精确的“风险分”。
分数由谁给出
CVSS 是方法,不是一个全局唯一评分数据库。同一 CVE 可以同时出现产品 CNA、ADP、NVD、发行版或其他提供者的评估;它们可能使用不同版本、公开资料、适用产品和观测时间。正确的引用对象是“某 provider 对某范围在某时点给出的某版本向量”,不是“这个 CVE 的真实 CVSS”。
National Vulnerability Database(NVD)摄入已发布的 CVE Record,并对纳入当前 scope 与排期的记录补充 CPE、CWE、CVSS 和 configuration mapping;并非每条已发布记录都会立即或最终出现独立 NVD metric。NVD FAQ 说明其分析基于当时可得公开资料,不会把第三方向量不加判断地复制成自己的结论;公开信息不足或冲突时还可能采用合理最坏情形。NVD API 的 metric 对象保留 source 与 type,正是为了让消费者区分评分来源,而不是把所有数字折叠成一列。
NVD API 的 Primary/Secondary 不等于 CVE Program 的 CNA/ADP 角色。Primary 包括 NVD,也可包括在相应 submission category 达到 CVMAP Provider level 的 CNA;Provider submission 被抽审时,响应可同时把 NVD 标为 Primary、该 CNA 标为 Secondary。因而 Secondary 既可能是 CNA,也可能是 ADP,不能据此判断来源角色、正确性或优先级;CNA/ADP 身份应回到 CVE Record 的 containers.*.providerMetadata 核验。
2026 年 8 月 11 日对 NVD current-state API 的访问观察给出两个直观例子;这些 endpoint 会继续更新,以下同时固定响应 timestamp 与记录 lastModified:
- CVE-2026-4538 暴露了聚合层归属边界:CVE List 的 VulDB CNA container 对 v4 向量记录 4.8 Medium;NVD change history 显示 NIST 后续把 NVD 展示值修订为 1.9 Low,而 API 仍保留
source=cna@vuldb.com。同一响应还有 VulDB-sourced v3.1 5.3 与 NVD v3.1 7.8。因而 1.9 应称为“NVD 对 VulDB-sourced 向量的修订展示值”,不能直接归为 VulDB 的上游原值。响应timestamp=2026-08-10T18:34:37.048,记录lastModified=2026-06-17T10:56:46.560。 - CVE-2024-53197 的 Linux CNA container 提供产品、版本与修复信息且没有 CVSS;CISA-ADP container 另行提供 CVSS v3.1 7.8、SSVC 和 KEV,NVD API 将其展开为带来源的不同字段。它们不是 Linux CNA 给出的统一结论。响应
timestamp=2026-08-10T18:34:38.638,记录lastModified=2026-06-17T08:08:33.967。
NVD 的 CVMAP 机制按 CNA × submission category 衡量最近合格样本与 NVD enrichment practices 的一致度及抽审状态,给出 Reference/Contributor/Provider 等 acceptance level。它不是一般质量排名或 FIRST 对评分正确性的认证,也不意味着某 provider 的所有历史分数都适用于本地环境。
实证研究揭示的限制
CVSS 的价值在于把判断拆成可讨论的指标,而不是消除判断者差异或自动预测攻击。
- Allodi 与 Massacci(2014)用历史漏洞、PoC 与黑市利用数据做 case-control risk-factor analysis;在该样本中,按高 CVSS 筛选的估计风险降低近似随机选择,PoC 和黑市 exploit 更能区分现实利用。论文没有让组织实际采用不同补丁政策,也没有观察事故下降;其数据时代、威胁市场和旧版 CVSS 更不能外推为 v4.0 的普遍效果估计。
- Allodi 等(2020)让 73 名学生与专业人员在相同材料和时限下评估 CVSS v3 Base metrics;安全知识降低错误,但专业人员之间仍有较大差异。实验只测 Base、以 SIG 评估为基准且专业组不到 20 人,不能说明 Environmental 评估或现实组织决策的准确率。
- Wunder 等(IEEE S&P 2024)调查 196 名 CVSS 使用者,并对 59 人复测;同一批漏洞中,68% 的复测者至少一次改变 severity rating。结果说明规范使用仍有解释与一致性问题,不等于任一评分源必然错误。
- Walkowski 等(Computers & Security 2026)分析 1988—2025 年 297,780 条 CVE 与 506,653 个 NVD metric entries;在 64,730 个同时有 NVD/CNA 评分的 CVE 中,34.1% 的 severity category 不同,跨版本 category 也会变化。这是数据库结构与评分碎片化的描述性证据,不提供“哪个分数更接近真实风险”的 ground truth。
- Koscinski 等(ACM CCS 2025)在四个月 Microsoft Patch Tuesday 的 600 个 CVE(其中 13 个后来进入 KEV)中比较 CVSS、SSVC、EPSS 与 Microsoft Exploitability Index;四套信号的一致性很低。CVSS≥7 覆盖 12/13 个正例,但没有未利用分母时不能推断预测力;对 1,226 个历史 KEV 使用 EPSS>.5 的检查也不是完整 calibration test。
- Shimizu 与 Hashimoto(IEEE Access 2026)回溯 28,377 个 CVE:CVSS≥7 的 efficiency/coverage 为 0.5%/90.0%,其 CVSS、EPSS、KEV 组合规则为 9.1%/85.6%。这说明异质信号可以改变队列取舍,却仍是 retrospective ranking,不是组织实际 patch、事故或损失结果。
- Johnson 等(IEEE TDSC)提供反向证据:五个数据库的 Bayesian latent-truth 分析认为多数 CVSS 维度相对一致、NVD 在其模型中最优。这里的“真值”由 assessor agreement 推断,仍不是 exploitation ground truth;它提醒我们不能把所有 provider 差异都叫作错误。
这些研究共同支持三个工作规则:不要用单一 Base threshold 替代威胁和资产分析;不要把 provider 分歧静默平均;不要用历史版本混杂的分数训练或评估模型而不保留版本、向量与来源。
操作核对表
处理一条漏洞记录时:
- 固定 CVE ID、受影响产品、版本和配置,不先从分数倒推适用性。
- 记录 CVSS 版本、provider、完整 vector、nomenclature 与时间戳;同页多条 metric 分开保留。
- 检查 Base 判断是否来自产品提供者、NVD 或 ADP;若不同,逐项比较向量,而不是只比较总分。
- 查明 Threat 值是 X 的默认最坏值还是显式评估,并继续追溯显式 E:A 来自在野攻击报告还是 exploit tooling;另查 EPSS、KEV、PoC 与内部遥测。
- 用实际暴露、缓解措施和资产关键性重算 Environmental;不要把别人的环境向量移植为通用结论。
- 把 Supplemental 当作响应语境,不把它解释成隐藏的数值加权。
- 最终补丁优先级写清业务、停机、合规和处置成本;CVSS 只是输入之一。
证据边界
- FIRST 规范定义评分语义,但不背书每个 provider 的具体向量,也不裁定某个第三方计算器或风险模型适合某组织。
- v4.0 specification、user guide 与 FAQ 各自还有文档修订号;“CVSS 4.0”不能与 specification v1.2 或 FAQ v1.10 混写成标准版本升级。
- NVD API 是会更新的聚合快照。引用具体 metric 时需记录访问日期;未来 enrichment、provider 修订或状态变化可能改变响应。
- 某 provider/版本的 metric 在当前响应中缺失,只表示该快照没有相应独立条目;不能推出低危、无漏洞、从未评估或不存在 CNA/ADP 评分。高分也不证明存在 exploit、资产可达或需要无条件立即停机。
- 现有独立研究大量测量一致性、coverage/efficiency 和历史利用关联;尚未找到把完整 v4.0 BTE、CVSS/EPSS/KEV 组合政策或 SSVC 采用与组织层事故下降直接连接起来的独立因果证据。