Skip to content

Mapping some CVSS vector elements to SSVC Technical Impact #195

Description

@j---

This is the calculator engineering aspects of #186

The document describes some equivalences or ways that CVSS vector string data can be used to inform SSVC decisions.
CVSSv3.1 is not ideal for this. See the discussion of CVSS in the md file md_src_files/082_relatedSystems.md or where that compiles in the PDF (# Related Vulnerability Management Systems).

My suggested logic for the Impact Metrics from CVSSv3.1 is as follows:
IF Scope = Changed
do nothing
ELIF Scope = Unchanged
THEN IF Confidentiality = High AND Integrity = High
DO Technical Impact set to Total
ELSE
DO Technical Impact set to Partial

This is not a perfect mapping, but I think it is a good start.
Since it is not perfect, we will have to think about the User Experience aspect of this. How do we want to expose what the system is doing to the user? How do we give the user enough information about it that they can override the automation if they so desire?

Activity

  1. changed the title [-]Pull CVSS vector data into SSVC calculator as appropriate[/-] [+]Mapping some CVSS 3.1 vector elements to SSVC Technical Impact[/+] on Feb 11, 2025
  2. changed the title [-]Mapping some CVSS 3.1 vector elements to SSVC Technical Impact[/-] [+]Mapping some CVSS vector elements to SSVC Technical Impact[/+] on Feb 11, 2025
  3. ahouseholder commented on Feb 11, 2025

    @ahouseholder
    Contributor

    We should adapt this for CVSS v4 at this point too.

  4. j--- commented on Mar 4, 2025

    @j---
    CollaboratorAuthor

    CVSSv4 makes it easier because you can remove the Scope ELIF and just us the vulnerable system C/I/A score.

    I was thinking about this, and I think we should also discuss whether we need to be careful of the CVSS guidance to score the change in access, whereas Technical Impact scores the end resulting access.

    So, concretely, CVSS (v2, v3, and v4) guidance is that if there are privileges required to exploit the vul (like read access to all files, let's just say for simplicity of example), and the end result is gaining write access to all files, then the CVSS score would be C:N/I:H because confidentiality didn't change based on privs already required. This would break my simple proposed logic.

    Within the CVSS vector itself, we could filter on PR:N to be able to use the simple logic. If there are privileges required and (vulnerable system) C or I or A is not High, then we don't know technical impact is not total and can't make a clear determination.

    I don't think the new Attack Requirements makes a difference to us here, and I don't think User Interaction makes a difference to us here, but I could be wrong.

  5. ahouseholder commented on Aug 13, 2025

    @ahouseholder
    Contributor

    Just a note that the new DecisionTable object gives us a vehicle to represent whatever mapping we eventually land on for this. #795

  6. self-assigned this
    on Feb 12, 2026
  7. sei-ahouseholder commented on Jun 18, 2026

    @sei-ahouseholder
    Contributor

    Based on recent conversations within the team, and what we already said in Information Sources, here's where I think we stand on this.

    Note

    This is only for CVSS v4 vector elements, although per Information Sources it would also apply to CVSS v3 with minor tweaks when Scope is unchanged

    row Privileges Required v1.0.1 (cvss) Confidentiality Impact to the Vulnerable System v3.0.0 (cvss) Integrity Impact to the Vulnerable System v3.0.0 (cvss) CI Both high C OR I high PR: N Technical Impact v1.0.0
    0 high none none FALSE FALSE FALSE partial
    1 low none none FALSE FALSE FALSE partial
    2 high low none FALSE FALSE FALSE partial
    3 high none low FALSE FALSE FALSE partial
    4 none none none FALSE FALSE TRUE partial
    5 low low none FALSE FALSE FALSE partial
    6 high high none FALSE TRUE FALSE partial
    7 low none low FALSE FALSE FALSE partial
    8 high low low FALSE FALSE FALSE partial
    9 high none high FALSE TRUE FALSE partial
    10 none low none FALSE FALSE TRUE partial
    11 low high none FALSE TRUE FALSE partial
    12 none none low FALSE FALSE TRUE partial
    13 low low low FALSE FALSE FALSE partial
    14 high high low FALSE TRUE FALSE partial
    15 low none high FALSE TRUE FALSE partial
    16 high low high FALSE TRUE FALSE partial
    17 none high none FALSE TRUE TRUE probably partial
    18 none low low FALSE FALSE TRUE partial
    19 low high low FALSE TRUE FALSE partial
    20 none none high FALSE TRUE TRUE probably partial
    21 low low high FALSE TRUE FALSE partial
    22 high high high TRUE TRUE FALSE total
    23 none high low FALSE TRUE TRUE probably partial
    24 none low high FALSE TRUE TRUE probably partial
    25 low high high TRUE TRUE FALSE total
    26 none high high TRUE TRUE TRUE total

    The remaining question is: what information would tilt probably partial toward total? Is there any existing singular decision point (or CVSS vector element) that would do that? Would we need a second decision table to discriminate just the probably partial rows with more information?

  8. sei-ahouseholder commented on Jun 18, 2026

    @sei-ahouseholder
    Contributor

    So as it currently stands, if we flip all the probably partials to partial, then Privileges Required is never relevant. So that means in order for us to justify keeping it in the decision table at all, at least one of the following rows must flip to total.

    row Privileges Required v1.0.1 (cvss) Confidentiality Impact to the Vulnerable System v3.0.0 (cvss) Integrity Impact to the Vulnerable System v3.0.0 (cvss) CI Both high C OR I high PR: N Technical Impact v1.0.0
    17 none high none FALSE TRUE TRUE probably partial
    20 none none high FALSE TRUE TRUE probably partial
    23 none high low FALSE TRUE TRUE probably partial
    24 none low high FALSE TRUE TRUE probably partial

    One obvious cut line (without adding another decision point to discriminate) would be "if one of CI is high and the other is low and if PR is none then technical impact is total, otherwise partial. That would flip rows 23 and 26 to total and rows 17 and 20 to partial. The resulting signal provided by Privileges Required will be fairly low because most of the information comes from C & I impacts, but at least it would contribute something to the decision table.

    Another possible cut line (again, not adding anything else) is "if Either C or I is high and PR is none then total otherwise partial. This would flip all four rows to total.

  9. sei-ahouseholder commented on Jun 18, 2026

    @sei-ahouseholder
    Contributor

    The next question: What other CVSS vector elements might possibly be relevant to differentiate here?

    I'll just walk through the whole vector:

    CVSS Vector Element Relevant? Comment
    Attack Vector ❌ How the vulnerability is reached doesn't address the impact to the system once exploited.
    Attack Complexity ❌ Difficult or not, the impact is a post-exploitation effect
    Attack Requirements ❌ Basically same answer as Attack Complexity
    Privileges Required ⚠️ Already under consideration, and the reason we're having this conversation
    User Interaction ❌ UI is, again, "on the way to the impact"
    Confidentiality Impact ✅ See existing documentation
    Integrity Impact ✅ See existing documentation
    Availability Impact ❌ See existing documentation, denial of service is partial

    None of the Threat or Environmental metrics say anything relevant to what happens on the system once exploitation occurs.

    Likewise, most of the Auxiliary metrics (Automatable, Provider Urgency, Recovery, or Value Density) are also irrelevant to the question of how much control an attacker gets.

    There might be room for Safety to factor in, but that's not clear to me at present.

  10. sei-ahouseholder commented on Jun 18, 2026

    @sei-ahouseholder
    Contributor

    Similarly, there aren't any other existing [SSVC decision points](https://certcc.github.io/SSVC/reference/decision_points/ in the SSVC namespace that are relevant to Technical Impact either.

    Conclusion: Outside of the "cut lines" mentioned in my earlier comment, there is no currently extant decision point to draw on to better discriminate the probably partial into total vs partial technical impact. Which leaves the question: Is there a decision point gap to fill here? What would it be?

  11. j--- commented on Jun 22, 2026

    @j---
    CollaboratorAuthor

    I don't think it's a decision point gap -- that would imply this is relevant to a decision outcome. I think it's a gap in gathering information guidance for how we decide between total and partial. CVSS may just not perfectly map into this decision point.

  12. j--- commented on Jun 22, 2026

    @j---
    CollaboratorAuthor

    line 14 and 16, for example, are also probably partial. But since CVSS scores impact as a diff from what the attacker gains, rather than the final outcome, when PR:H it is sort of unclear if it is total or partial.

  13. sei-ahouseholder commented on Jun 23, 2026

    @sei-ahouseholder
    Contributor

    One way out could be to create a variation on Technical Impact that includes an evaluate option:

    • total = as in TI 1.0.0, no change
    • evaluate = the decision table cannot make the call, evaluation is needed
    • partial = as in TI 1.0.0, no change

    Then we just construct the decision table with the "probably partial" rows (plus 14 and 16 as @j--- notes) as evaluate, and write up the accompanying instructions to provide examples that tilt evaluate toward total or partial.

    Summary of changes to the table previously shown:

    row Privileges Required v1.0.1 (cvss) Confidentiality Impact to the Vulnerable System v3.0.0 (cvss) Integrity Impact to the Vulnerable System v3.0.0 (cvss) CI Both high C OR I high PR: N Technical Impact v1.1.0
    14 high high low FALSE TRUE FALSE evaluate
    16 high low high FALSE TRUE FALSE evaluate
    17 none high none FALSE TRUE TRUE evaluate
    20 none none high FALSE TRUE TRUE evaluate
    23 none high low FALSE TRUE TRUE evaluate
    24 none low high FALSE TRUE TRUE evaluate

    Open Questions

    If we were to take this approach, we'd need to answer a few practical questions:

    • What is the name of the new value? is evaluate good enough or is there another term we should use?
      • My suggestion: use evaluate
    • Is this new decision point called Technical Impact 1.1.0? It adds a new value but does not change semantics of existing values, so per ADR-0006 it is a minor version bump from 1.0.0.
      • My suggestion: use Technical Impact 1.1.0
    • How to structure the guidance for the evaluate rows?
      • My suggestion: in all discussions we've had so far, the Bayesian prior on how evaluate falls out is that the most likely answer is partial. Which leads me to suggest that we say something like "Choose partial unless one of the following criteria applies... If one or more applies, choose total." This frames evaluate as a catch-and-release process, where the default is to release (partial) unless the keep (total) rules are met.)
    • What, specifically, are those keep rules?
      • I have no specific suggestion at present, TBD
  14. laurie-tyz commented on Jul 7, 2026

    @laurie-tyz
    Contributor

    Availability Impact | ❌ ⚠| See existing documentation, denial of service is partial

    Replace X with the ⚠️ as availability is somewhat included

  15. j--- commented on Jul 30, 2026

    @j---
    CollaboratorAuthor

    Because this outcome (what's currently proposed to be called Technical Impact 1.1.0) is an outcome, and not a decision point, I think we should avoid naming it as a version of the decision point. I guess more broadly, the outcome name space and the decision point name space should probably be separate.
    I might suggest this outcome space is Deciding Technical Impact v0.1 or something like that. We could make an informal pattern of using "deciding" or some other word in front of the outcome name and make the association to the Technical Impact v1.0 decision point clear. That could be a template for other mappings from things like CVSS to decision points. Thoughts?
    I am good with evaluate as the term for the uncertain value, and the option to provide some further guidance on how to do the evaluation.

  16. LA100ti commented on Aug 4, 2026

    @LA100ti

    While doing SSVC scoring and evaluating Technical Impact, we’ve found that the tricky situations tend to come from CVEs where the vendor description doesn’t provide enough detail and Confidentiality/Integrity aren’t marked as High. In those cases, PR has never helped us determine whether Technical Impact should be total or partial.

    Apologies if I may have missed part of the earlier conversation, but I’m not entirely sure what prompted the idea of incorporating PR into Technical Impact. My humble opinion is that this might introduce extra complexity without giving us answers. In our experience, PR is already represented well and is essential when assessing Automatable, so keeping it separate feels both simpler and more intuitive.

    For me, Technical Impact is really about what the attacker ultimately gains if successful exploitation is achieved not the preconditions needed to get there. For example, even if a code-execution vulnerability requires certain privileges to exploit, the end result is still code execution, and that’s what matters when determining Technical Impact. Maybe Tharros have a different opinion while doing SSVC and see if they think PR will help answering those instances in which TI is hard to assess based on CVSS vector and lack of proper vuln description.

  17. laurie-tyz commented on Aug 6, 2026

    @laurie-tyz
    Contributor

    The distinction between evaluate and deciding is very clear in English, German, Dutch and Scandinavian languages. However, in many non‑English languages, the distinction is blured, merged, or expressed with the same verb.

    "Probably partial" indicates there's not enough evidence to select "partial". Unknown or undetermined are options if you need a third term.

    Per CoPilot: CERT analysts typically use:
    Unknown when the world lacks data
    Undetermined when the analyst lacks data

    This is subtle but operationally important.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

content/semanticChanges to the semantic content of the SSVC documentationenhancementNew feature or requestssvc-calcSSVC "calculator" implementation

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions