深夜的急诊室里灯火通明,救护车一辆接一辆地送来病人:有胸口剧痛的老先生,有出了小车祸的大学生,还有疑似食物中毒的一家三口。如果护士们只是按“先来后到”的顺序看诊,那位胸痛患者很可能在漫长的等待中错过黄金抢救时间。于是,急诊室有了“分诊”制度——用统一的评估表格快速判断每位病人的危重程度,贴上绿、黄、红标签,决定谁先进抢救室。 网络安全的世界如出一辙。安全团队每天面对扫描器、众测平台、威胁情报推送来的成百上千个“病人”(漏洞),每个发现都可能被报告方宣称“极其严重”。如果没有一把公认的尺子,团队就会陷入“所有人都在喊救命”的混乱。CVSS(Common Vulnerability Scoring System,通用漏洞评分系统)就是业界这把“急诊分诊尺”:它把漏洞从 0 到 10 打分,用基础指标、时间指标、环境指标三张“评估表”逐层问诊,最终给出严重度等级,指导你排定修复优先级、制定 SLA 和分配资源。

岗位关联

CVSS 是安全测试与漏洞管理的通用语言:掌握它,才能把扫描器与 AI 模型发现的漏洞翻译成修复优先级和 SLA,是 AI 安全测试产品落地的关键能力。

目录
  1. 可视化演示
  2. CVSS评分简介
  3. 基础指标度量
  4. 影响与作用域
  5. 时间与环境指标
  6. 向量字符串解析
  7. 分数计算流程
  8. 修复优先级实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示CVSS漏洞严重度评分流程:基础指标评估、时间指标调整、环境指标调整,最终输出0-10分标准化评分与修复优先级。

本节配有交互动效(进入视口后自动加载,约 3KB)。

基础指标评估 8项基础指标评估漏洞本质特征:攻击向量、复杂度、权限、交互、范围及CIA三要素 Base = roundup(min(Impact,Scope)×Exploitability) 基础分反映漏洞固有严重程度。

CVSS评分简介

想象你第一天入职安全团队,打开漏洞管理平台,屏幕上整整齐齐列着 500 个漏洞:有的来自扫描器,有的来自众测报告,每一条都写着“严重”。如果你逐条阅读技术细节再开会讨论,一周都排不出优先级。这正是急诊室当年遇到过的困境——直到分诊护士拿出一张标准化的三页评估表,问题才有了公用的答案。

CVSS 就是安全界的“分诊评估表”。它由 FIRST 组织维护,目前主流版本是 v3.1(v4.0 也已发布),核心产出是 0 到 10 的标准化分数和一段向量字符串。0 分代表无风险,10 分代表最严重。更关键的是它的三层结构:基础指标描述漏洞“天生的体质”,时间指标记录“病情随时间的演变”,环境指标则允许每个组织“量身定制”——同一个漏洞,在你和别人的评分里可以不同。

三组指标按固定顺序逐层作用:先由基础指标算出基础分,再乘上时间因子反映利用情报,最后用环境需求修订。用一句话概括就是“基础定门类,时间看演变,环境量身定”。最终分数不是把三个数字简单相加,而是嵌套的加权计算。

就这样,三张分诊评估表的逻辑贯穿了 CVSS 的全部设计。对新手而言,先记住“三层结构”这个骨架,后面每一节都是在往骨架里填肉。

最终分数=F(基础指标, 时间指标, 环境指标)\text{最终分数} = F\bigl(\text{基础指标},\, \text{时间指标},\, \text{环境指标}\bigr)
  1. 三个输入参数基础、时间、环境三大度量组依次代入计算。
    基础指标={AV, AC, PR, UI, S, C, I, A}\text{基础指标} = \{\text{AV},\,\text{AC},\,\text{PR},\,\text{UI},\,\text{S},\,\text{C},\,\text{I},\,\text{A}\}
  2. 基础指标展开攻击向量、复杂度、权限、交互、作用域与三性影响。
    时间指标={E, RL, RC}\text{时间指标} = \{\text{E},\,\text{RL},\,\text{RC}\}
  3. 时间指标展开利用代码成熟度、修复级别与报告置信度。
    环境指标={CR, IR, AR}∪{修改后的基础指标}\text{环境指标} = \{\text{CR},\,\text{IR},\,\text{AR}\} \cup \{\text{修改后的基础指标}\}
  4. 函数 F先算基础分,再乘时间因子,最后用环境需求修订。
    最终分数=Roundup(修订后的基础分×E×RL×RC)\text{最终分数} = \text{Roundup}\Bigl(\text{修订后的基础分} \times E \times RL \times RC\Bigr)

基础指标度量

分诊护士问病人的第一个问题往往是:“你这伤是怎么来的?”是被飞来的流弹击中,还是在健身房自己拉伤了肌肉?这决定了病情有多“容易到达”和“值得警惕”。CVSS 的基础指标第一组,问的正是这个问题——攻击者到底是怎么打进系统的。

这一组包含四个“利用难度”指标。攻击向量(AV)描述攻击者与目标之间的距离:能隔着互联网远程打击(N),还是必须靠近目标(A),或者要已经进到本机(L),甚至得物理接触设备(P)。攻击复杂度(AC)衡量利用的门槛高低:是开箱即用的低门槛(L),还是需要凑齐特殊条件的高门槛(H)。所需权限(PR)问攻击者要先拿到什么身份:完全匿名(N)、普通用户(L)还是管理员(H)。用户交互(UI)则看要不要骗一个“倒霉用户”点一下链接(R)——不需要就是 N。每一项都对应一个小于 1 的权重,全部乘起来,就得到利用难度子分数。

如果一个漏洞能从公网匿名远程利用、不需要任何权限、也不需要用户点任何东西,那它在“利用难度”这一栏几乎拿满——正如急诊室里被流弹击中且大量失血的患者,分诊护士会立刻意识到:这是要抢时间的伤。

ES=8.22×AV×AC×PR×UI\text{ES} = 8.22 \times \text{AV} \times \text{AC} \times \text{PR} \times \text{UI}
  1. 取攻击向量档位网络、相邻、本地、物理四档,距离越远权重越高。
    AV∈{0.85, 0.62, 0.55, 0.20}\text{AV} \in \{0.85,\,0.62,\,0.55,\,0.20\}
  2. 取攻击复杂度档位低复杂度意味着更容易被利用,权重更高。
    AC∈{0.77, 0.44}\text{AC} \in \{0.77,\,0.44\}
  3. 取所需权限档位权限要求越高越难利用;作用域改变时取另一组更高值。
    PR∈{0.85, 0.62, 0.27},PR′∈{0.85, 0.68, 0.50}\text{PR} \in \{0.85,\,0.62,\,0.27\},\quad \text{PR}' \in \{0.85,\,0.68,\,0.50\}
  4. 取用户交互档位需要受害者配合会降低可利用性,权重更低。
    UI∈{0.85, 0.62}\text{UI} \in \{0.85,\,0.62\}
  5. 连乘回归常数 8.22 把四因子乘积归一到 0–10 的尺度。
    ES=8.22×0.85×0.77×0.85×0.85≈3.9\text{ES} = 8.22 \times 0.85 \times 0.77 \times 0.85 \times 0.85 \approx 3.9

影响与作用域

分诊的第二步是评估“伤得有多重”:是擦破皮,还是大出血?CVSS 用三个维度衡量漏洞对系统造成的伤害——机密性(C)对应“病人的隐私信息有没有泄露”,完整性(I)对应“身体的档案数据有没有被篡改”,可用性(A)对应“人还能不能正常行动”。每个维度只有三档:高(0.56)、低(0.22)、无(0.00)。

