mcpField
C
cvss-scoring

cvss-scoring

github.com/trailofbits安全8.2k230 次安装2 天前更新
代码仓库

关于 cvss-scoring

cvss-scoring 可将纯文本漏洞描述转换为 CVSS v4.0 向量,并生成带该向量的 FIRST.org 计算器链接。它面向安全审计和漏洞分级,不计算数值分数;可利用性信息不清时会先要求澄清。

主要功能

  1. 01提取安全相关事实
  2. 02评估 CVSS v4.0 基础指标
  3. 03标记假设的影响值
  4. 04按依据纳入可选指标
  5. 05生成附带向量的计算器链接
  6. 06拒绝非漏洞描述

适用场景

  1. 01为审计发现生成向量
  2. 02比较多个漏洞的相对严重程度
  3. 03评分前澄清缺失的可利用性信息

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trailofbits/skills --skill cvss-scoring

安装后在 Claude Code 中输入/cvss-scoring确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.calcifier/
recipe.py
references/
examples.md
metrics.md

详细介绍

CVSS v4.0 向量评分

根据纯文本漏洞描述生成 CVSS v4.0 向量字符串,并附上已应用该向量的 FIRST.org 计算器链接。数值评分以该计算器为准。请勿尝试计算数值评分。

适用场景

  • 为安全审计报告中的漏洞发现评分
  • 根据错误描述生成 CVSS v4.0 向量
  • 比较多个漏洞发现的相对严重程度
  • 用户询问“这个的 CVSS 是多少?”或“给这个漏洞评分”

不适用场景

  • 明确要求使用 CVSS v3.1(请改用组织的 CVSS v3.1 评分指南)
  • 描述过于模糊,无法评估任何指标(请先要求澄清)
  • 输入内容并未描述可利用的安全弱点(请参阅下文的输入验证)
  • 评估风险(CVSS 衡量固有严重程度,而非特定部署环境下的风险)
  • 计算数值评分(请引导用户使用 FIRST.org 计算器)

输入验证

在评估任何指标之前,先运行以下检查。如果任何一项检查未通过,请先处理该问题,再继续。

1. 这是一个漏洞吗? CVSS 向量仅对可利用的安全弱点有意义。如果输入描述的是代码质量问题、设计方面的顾虑,或没有安全影响的发现,请拒绝并回复:

此描述似乎没有说明可利用的漏洞。CVSS 用于衡量安全弱点的严重程度;不适用于 {category}。如果你认为存在可利用的影响,请从攻击者能力的角度重新描述,并重新运行。

不得为了满足请求而捏造指标。

2. 输入是否使用了 CVSS v3.1 术语? 留意 Scope(现已移除)、User Interaction: Required,或未加前缀的 CIA 三要素。如果检测到这些术语,请在输出中明确指出版本不匹配,然后再进行转换:

输入使用了 CVSS v3.1 术语;现将其转换为 CVSS v4.0 语义。已应用以下映射:{list}。

不得在不说明的情况下转换。

应拒绝的错误推理

以下是常见的评分错误。遇到这些推理时应予以拒绝:

  • “可通过网络访问就意味着 AV:N” —— AV 衡量的是攻击者能够发起攻击的最远距离,而不是组件是否位于网络上。如果攻击者需要本地 shell 访问权限,那么针对网络服务的权限提升仍然是 AV:L。
  • “问题很严重,所以所有影响都是 High” —— 必须分别论证每项影响指标(VC/VI/VA/SC/SI/SA)。能够执行代码的 RCE,其 VI:H(攻击者可以修改任意数据/代码),但不一定是 VC:H(除非数据确实被暴露)或 VA:H(除非攻击者可以使服务崩溃或拒绝服务)。
  • “依赖项就是后续系统” —— 组件关系不能定义系统边界。专用数据库或使用了易受攻击库的应用程序,可能都属于同一个易受攻击系统;在 SC/SI/SA 中再次计入这些影响会夸大严重性。
  • “没有提及后续系统,就意味着 SC/SI/SA 都是 None” —— 应确定易受攻击系统的边界,并考虑其外部可能受到的影响。如果边界或外部影响不明确,应说明不确定性,并用 [ASSUMED] 标记所选值。
  • “不确定时默认最坏情况” —— CVSS v4.0 要求的是合理的最坏情况,而不是绝对的最坏情况。不确定时,应选择最有依据的值,并用 [ASSUMED] 标记。
  • “有前置条件,所以 AC:H” —— 在 v4.0 中,AC 衡量的是规避增强安全机制(ASLR、DEP)的难度。特定配置或竞态条件等前置条件应归入 AT,而不是 AC。这是从 v3.1 迁移到 v4.0 时最常见的错误。
  • “UI:R 对应 UI:P 或 UI:A” —— v4.0 将 v3.1 中的 Required 拆分为 Passive 和 Active。Passive 指非自愿交互(例如浏览网页)。Active 指用户必须有意识地执行特定操作(例如安装软件、更改设置、点击确认警告)。不要默认选择 Active。

输入处理

输入是描述漏洞的纯文本,可能包含严重性、利用难度、实现细节、利用场景和修复建议。

在为任何指标评分之前,提取并列出所有与安全相关的事实:

  1. 易受攻击的组件是什么?(软件、库、服务、设备)
  2. 如何访问该组件?(网络服务、本地二进制文件、物理设备、邻近网络)
  3. 攻击者需要什么权限?(未认证、用户级、管理员)
  4. 攻击者能实现什么?(读取数据、修改数据、执行代码、使服务崩溃、提升权限)
  5. 易受攻击系统的边界是什么,包括为其功能提供支持的组件?该边界之外的系统是否受到影响?
  6. 利用是否有前置条件或条件?(特定配置、竞态条件、处于通信路径上)
  7. 是否需要用户交互?如果需要,属于哪种类型?
  8. 是否有关于漏洞利用成熟度的信息?(有 PoC、已遭活跃利用、尚未报告)

提取事实可避免被描述中的情绪化措辞影响判断。

如果无法根据描述有把握地确定任何可利用性指标(AV、AC、AT、PR、UI),请先向用户询问上述事实提取问题,再继续评分。这五项指标对大多数评分影响最大,也是错误猜测影响最严重的地方。不要默默地默认某个值并标记。

如果影响指标(VC/VI/VA/SC/SI/SA)存在歧义,应说明歧义,解释哪些值有可能成立及其原因,选择最有依据的默认值,并在输出中用 [ASSUMED] 标记。

评分流程

严格按照以下顺序评估指标。对于每项指标,请阅读 指标参考 中的详细定义。

阶段 1:可利用性指标

根据提取的事实评估以下 5 项指标:

1. 攻击向量(AV): N / A / L / P

  • 网络:可通过网络协议栈(HTTP、TCP、DNS)远程利用
  • 相邻:需要位于同一局域网、使用蓝牙或 WiFi,或处于同一逻辑子网
  • 本地:需要本地访问权限(Shell、文件投放、终端模拟)
  • 物理:需要亲自接触或操作设备

2. 攻击复杂度(AC): L / H

  • 低(默认):无需绕过安全机制
  • 高:必须绕过 ASLR、DEP,或获取特定于目标的机密
  • 注意:竞争条件和特定配置归入 AT,而非 AC(v4.0 相较于 v3.1 的变更)

3. 攻击要求(AT): N / P

  • 无:无需特殊部署条件
  • 存在:需要特定配置、竞争条件、处于链路中间位置,或其他依赖部署的条件
  • 此指标在 v4.0 中是新增的——它涵盖了 v3.1 中归入 AC 的条件

4. 所需权限(PR): N / L / H

  • 无:无需身份验证
  • 低:基本用户帐户
  • 高:管理员或提升的权限

5. 用户交互(UI): N / P / A

  • 无:无需用户采取任何操作
  • 被动:用户执行非自主操作(访问页面、收到消息)
  • 主动:用户必须有意识地执行特定操作(安装软件、点击警告以继续、修改设置)
  • v4.0 将 v3.1 的“必需”拆分为“被动”和“主动”——请谨慎选择
阶段 2:受影响系统的影响

这些指标衡量漏洞所在系统内部的影响。使用 FIRST 的关注系统模型确定其边界:具有连贯功能和一组安全策略的计算逻辑。专为该系统提供服务而设计的组件属于系统内部,例如专用数据库,或嵌入式库及其调用应用程序。对这些组件的影响应计入 VC/VI/VA。

6. 机密性(VC): H / L / N

  • 高:完全丧失——受影响系统中的所有数据都暴露
  • 低:部分数据暴露,但攻击者无法控制暴露的数据或数据量
  • 无:无机密性影响

7. 完整性(VI): H / L / N

  • 高:完全丧失——攻击者可以修改受影响系统中的任何数据
  • 低:可以进行有限修改
  • 无:无完整性影响

8. 可用性(VA): H / L / N

  • 高:持续或永久完全丧失,或部分丧失并造成直接且严重的后果(例如,阻止新连接,同时现有连接仍可用)
  • 低:性能降低或可用性中断,但未造成直接且严重的后果;反复利用漏洞也无法完全拒绝服务
  • 无:无可用性影响
阶段 3:后续系统影响

这些指标衡量受影响系统边界之外的系统所受影响。此阶段取代了 v3.1 的范围指标。

仅有依赖关系、数据流或信任关系,并不意味着某个组件就是后续系统。请识别边界外的独立系统,以及漏洞利用对该系统造成的影响;不要在 SC/SI/SA 中重复计算同一项系统内影响。受 Web 应用 XSS 影响的用户浏览器,或因 Hypervisor 漏洞而遭入侵的其他来宾系统,都可以是后续系统。

9. 后续系统机密性(SC): H / L / N

10. 后续系统完整性(SI): H / L / N

11. 后续系统可用性(SA): H / L / N

如果描述未指出任何后续系统影响,则默认设为 N,但须标记为 [ASSUMED]。后续影响不为 N 的常见情况:

  • XSS:SC:L、SI:L(浏览器是后续系统)。UI 取决于常规浏览是否会触发有效载荷(P),还是用户必须导航到攻击者制作的资源(A)——与存储型还是反射型无关。
  • 虚拟机逃逸:SC:H、SI:H、SA:H(主机/其他虚拟机是后续系统)
  • DNS 污染:SI:H、SA:H(下游解析器是后续系统)
  • 身份验证服务器遭入侵:请考虑受影响的依赖服务位于受影响系统边界外时的 SC:H、SI:H
阶段 4:可选指标

威胁——利用成熟度(E): 仅当描述中提供了相关证据时才纳入。

  • 已遭攻击(A):已知存在活跃利用,或已有漏洞利用工具包
  • 概念验证(P):存在公开的 PoC 代码,但没有已知攻击
  • 未报告(U):没有公开的 PoC,也没有已知攻击
  • 未定义(X):没有可用信息(默认情况——从向量中省略)

环境指标: 仅当源描述提供相关背景时才纳入,即审计人员说明了已部署环境的 CIA 要求(CR/IR/AR),或描述了会改变基础指标的补偿控制(修改后的基础指标:MAV/MAC/MAT/MPR/MUI/MVC/MVI/MVA/MSC/MSI/MSA)。否则省略,并注明:“已省略环境指标——如果目标环境的 CIA 要求不同于默认值,请添加。”

补充指标: 仅当源描述提供相关背景时才纳入,即发现项描述了安全影响(S)、恢复特征(R)或自动化潜力(AU)。这些指标仅供参考,不影响数值评分。否则省略,并注明:“已省略补充指标——如有需要,可添加以便沟通。”

