从两个中危漏洞读懂 CVSS 评分体系:向量拆解、数学计算与实战观察

从两个中危漏洞读懂 CVSS 评分体系:向量拆解、数学计算与实战观察

本文基于作者真实报送的 CNVD 漏洞公告改写。为保护相关方信息,涉及厂商名称、报送人身份、漏洞编号均已脱敏处理;漏洞类型、评分向量、危害等级等关键事实保持原样,可放心阅读与转载。


一、写在前面:两个"恰好中危"的漏洞

某日登录国家信息安全漏洞共享平台(CNVD),发现此前报送的两个漏洞均已公开收录。两条公告长得几乎一模一样:

项目 漏洞 A 漏洞 B
漏洞标题 某管理平台存在硬编码漏洞 某管理平台存在信息泄露漏洞
危害级别 中危 中危
评分向量 (AV:N/AC:L/Au:N/C:P/I:N/A:N) (AV:N/AC:L/Au:N/C:P/I:P/A:N)

两条公告之间只差一个字符:I:N 变成了 I:P。就这一个字母,让两个漏洞的 CVSS 基础分从 5.0 拉开到 6.4------恰好都停在"中危"区间,又恰好一个贴近下限、一个逼近高危门槛。

不少朋友看到这类公告的第一反应是:"都远程可打了、还不要认证,怎么才中危?"要回答这个问题,就需要把 CVSS 这套评分体系从头讲清楚。


二、CVSS 是什么:一句话与一段历史

CVSS(Common Vulnerability Scoring System,通用漏洞评分系统) 是由 FIRST(Forum of Incident Response and Security Teams,事件响应与安全团队论坛)维护的公开评分标准,目标是让不同组织对同一漏洞的严重程度评估"可以互相比较、可以复算复现"。

它的演进脉络大致是:

版本 发布时间 主要变化
CVSS v1 2005 年 首次提出结构化评分框架
CVSS v2 2007 年 引入三维指标模型,业界大规模采用
CVSS v3.0 2015 年 细粒度化(如 AC 细分、新增 UI 指标、C 区分物理等)
CVSS v3.1 2019 年 澄清若干含糊定义
CVSS v4.0 2023 年 重构指标、引入威胁与环境的补充指标等

需要注意的是:直到今天,国内不少漏洞平台(含 CNVD)的公告页仍沿用 CVSS v2 向量格式。这不是平台落后,而是大量历史漏洞库按 v2 口径归档,切换成本极高。因此本文先以 v2 为主线展开------这也是公告里两个向量所属的版本------随后补充 v3/v4 的差异。


三、CVSS 的"三维指标"框架

CVSS v2 由三组指标构成,分别回答三个问题:

  1. 基础指标(Base):漏洞本身的固有属性,不随部署环境变化------"这漏洞本身多严重?"
  2. 时间指标(Temporal):随时间变化的因素------"现在市面上有没有利用代码?厂商修复了吗?"
  3. 环境指标(Environmental):在特定部署环境下的修正------"对我这个系统到底多严重?"

其中基础指标是几乎所有公告页都会展示的部分(本文两条向量即为基础指标向量),也是后续所有量化计算的起点。

基础指标又可细分为 6 个分量:

分量 全称 含义
AV Access Vector 攻击途径 攻击者从哪里发起攻击
AC Access Complexity 攻击复杂度 利用该漏洞需要多高的条件
Au Authentication 认证要求 利用漏洞是否需要通过身份认证
C Confidentiality Impact 机密性影响 对信息保密性的破坏程度
I Integrity Impact 完整性影响 对数据/系统完整性的破坏程度
A Availability Impact 可用性影响 对服务可用性的破坏程度

四、基础指标逐个拆解:取值与含义

4.1 AV:攻击途径

取值 权重 含义
L(Local) 0.395 本地利用,攻击者需在本机或通过本地会话操作
A(Adjacent Network) 0.646 邻近网络利用,如同一 Wi-Fi、蓝牙、相邻网段
N(Network) 1.000 网络远程利用,可从任意网络位置发起

权重差异的直觉:能远程打的漏洞,天然比要坐到机器面前的漏洞覆盖面广、门槛低,因此权重最高。

4.2 AC:攻击复杂度

取值 权重 含义
H(High) 0.350 利用需要苛刻条件(如特定配置、竞态窗口、社工配合)
M(Medium) 0.610 存在一定附加条件,但并非难以满足
L(Low) 0.710 利用条件宽松,攻击者可稳定复现

4.3 Au:认证要求

取值 权重 含义
M(Multiple) 0.450 需要多重认证(如多因子)才能触达漏洞
S(Single) 0.560 需要一次有效认证(如一个普通账号)
N(None) 0.704 无需任何认证即可利用

4.4 C / I / A:三类安全影响

取值 权重 含义
N(None) 0.000 无影响
P(Partial) 0.275 部分影响(部分数据泄露/部分数据可篡改/服务降级)
C(Complete) 0.660 完全影响(全部数据泄露/完全失控/完全中断)

三者的权重共同决定了"Impact(影响子分)"------这也是两个案例中唯一产生差异的地方。


五、案例回放:逐字符解析两条向量

现在把公告里的两条向量翻译成人话。

漏洞 A:(AV:N/AC:L/Au:N/C:P/I:N/A:N)

分量 取值 人话
AV:N 网络 远程可打,不需要物理接触
AC:L 低复杂度 利用条件宽松,可稳定复现
Au:N 无需认证 匿名即可触发
C:P 部分机密性影响 可造成部分敏感信息(如硬编码口令、内部配置)泄露
I:N 无完整性影响 数据不会被篡改
A:N 无可用性影响 服务不被打断

画像 :一个存在于代码中的硬编码凭据/密钥(此类问题在 CWE 中通常对应 CWE-798 Use of Hard-coded Credentials)------远程、免认证、低门槛地把"不该让你知道的东西"暴露给了攻击者,但它本身"不删不改不瘫"。

漏洞 B:(AV:N/AC:L/Au:N/C:P/I:P/A:N)

除完整性外与 A 完全一致:

分量 取值 与漏洞 A 的差异
I:P 部分完整性影响 攻击者不仅能读到敏感信息,还能对部分数据/配置实施篡改

画像 :一个未授权/信息泄露类缺陷(此类问题通常关联 CWE-200 Exposure of Sensitive Information 及其细分变体)------在泄露的基础上叠加了"改"的能力,危害面扩大了一档。

小结 :这两条向量说明,CNVD 评审认为两个漏洞"可远程、易利用、免认证",但没有证据表明能拿到系统完全控制权、能改任意数据或能打瘫服务------因此影响面被圈定在 C:P/I:N 与 C:P/I:P 的组合内。这正是"中危"的技术依据。


六、评分的数学:把向量算成分数

CVSS v2 的威力在于:任何一条向量,任何人都能套用同一套公式复算出唯一分数。基础分计算分三步:

第一步:计算影响子分 Impact

复制代码
Impact = 10.41 × (1 − (1 − C) × (1 − I) × (1 − A))

第二步:计算可利用性子分 Exploitability

复制代码
Exploitability = 20 × AV × AC × Au

第三步:合成基础分 BaseScore

复制代码
BaseScore = (0.6 × Impact + 0.4 × Exploitability − 1.5) × f(Impact)
其中 f(Impact) = 0(Impact=0 时);否则 f(Impact) = 1.176

把两条向量代入(权重见第四节表格):

漏洞 A 计算过程

复制代码
Impact = 10.41 × (1 − (1−0.275) × (1−0) × (1−0))
       = 10.41 × 0.275
       = 2.8628
Exploitability = 20 × 1.0 × 0.71 × 0.704
               = 9.9968
BaseScore = (0.6 × 2.8628 + 0.4 × 9.9968 − 1.5) × 1.176
          = (1.7177 + 3.9987 − 1.5) × 1.176
          = 4.2164 × 1.176
          ≈ 5.0

漏洞 B 计算过程

复制代码
Impact = 10.41 × (1 − (1−0.275) × (1−0.275) × (1−0))
       = 10.41 × (1 − 0.725 × 0.725)
       = 10.41 × 0.4744
       = 4.9382
Exploitability = 20 × 1.0 × 0.71 × 0.704 = 9.9968   (同漏洞 A)
BaseScore = (0.6 × 4.9382 + 0.4 × 9.9968 − 1.5) × 1.176
          = (2.9629 + 3.9987 − 1.5) × 1.176
          = 5.4616 × 1.176
          ≈ 6.4

可复现验证脚本(Python):

python 复制代码
def cvss2_base(av, ac, au, c, i, a):
    AV = {"L": 0.395, "A": 0.646, "N": 1.0}
    AC = {"H": 0.35, "M": 0.61, "L": 0.71}
    AU = {"M": 0.45, "S": 0.56, "N": 0.704}
    CIA = {"N": 0.0, "P": 0.275, "C": 0.660}
    impact = 10.41 * (1 - (1 - CIA[c]) * (1 - CIA[i]) * (1 - CIA[a]))
    exploitability = 20 * AV[av] * AC[ac] * AU[au]
    f = 0.0 if impact == 0 else 1.176
    return round(((0.6 * impact) + (0.4 * exploitability) - 1.5) * f, 1)

# 漏洞 A -> 5.0;漏洞 B -> 6.4
print(cvss2_base("N", "L", "N", "P", "N", "N"))
print(cvss2_base("N", "L", "N", "P", "P", "N"))

这就是"一个字母之差拉开 1.4 分"的由来:I 从 N 变为 P 时,Impact 子分从 2.8628 跳到 4.9382,而可利用性部分完全不变。


七、从分数到等级:分级阈值

拿到分数后,按固定阈值映射等级:

CVSS v2 分数 等级
0.0 -- 3.9 低危(Low)
4.0 -- 6.9 中危(Medium)
7.0 -- 10.0 高危(High)