三个维度并非简单相加,而是用“概率补集”的方式组合:先把“三个维度都没被破坏”的概率乘出来,再用 1 减去它,得到“至少破坏了一个维度”的整体影响。这个中间量叫影响子分数(ISS)。随后乘以系数 6.42,把影响归一到 0–10 尺度。注意,这只是作用域不变(S:U)时的算法——如果作用域改变(S:C),公式的系数会不同,我们留到“分数计算流程”一节再说。

回到急诊室:一个病人如果只是脚踝扭伤(可用性轻微受损),另一个病人是内脏出血加意识模糊(三性全高),分诊护士闭着眼也知道后者要进抢救室。CVSS 里的 Impact 越大,就相当于病人离抢救室越近。

Impact=6.42×(1−(1−C)(1−I)(1−A))\text{Impact} = 6.42 \times \Bigl(1 - (1-\text{C})(1-\text{I})(1-\text{A})\Bigr)
  1. 三性取值机密性、完整性、可用性各自取高、低、无三档权重。
    C, I, A∈{0.56, 0.22, 0.00}\text{C},\,\text{I},\,\text{A} \in \{0.56,\,0.22,\,0.00\}
  2. 缺口乘积计算“三性都未被破坏”的剩余概率。
    (1−C)(1−I)(1−A)(1-\text{C})(1-\text{I})(1-\text{A})
  3. ISS 补集1 减去剩余概率,得到至少破坏一个维度的整体影响。
    ISS=1−(1−C)(1−I)(1−A)\text{ISS} = 1 - (1-\text{C})(1-\text{I})(1-\text{A})
  4. 系数放大6.42 把 0 到 1 的 ISS 归一到 0–10 分尺度。
    Impact=6.42×ISS\text{Impact} = 6.42 \times \text{ISS}

时间与环境指标

分诊完成后,病情不会静止。护士每隔一段时间会重新评估:社区里是不是已经有人得了同样的病?特效药(补丁)上市了吗?当初的诊断结论可靠吗?CVSS 的时间指标组正是这套“动态复查”——利用代码成熟度(E)衡量攻击代码是否已经公开甚至武器化,修复缓解级别(RL)看官方补丁、临时方案是否存在,报告置信度(RC)则反映漏洞细节被确认的程度。三者都是小于等于 1 的系数,乘上基础分,分数只会维持或下降。

环境指标组则是“因人而异”的定制:同样是失去一根手指,对钢琴家和普通人的意义完全不同。CR、IR、AR 让你声明组织对机密性、完整性、可用性的重视程度(低 0.5、中 1.0、高 1.5),还可通过 MAV、MAC 等“修改后的基础指标”直接覆盖默认评估。时间分数与环境分数的计算骨架是一致的:

环境指标的修订本质上是“换一把更适合你组织的尺子”:对银行来说,数据泄露(C)比服务中断(A)更致命,于是把 CR 调高、AR 调低,同一个漏洞在银行和游戏公司手里会得到不同的最终分。

时间分数=Roundup(基础分×E×RL×RC)\text{时间分数} = \text{Roundup}\bigl(\text{基础分} \times E \times RL \times RC\bigr)
  1. 利用代码成熟度 E从未证实到已被武器化,权重逐级接近 1。
    E∈{0.91, 0.94, 0.97, 1.00}E \in \{0.91,\,0.94,\,0.97,\,1.00\}
  2. 修复缓解级别 RL官方补丁权重最低,完全无缓解则取 1.0。
    RL∈{0.95, 0.96, 0.97, 1.00}RL \in \{0.95,\,0.96,\,0.97,\,1.00\}
  3. 报告置信度 RC漏洞报告越被确认,分数越接近原值。
    RC∈{0.92, 0.96, 1.00}RC \in \{0.92,\,0.96,\,1.00\}
  4. 连乘取整三因子连乘后向上取整到一位小数。
    时间分数=Roundup(8.0×0.97×0.95×1.00)=7.4\text{时间分数} = \text{Roundup}(8.0 \times 0.97 \times 0.95 \times 1.00) = 7.4

向量字符串解析

分诊护士给每位病人系上的手环写满了缩写:红标、胸痛、5 分钟前。旁人看着像密码,护士们却能在三秒内读完关键信息——因为格式是固定统一的。CVSS 的向量字符串就是漏洞的“分诊手环”:一段由斜杠分隔的字段串,每个字段是“指标:取值”的缩写对,按固定顺序排列。

读向量的规则只有两条:从左到右按约定顺序读,每个字段的第一个字母代表指标,冒号后是该指标的档位。基础向量固定为版本号 + AV、AC、PR、UI、S、C、I、A 八个字段;后面还可以追加时间组(E、RL、RC)和环境组(CR、IR、AR、MAV 等)。下面这条是经典的“远程代码执行”向量,拆开来看每个字段都不神秘:

学会读向量字符串,就像学会看护士手环:一眼扫过“A 网 B 密 C 高 D 低”,漏洞画像已经浮现在眼前。这也是为什么各大漏洞平台都直接用向量字符串交换信息——它比一长段文字描述更精确、更省空间。

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H\text{CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H}
  1. 版本前缀声明评分版本,v3.1 与旧版不能直接混比。
    CVSS:3.1\text{CVSS:3.1}
  2. 攻击向量与复杂度AV:N 表示可经网络远程利用,AC:L 表示门槛低。
    AV:N/AC:L\text{AV:N}/\text{AC:L}
  3. 权限与交互PR:N 表示无需任何权限,UI:N 表示无需用户配合。
    PR:N/UI:N\text{PR:N}/\text{UI:N}
  4. 作用域S:U 表示影响被限制在同一安全边界内。
    S:U\text{S:U}
  5. 三性影响C:H/I:H/A:H 表示机密性、完整性、可用性均为高损害。
    C:H/I:H/A:H\text{C:H}/\text{I:H}/\text{A:H}
  6. 顺序规则基础组固定按 AV→AC→PR→UI→S→C→I→A 排列,时间、环境组后缀同理。
    ⋯/E:□/RL:□/RC:□/CR:□/⋯\cdots/\text{E}:\square/\text{RL}:\square/\text{RC}:\square/\text{CR}:\square/\cdots

分数计算流程

现在把前面所有零件组装起来。基础分计算的路径是:先算影响子分数(ISS)与利用难度(ES),再按作用域选择合并公式。作用域不变(S:U)时,影响与利用难度直接相加;作用域改变(S:C)时,说明漏洞能冲出被攻击组件的安全边界波及他处,需要乘上 1.08 的放大系数,同时权限权重也要换成更高档位。最后与 10 取最小值,再向上取整到一位小数——这就是 CVSS 的 Roundup 规则,它保证分数只会被“多报”而不会被“抹零”。

算出的分数再映射到严重度等级:0.0 为 None,0.1–3.9 为 Low,4.0–6.9 为 Medium,7.0–8.9 为 High,9.0–10.0 为 Critical。以日志泄露类漏洞为例,AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N 算出基础分约 5.8,属于 Medium;而远程代码执行的 9.8 分直接跨入 Critical——急诊室里,一个标着“红色危重”的病人和一个标着“黄色普通”的病人,命运从此分岔。

Base=Roundup(min⁡(Impact+ES, 10))(当 S=U)\text{Base} = \text{Roundup}\Bigl(\min\bigl(\text{Impact} + \text{ES},\, 10\bigr)\Bigr) \quad (\text{当 } S=\text{U})
Base=Roundup(min⁡(1.08×(Impact+ES), 10))(当 S=C)\text{Base} = \text{Roundup}\Bigl(\min\bigl(1.08 \times (\text{Impact} + \text{ES}),\, 10\bigr)\Bigr) \quad (\text{当 } S=\text{C})
  1. 判断作用域S:U 走直加分支,S:C 走放大分支。
    S∈{U, C}S \in \{\text{U},\,\text{C}\}
  2. 合并子分数把影响与利用难度相加(S:C 时乘 1.08)。
    Impact+ES或1.08×(Impact+ES)\text{Impact} + \text{ES} \quad \text{或} \quad 1.08 \times (\text{Impact} + \text{ES})
  3. 封顶与 10 取最小值,防止分数越界。
    min⁡(⋅, 10)\min(\cdot,\, 10)
  4. 向上取整Roundup 到一位小数,分数只升不降。
    Roundup(9.76)=9.8\text{Roundup}(9.76) = 9.8

修复优先级实践

分诊标签不是治疗方案的终点。一个 80 岁的老爷爷得了普通感冒也值得高度警惕,而一个年轻运动员的轻微骨折可能只需回家静养——分诊护士必须结合病人的年龄、病史、家庭情况做最终判断。安全团队亦然:CVSS 分数只是“漏洞自身的受伤程度”,真正的修复优先级还要乘以资产关键度和暴露程度。

这就是优先级矩阵的由来:把严重度等级(0–10 分档)、资产关键度(核心业务系统还是边缘工具)、暴露程度(是否公网可达、是否正被在野利用)三者相乘,得到“先救谁”的答案。SLA 也随之分层:Critical 且高价值资产 24 小时内修复,High 一周内,Medium 一个月内,Low 纳入常规排期。资源分配同样遵循这条链——最贵的专家和最快的应急响应,永远留给矩阵右上角的组合。

最后要记住:CVSS 是“分诊工具”而不是“主治医生”。它给出的是标准化的受伤程度,不能替你回答“这台服务器值不值得通宵修复”。把分数当作输入,把业务上下文当作约束,才能从“会打分的工程师”成长为“会做决策的安全负责人”。

修复优先级=严重度等级×资产关键度×暴露程度\text{修复优先级} = \text{严重度等级} \times \text{资产关键度} \times \text{暴露程度}
  1. 严重度等级由 CVSS 分数映射到 None/Low/Medium/High/Critical 五档。
    等级=g(Score)\text{等级} = g(\text{Score})
  2. 资产关键度按业务价值给资产定级,核心系统权重更高。
    资产关键度∈{低, 中, 高}\text{资产关键度} \in \{\text{低},\,\text{中},\,\text{高}\}
  3. 暴露程度公网可达、已有在野利用会显著抬高优先级。
    暴露程度=可达性×利用活跃度\text{暴露程度} = \text{可达性} \times \text{利用活跃度}
  4. 决策输出综合分映射到 SLA 时间窗口与资源投入档位。
    SLA=h(修复优先级)\text{SLA} = h(\text{修复优先级})

AI 应用场景

AI 漏洞扫描器的自动评分与分诊

阶段:安全测试结果生成与评估

解决的问题:传统渗透测试依赖人工阅读漏洞描述并打分,速度慢、标准不一;同一漏洞不同测试员可能打出相差 3 分的成绩。AI 安全 agent 检测到漏洞后,可自动生成 CVSS 向量字符串并计算基础分,再结合资产清单形成“红黄绿”分诊队列,把人工评估时间从小时级压缩到秒级。

具体案例:某 LLM 驱动的自动化渗透测试平台在扫描 Web 应用时发现一处 SQL 注入,自动对照利用路径生成向量 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:L,计算出 8.2 分(High),并依据资产库中“订单库为高关键资产”自动建议 7 天内修复、安排两名资深工程师跟进。

威胁情报驱动的动态时间分数修订

阶段:风险评估与威胁情报分析

解决的问题:静态 CVSS 基础分不随“是否已被公开利用”变化,导致修复决策滞后。安全团队靠人工刷新 E、RL、RC 因子不现实。AI 持续抓取 NVD、厂商公告和暗网情报,自动更新每个漏洞的时间分数,让“正在被武器化利用”的漏洞分数自动跃升、优先级自动前移。