纳入这些指标时,请参阅下方的向量字符串部分,了解规范顺序。

输出格式

分三部分呈现输出:

第 1 部分:指标依据表
| Metric | Value | Justification |
|--------|-------|---------------|
| AV     | N     | Exploitable via HTTP API without local access |
| AC     | L     | No security mechanisms to evade |
| AT     | N     | No deployment-specific conditions required |
| PR     | N     | Unauthenticated endpoint |
| UI     | N     | No user interaction needed |
| VC     | H     | Attacker gains read access to all application data |
| VI     | H     | Attacker can modify arbitrary records |
| VA     | N     | No availability impact observed |
| SC     | N     | No evidence of downstream system impact [ASSUMED] |
| SI     | N     | No evidence of downstream system impact [ASSUMED] |
| SA     | N     | No evidence of downstream system impact [ASSUMED] |

对任何假设值标注 [ASSUMED]。

第 2 部分:向量字符串
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

格式:使用 CVSS:4.0/ 前缀,后接按规范顺序排列的全部 11 个基础指标(AV/AC/AT/PR/UI/VC/VI/VA/SC/SI/SA),并以 / 分隔。仅当对可选指标评分时才追加:首先是 E,然后是按规范顺序排列的环境指标(CR/IR/AR/MAV/MAC/MAT/MPR/MUI/MVC/MVI/MVA/MSC/MSI/MSA),最后是补充指标(S/AU/R/V/RE/U)。

在向量下方立即输出计算器链接,并将向量作为 URL 片段,这样用户只需点击一次即可获得数值评分:

https://www.first.org/cvss/calculator/4.0#CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

在 # 后原样追加向量——不要进行 URL 编码,因为 : 和 / 在片段中都合法。计算器加载时会读取该片段,并预先选中每个指标按钮。

只有向量格式正确时,该链接才有效:计算器要求使用字面值 CVSS:4.0 前缀,并会拒绝顺序不符合规范的指标,且不会提示地让相应按钮保持未选中状态。这与上文所述的顺序规则相同,因此符合该规则的向量会生成可用链接。

第 3 部分:校准检查

呈现最终向量前,请阅读示例参考,并找出 2-3 种最相似的漏洞类型。将你的向量与这些校准锚点进行比较。如果你的向量与相似示例存在显著差异,请:

  • 说明差异合理的原因(该漏洞具有示例中没有的特定特征);或
  • 调整看起来校准不当的指标

说明你比较了哪些示例,以及向量是否一致。

自检清单

呈现最终输出前,请确认:

  • 输入描述的是可利用的安全弱点(而非代码质量、设计或信息类发现项)
  • 如果输入中出现任何 CVSS v3.1 术语,已在输出中翻译前说明
  • 向量中包含全部 11 个基础指标
  • 每个指标均使用有效的 CVSS v4.0 值(而非 v3.1 值——例如,UI 使用 N/P/A,而非 N/R;没有 Scope 指标)
  • 向量字符串遵循指标规范顺序(基础指标,然后是 E,再然后是环境指标,最后是补充指标)
  • 每个指标都有源描述中的文字依据
  • 后续系统指标(SC/SI/SA)未与易受攻击系统指标(VC/VI/VA)混淆
  • AT 和 AC 未混为一谈(AT = 部署条件;AC = 规避安全机制)
  • 已对照示例完成校准检查
  • 有歧义的影响指标已标注 [ASSUMED];有歧义的可利用性指标已通过询问用户解决

计算器

数值评分来自官方计算器,Part 2 链接打开的计算器已应用该向量。请勿自行计算评分:CVSS v4.0 使用查找表算法(FIRST.org 上的 cvss_lookup.js),而非公式,因此手动推导的任何评分都只是猜测。

如果用户想使用未应用向量的纯计算器: https://www.first.org/cvss/calculator/4.0

评论

支持 Markdown