因此:漏洞 A = 5.0 中危;漏洞 B = 6.4 中危。若漏洞 B 的完整性影响再进一步(I:C),或将机密性推高(C:C),或攻击途径/复杂度/认证条件再恶化一档,分数很容易突破 7.0 进入高危------这也解释了为什么"远程免认证 + 完整数据读取"的漏洞通常都是高危起步。

补充:CVSS v3.x 在 7.0--10.0 之间又细分出 9.0--10.0 为严重(Critical);v4.0 继续沿用四档体系并调整了部分映射方式。


八、平台实践中的定级观察

结合大量实际报送经验,有以下几条规律值得记录(均为公开实践中的一般性观察,具体以平台最终评审为准):

  1. 代码级硬编码凭据与配置型弱口令,定级逻辑截然不同。写死在代码/固件中的口令、密钥、出厂默认凭据属于产品设计缺陷,实践中往往中危起步、高危亦不罕见;而部署侧"admin/123456"这类弱口令常被视为运维配置问题,容易被压到低危。报送论证时若不刻意区分,极易被归入弱口令范畴而拉低级别。

  2. 信息泄露类漏洞普遍偏低。纯被动式信息泄露(如报错堆栈泄露、目录列举、冗余信息返回,典型如 CWE-209)在 CNVD 实践中多定低危,且通常难以达到原创漏洞证书要求的中危门槛;这类漏洞的价值更多在于方法论沉淀、行业素材积累与"收录"本身,而不是证书与编号。

  3. "远程 + 免认证 + 部分影响"的经典组合落在中危区间(4.0--6.9),是公告里最常见的面孔;能否再往上走,取决于影响是否完整(P→C)、是否有完整利用链、是否叠加了认证绕过等高阶前提。

  4. 业务场景通常不直接改分,但影响评审感知。CVSS 是纯技术度量,不考虑"这个系统是干什么的"。应急广播、电力、医疗等关键信息基础设施场景下,同类漏洞的真实业务危害往往远超普通系统------这是平台评级与业务风险的天然落差,也是报送方可以额外提交业务影响说明、利用链演示等材料争取复核的依据。


九、CVSS 的边界与正确用法

CVSS 是严重程度度量 ,不是风险度量,更不是"该不该修"的唯一答案。它有三条著名边界:

  1. 不含业务上下文。同样 6.4 分的漏洞,打在门户网站和打在某某应急调度平台上的真实风险完全不同。
  2. 不含实际被利用概率。时间指标中的 Exploit Code Maturity(利用代码成熟度)在多数公告中按最坏情况或未知处理,导致大量"理论漏洞"分数虚高。
  3. 静态快照。漏洞被组合进攻击链后,单独看每个环节的 CVSS 都不高,串联起来可能足以造成灾难------CVSS 天然不擅长表达这种 1+1>2。

因此,一个负责任的处置流程应当把 CVSS 当作第一道过滤器 ,而不是最终裁决:先用分数完成分级排序,再用资产价值、暴露面、实际可利用性、业务影响做二次加权。


十、结语

回到开头的疑问:"都远程可打了、还不要认证,怎么才中危?"

答案在这套体系的设计里:CVSS 的中危区间容纳的是"利用容易、但破坏有限 "的漏洞。两个案例一个只读不改(5.0),一个能读能改但只到部分程度(6.4),恰好是这个区间的典型样本。而当你看到一条向量,真正要做的不是纠结"为什么才中危",而是沿着 AV→AC→Au→C/I/A 逐项追问:如果把它喂进一条真实攻击链,它还能只是"中危"吗?


附:本文涉及的 CVSS 公式、权重表与分级阈值均引用自 FIRST 公开发布的 CVSS v2 规范文档,读者可用文末 Python 脚本自行复算验证。

相关推荐
许彰午2 小时前
34-安全复盘96个问题
前端·vue.js·安全
我的小卷呀3 小时前
Linux ip 命令底层逻辑与实战指南
linux·运维·c语言·网络协议·tcp/ip·网络安全
数据知道3 小时前
AES 加密实战——模式选择(ECB/CBC/GCM)与安全陷阱
前端·网络·安全
科技云报道5 小时前
AI时代重新定义“信任”,瑞数信息发布全新AI安全产品体系
人工智能·安全
一只鹿鹿鹿5 小时前
信息网络安全建设方案(PPT文件)
大数据·安全·web安全·系统安全·制造
kruptos5 小时前
量子计算机来了,RSA 还安全吗?
安全·量子计算·shor算法·rsa 格基密码·kyber dilithium
志栋智能5 小时前
安全超自动化的治理框架与剧本(Playbook)管理
网络·安全·自动化
迪康coolmu6 小时前
企业文档防泄密五层防护实战:基于迪康端点安全一体化管理系统的设计与落地
运维·经验分享·安全
泛联新安6 小时前
“天神”空降:泛联新安受邀参加第八届“纵横”网络空间创新论坛
网络安全·自动化·代码规范·漏洞挖掘·代码安全·代码漏洞扫描·ai+可信开发