具体案例:某安全运营中心的 AI Copilot 每小时读取威胁情报源,发现内网某中间件漏洞对应 PoC 已在 GitHub 公开,自动将 E 从 0.91 提升到 0.97,时间分数从 6.8 涨到 7.3,触发 High 级 SLA 告警并推送给值班工程师。

Python 演示

python88 行
# -*- coding: utf-8 -*-"""CVSS v3.1 向量解析与基础分计算(教学简化版)"""import math  class CvssCalculator:    """解析 CVSS v3.1 向量字符串,计算基础分与严重度等级。"""     AV_VALUES = {'N': 0.85, 'A': 0.62, 'L': 0.55, 'P': 0.2}    AC_VALUES = {'L': 0.77, 'H': 0.44}    PR_VALUES = {'N': 0.85, 'L': 0.62, 'H': 0.27}    PR_SCOPE_VALUES = {'L': 0.68, 'H': 0.5}    UI_VALUES = {'N': 0.85, 'R': 0.62}    IMPACT_VALUES = {'H': 0.56, 'L': 0.22, 'N': 0.0}     def __init__(self, vector):        self.vector = vector        self.metrics = self._parse(vector)     def _parse(self, vector):        """把 'CVSS:3.1/AV:N/AC:L/...' 拆成指标字典。"""        result = {}        for segment in vector.strip().split('/')[1:]:            key, value = segment.split(':')            result[key] = value        return result     def exploitability_score(self):        """利用难度子分数 ES = 8.22 * AV * AC * PR * UI。"""        av = self.AV_VALUES[self.metrics['AV']]        ac = self.AC_VALUES[self.metrics['AC']]        pr_key = self.metrics['PR']        if self.metrics['S'] == 'C':            pr = self.PR_SCOPE_VALUES.get(pr_key, 0.27)        else:            pr = self.PR_VALUES[pr_key]        ui = self.UI_VALUES[self.metrics['UI']]        return 8.22 * av * ac * pr * ui     def impact_iss(self):        """影响子分数 ISS = 1 - (1-C)(1-I)(1-A)。"""        c = self.IMPACT_VALUES[self.metrics['C']]        i = self.IMPACT_VALUES[self.metrics['I']]        a = self.IMPACT_VALUES[self.metrics['A']]        return 1 - (1 - c) * (1 - i) * (1 - a)     def impact_score(self):        """作用域不变时 Impact = 6.42 * ISS。"""        return 6.42 * self.impact_iss()     @staticmethod    def roundup(value):        """CVSS 向上取整到一位小数。"""        return math.ceil(value * 10) / 10     def base_score(self):        """基础分 = Roundup(min(Impact + ES, 10))。"""        if self.impact_iss() <= 0:            return 0.0        total = self.impact_score() + self.exploitability_score()        return self.roundup(min(total, 10))     def severity(self):        """严重度等级映射。"""        score = self.base_score()        if score == 0.0:            return 'None'        if score < 4.0:            return 'Low'        if score < 7.0:            return 'Medium'        if score < 9.0:            return 'High'        return 'Critical'  if __name__ == '__main__':    vectors = [        'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H',        'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N',        'CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:H/I:N/A:N',    ]    for v in vectors:        calc = CvssCalculator(v)        score = calc.base_score()        print(v)        print('  ISS=%.3f ES=%.3f 基础分=%.1f 等级=%s' % (            calc.impact_iss(), calc.exploitability_score(), score, calc.severity()))
目的:把一段 CVSS 向量字符串解析成指标字典,自动计算基础分与严重度等级,模拟安全平台对漏洞的自动打分。
  1. for segment in vector.strip().split('/')[1:]用斜杠切分并跳过开头的版本号,逐段读取“指标:取值”。
  2. key, value = segment.split(':')冒号左边是两字母指标名,右边是档位缩写,存入字典。
  3. pr = self.PR_SCOPE_VALUES.get(pr_key, 0.27)作用域改变时权限权重换成更高档位。
  4. return 8.22 * av * ac * pr * ui连乘得到 0–10 尺度的利用难度分。
  5. if self.impact_iss() <= 0: return 0.0三性全无影响时,基础分直接归零。
  6. return self.roundup(min(total, 10))与 10 取小后向上取整到一位小数。
  7. calc.severity()由基础分映射到 None/Low/Medium/High/Critical 等级。

常见误区

误区看到 9.8 分就觉得“这个漏洞明天就要被打穿”,立刻全员通宵应急。

正解CVSS 衡量的是“一旦被利用会造成多严重的损害 + 利用难度有多大”,并不表示实际武器化程度。一个 9.8 分的漏洞可能只有理论 PoC 从未被使用,而一个 5 分的漏洞可能正在被大规模在野利用。要判断真实威胁,必须结合时间指标的 E 因子(利用代码成熟度)和威胁情报,而不是只看静态基础分。

为何常见:分数是单一数字,视觉冲击力强,人脑天然容易把“严重”直接等同于“紧迫”。

误区把漏洞列表按分数从高到低排个序,照着一个个修就万事大吉。

正解基础分只描述漏洞自身,完全没描述业务。一个无人访问的内部测试系统上的 9.8 分漏洞,优先级应当低于暴露在公网核心订单库上的 7.5 分漏洞。正确做法是构建优先级矩阵:分数 × 资产关键度 × 暴露程度,再映射到 SLA。

为何常见:按分数排序最省力,且“数字越高越危险”的直觉在日常场景里经常成立,让人忽略了业务上下文。

误区看到向量里 S:C,以为 C 代表 Confidentiality 或 Certificate,误读为“系统安全/通信加密”。

正解S 是作用域(Scope),C 是 Changed(已改变)。S:C 表示漏洞的影响范围能够冲出被攻击组件的安全边界,波及同一授权边界外的其他组件,属于“伤情会传染”的危险信号,会放大基础分。

为何常见:缩写的两个字母太容易让人望文生义,尤其 C 在别处刚见过是“机密性”。

误区拿着 v2 报告的 7.5 分和 v3.1 的 7.5 分对比,认为两者严重度相同。

正解v2 与 v3.1 的评分哲学不同:v3.1 引入了作用域概念,权限权重、影响系数都变了,同一漏洞在两个版本下分数可能差出 2 分以上。比较时先看向量字符串版本号,跨版本对比需要先换算或统一版本。

为何常见:两个版本都输出 0–10 浮点数,看起来是同一把尺子,容易忽略刻度本身已经换过。

面试题

Q1. CVSS v3.1 最终输出的分数范围是?

单选题 · easy

  • A.0 到 5 之间的浮点数
  • B.0 到 10 之间的浮点数← 正确答案
  • C.0 到 100 之间的整数
  • D.1 到 10 之间的整数

答案:B。CVSS 的输出是一个 0 到 10 的浮点数,0 表示无风险,10 表示最严重。它把漏洞的严重程度归一到一条标准刻度上,方便跨系统比较。A、C、D 的区间都不符合规范。

Q2. 向量字符串 "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H" 中 C:H 表示?

单选题 · easy

  • A.机密性影响为高← 正确答案
  • B.完整性影响为高
  • C.可用性影响为高
  • D.攻击复杂度为高

答案:A。C 是 Confidentiality(机密性),H 是 High(高)。C:H 表示漏洞对机密性的破坏程度为高,即可能造成严重的敏感数据泄露。I:A 才是完整性,A:H 才是可用性,AC 才是攻击复杂度。

Q3. CVSS 三个度量组中,哪一组的评分会随漏洞被公开利用、补丁发布而动态变化?

单选题 · mid

  • A.基础指标组
  • B.时间指标组← 正确答案
  • C.环境指标组
  • D.所有度量组

答案:B。时间指标组(E、RL、RC)专门记录利用代码成熟度、修复缓解级别和报告置信度,这些情报随时间变化,因此分数会动态调整。基础指标是漏洞固有属性基本不变,环境指标由组织自定义但不会随利用情况自动变化。

Q4. 某个漏洞基础分为 8.0,时间因子 E=0.97、RL=0.95、RC=1.0,其时间分数约为?

单选题 · mid

  • A.7.0
  • B.7.4← 正确答案
  • C.7.8
  • D.8.0

答案:B。时间分数 = Roundup(8.0 × 0.97 × 0.95 × 1.0) = Roundup(7.372) = 7.4。CVSS 的取整规则是向上取整到一位小数,所以 7.372 进为 7.4 而非 7.3。

Q5. 关于作用域 S,下列说法正确的是?

单选题 · hard

  • A.S:C 表示漏洞无法影响授权边界外组件
  • B.S:U 表示漏洞影响范围超出安全边界
  • C.S:C 时使用系数 1.08 且权限权重取更高档值← 正确答案
  • D.作用域只在环境指标中参与计算

答案:C。S:C(Changed)表示影响能冲出安全边界,S:U(Unchanged)表示不越界,A、B 说反了。作用域属于基础指标组,直接影响基础分计算,D 错误。S:C 时基础分公式乘 1.08 放大,且 PR 权重改用 0.68/0.50 的更高档值。

Q6. 下列属于基础指标组的是?

多选题 · mid

  • A.攻击向量 AV← 正确答案
  • B.利用代码成熟度 E
  • C.所需权限 PR← 正确答案
  • D.报告置信度 RC

答案:AC。基础指标组包含 AV、AC、PR、UI、S、C、I、A,描述漏洞固有属性。E 和 RC 属于时间指标组,分别描述利用代码成熟度和报告置信度,会随时间变化。

Q7. 时间指标组包含哪些因子?

多选题 · mid

  • A.利用代码成熟度 E← 正确答案
  • B.修复缓解级别 RL← 正确答案
  • C.报告置信度 RC← 正确答案
  • D.用户交互 UI

答案:ABC。时间指标组由 E、RL、RC 三个因子组成,反映漏洞被利用情报的演变。UI(用户交互)属于基础指标组,描述利用漏洞是否需要受害者配合。

Q8. 严重度等级 High 对应的分数区间是?

单选题 · easy

  • A.0.1 到 3.9
  • B.4.0 到 6.9
  • C.7.0 到 8.9← 正确答案
  • D.9.0 到 10.0

答案:C。CVSS v3.1 的等级区间为:0.0 为 None,0.1–3.9 为 Low,4.0–6.9 为 Medium,7.0–8.9 为 High,9.0–10.0 为 Critical。7.0 是 High 的起点,9.0 及以上才进入 Critical。

Q9. 某漏洞向量为 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H,其基础分约为?

单选题 · hard

  • A.7.5
  • B.8.8
  • C.9.8← 正确答案
  • D.10.0

答案:C。ISS = 1−(1−0.56)³ ≈ 0.915,Impact = 6.42×0.915 ≈ 5.87;ES = 8.22×0.85×0.77×0.85×0.85 ≈ 3.89;Base = Roundup(min(5.87+3.89, 10)) = Roundup(9.76) = 9.8。这是典型的远程代码执行类漏洞,属于 Critical。

Q10. 关于 CVSS 在修复优先级中的使用,正确的认知是?

多选题 · hard

  • A.CVSS 分数应与资产关键度结合← 正确答案
  • B.分数越高就应先修且只修它
  • C.时间指标可反映在野利用情况← 正确答案
  • D.环境指标可定制组织相对风险← 正确答案

答案:ACD。修复优先级 = 严重度等级 × 资产关键度 × 暴露程度,A 正确。时间指标的 E 因子反映利用代码成熟度,可辅助判断在野利用风险,C 正确。环境指标通过 CR/IR/AR 定制组织对三性的重视程度,D 正确。只按分数一项排期、忽略上下文是常见误区,B 错误。