UNPKG

@turingpointde/cvss.js

Version:

A tiny library to work with cvss vectors

712 lines (707 loc) 16.1 kB
import { CvssVersionDefinition, CvssLookup, MaxComposedObject, MaxComposedNestedObject, MaxSeverityObject, MaxSeverityNestedObject, } from "./types"; export const definitions: CvssVersionDefinition = { version: "4.0", definitions: [ { name: "Attack Vector", abbr: "AV", mandatory: true, metrics: [ { name: "Network", abbr: "N", numerical: 0 }, { name: "Adjacent", abbr: "A", numerical: 0.1 }, { name: "Local", abbr: "L", numerical: 0.2 }, { name: "Physical", abbr: "P", numerical: 0.3 }, ], }, { name: "Attack Complexity", abbr: "AC", mandatory: true, metrics: [ { name: "Low", abbr: "L", numerical: 0 }, { name: "High", abbr: "H", numerical: 0.1 }, ], }, { name: "Attack Requirements", abbr: "AT", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0 }, { name: "Present", abbr: "P", numerical: 0.1 }, ], }, { name: "Privileges Required", abbr: "PR", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0 }, { name: "Low", abbr: "L", numerical: 0.1 }, { name: "High", abbr: "H", numerical: 0.2 }, ], }, { name: "User Interaction", abbr: "UI", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0 }, { name: "Passive", abbr: "P", numerical: 0.1 }, { name: "Active", abbr: "A", numerical: 0.2 }, ], }, { name: "Vulnerable System Confidentiality Impact", abbr: "VC", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0.2 }, { name: "Low", abbr: "L", numerical: 0.1 }, { name: "High", abbr: "H", numerical: 0 }, ], }, { name: "Vulnerable System Integrity Impact", abbr: "VI", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0.2 }, { name: "Low", abbr: "L", numerical: 0.1 }, { name: "High", abbr: "H", numerical: 0 }, ], }, { name: "Vulnerable System Availability Impact", abbr: "VA", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0.2 }, { name: "Low", abbr: "L", numerical: 0.1 }, { name: "High", abbr: "H", numerical: 0 }, ], }, { name: "Subsequent System Confidentiality Impact", abbr: "SC", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0.3 }, { name: "Low", abbr: "L", numerical: 0.2 }, { name: "High", abbr: "H", numerical: 0.1 }, ], }, { name: "Subsequent System Integrity Impact", abbr: "SI", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0.3 }, { name: "Low", abbr: "L", numerical: 0.2 }, { name: "High", abbr: "H", numerical: 0.1 }, { name: "", abbr: "S", numerical: 0 }, // no mentioned in the definitions but is in the max_composed.js ], }, { name: "Subsequent System Availability Impact", abbr: "SA", mandatory: true, metrics: [ { name: "None", abbr: "N", numerical: 0.3 }, { name: "Low", abbr: "L", numerical: 0.2 }, { name: "High", abbr: "H", numerical: 0.1 }, { name: "", abbr: "S", numerical: 0 }, // no mentioned in the definitions but is in the max_composed.js ], }, { name: "Exploit Maturity", abbr: "E", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X", numerical: 0 }, { name: "Attacked", abbr: "A", numerical: 0 }, { name: "POC", abbr: "P", numerical: 0.1 }, { name: "Unreported", abbr: "U", numerical: 0.2 }, ], }, { name: "Confidentiality Requirement", abbr: "CR", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X", numerical: 0 }, { name: "High", abbr: "H", numerical: 0 }, { name: "Medium", abbr: "M", numerical: 0.1 }, { name: "Low", abbr: "L", numerical: 0.2 }, ], }, { name: "Integrity Requirement", abbr: "IR", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X", numerical: 0 }, { name: "High", abbr: "H", numerical: 0 }, { name: "Medium", abbr: "M", numerical: 0.1 }, { name: "Low", abbr: "L", numerical: 0.2 }, ], }, { name: "Availability Requirement", abbr: "AR", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X", numerical: 0 }, { name: "High", abbr: "H", numerical: 0 }, { name: "Medium", abbr: "M", numerical: 0.1 }, { name: "Low", abbr: "L", numerical: 0.2 }, ], }, { name: "Modified Attack Vector", abbr: "MAV", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "Network", abbr: "N" }, { name: "Adjacent", abbr: "A" }, { name: "Local", abbr: "L" }, { name: "Physical", abbr: "P" }, ], }, { name: "Modified Attack Complexity", abbr: "MAC", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "High", abbr: "H" }, { name: "Low", abbr: "L" }, ], }, { name: "Modified Attack Requirements ", // @ts-expect-error abbr: "MAT", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "None", abbr: "N" }, { name: "Present", abbr: "P" }, ], }, { name: "Modified Privileges Required", abbr: "MPR", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "High", abbr: "H" }, { name: "Low", abbr: "L" }, { name: "None", abbr: "N" }, ], }, { name: "Modified User Interaction", abbr: "MUI", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "None", abbr: "N" }, { name: "Passive", abbr: "P" }, { name: "Active", abbr: "A" }, ], }, { name: "Modified Vulnerable System Confidentiality", // @ts-expect-error abbr: "MVC", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "High", abbr: "H" }, { name: "Low", abbr: "L" }, { name: "None", abbr: "N" }, ], }, { name: "Modified Vulnerable System Integrity", // @ts-expect-error abbr: "MVI", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "High", abbr: "H" }, { name: "Low", abbr: "L" }, { name: "None", abbr: "N" }, ], }, { name: "Modified Vulnerable System Availability", // @ts-expect-error abbr: "MVA", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "High", abbr: "H" }, { name: "Low", abbr: "L" }, { name: "None", abbr: "N" }, ], }, { name: "Modified Subsequent System Confidentiality", // @ts-expect-error abbr: "MSC", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "High", abbr: "H" }, { name: "Low", abbr: "L" }, { name: "None", abbr: "N" }, ], }, { name: "Modified Subsequent System Integrity", // @ts-expect-error abbr: "MSI", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "High", abbr: "H" }, { name: "Low", abbr: "L" }, { name: "Negligible", abbr: "N" }, { name: "Safety", abbr: "S" }, ], }, { name: "Modified Subsequent System Availability", // @ts-expect-error abbr: "MSA", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "High", abbr: "H" }, { name: "Low", abbr: "L" }, { name: "Negligible", abbr: "N" }, { name: "Safety", abbr: "S" }, ], }, { name: "Safety", abbr: "S", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "Negligible", abbr: "N" }, { name: "Present", abbr: "P" }, ], }, { name: "Automatable", // @ts-expect-error abbr: "AU", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "No", abbr: "N" }, { name: "Yes", abbr: "Y" }, ], }, { name: "Recovery", // @ts-expect-error abbr: "R", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "Automatic", abbr: "A" }, { name: "User", abbr: "U" }, { name: "Irrecoverable", abbr: "I" }, ], }, { name: "Value Density", // @ts-expect-error abbr: "V", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "Diffuse", abbr: "D" }, { name: "Concentrated", abbr: "C" }, ], }, { name: "Vulnerability Response Effort", // @ts-expect-error abbr: "RE", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "Low", abbr: "L" }, { name: "Moderate", abbr: "M" }, { name: "High", abbr: "H" }, ], }, { name: "Provider Urgency", // @ts-expect-error abbr: "U", mandatory: false, metrics: [ { name: "Not Defined", abbr: "X" }, { name: "Clear", abbr: "Clear" }, { name: "Green", abbr: "Green" }, { name: "Amber", abbr: "Amber" }, { name: "Red", abbr: "Red" }, ], }, ], }; export const cvssLookup_global: CvssLookup = { "000000": 10, "000001": 9.9, "000010": 9.8, "000011": 9.5, "000020": 9.5, "000021": 9.2, "000100": 10, "000101": 9.6, "000110": 9.3, "000111": 8.7, "000120": 9.1, "000121": 8.1, "000200": 9.3, "000201": 9, "000210": 8.9, "000211": 8, "000220": 8.1, "000221": 6.8, "001000": 9.8, "001001": 9.5, "001010": 9.5, "001011": 9.2, "001020": 9, "001021": 8.4, "001100": 9.3, "001101": 9.2, "001110": 8.9, "001111": 8.1, "001120": 8.1, "001121": 6.5, "001200": 8.8, "001201": 8, "001210": 7.8, "001211": 7, "001220": 6.9, "001221": 4.8, "002001": 9.2, "002011": 8.2, "002021": 7.2, "002101": 7.9, "002111": 6.9, "002121": 5, "002201": 6.9, "002211": 5.5, "002221": 2.7, "010000": 9.9, "010001": 9.7, "010010": 9.5, "010011": 9.2, "010020": 9.2, "010021": 8.5, "010100": 9.5, "010101": 9.1, "010110": 9, "010111": 8.3, "010120": 8.4, "010121": 7.1, "010200": 9.2, "010201": 8.1, "010210": 8.2, "010211": 7.1, "010220": 7.2, "010221": 5.3, "011000": 9.5, "011001": 9.3, "011010": 9.2, "011011": 8.5, "011020": 8.5, "011021": 7.3, "011100": 9.2, "011101": 8.2, "011110": 8, "011111": 7.2, "011120": 7, "011121": 5.9, "011200": 8.4, "011201": 7, "011210": 7.1, "011211": 5.2, "011220": 5, "011221": 3, "012001": 8.6, "012011": 7.5, "012021": 5.2, "012101": 7.1, "012111": 5.2, "012121": 2.9, "012201": 6.3, "012211": 2.9, "012221": 1.7, "100000": 9.8, "100001": 9.5, "100010": 9.4, "100011": 8.7, "100020": 9.1, "100021": 8.1, "100100": 9.4, "100101": 8.9, "100110": 8.6, "100111": 7.4, "100120": 7.7, "100121": 6.4, "100200": 8.7, "100201": 7.5, "100210": 7.4, "100211": 6.3, "100220": 6.3, "100221": 4.9, "101000": 9.4, "101001": 8.9, "101010": 8.8, "101011": 7.7, "101020": 7.6, "101021": 6.7, "101100": 8.6, "101101": 7.6, "101110": 7.4, "101111": 5.8, "101120": 5.9, "101121": 5, "101200": 7.2, "101201": 5.7, "101210": 5.7, "101211": 5.2, "101220": 5.2, "101221": 2.5, "102001": 8.3, "102011": 7, "102021": 5.4, "102101": 6.5, "102111": 5.8, "102121": 2.6, "102201": 5.3, "102211": 2.1, "102221": 1.3, "110000": 9.5, "110001": 9, "110010": 8.8, "110011": 7.6, "110020": 7.6, "110021": 7, "110100": 9, "110101": 7.7, "110110": 7.5, "110111": 6.2, "110120": 6.1, "110121": 5.3, "110200": 7.7, "110201": 6.6, "110210": 6.8, "110211": 5.9, "110220": 5.2, "110221": 3, "111000": 8.9, "111001": 7.8, "111010": 7.6, "111011": 6.7, "111020": 6.2, "111021": 5.8, "111100": 7.4, "111101": 5.9, "111110": 5.7, "111111": 5.7, "111120": 4.7, "111121": 2.3, "111200": 6.1, "111201": 5.2, "111210": 5.7, "111211": 2.9, "111220": 2.4, "111221": 1.6, "112001": 7.1, "112011": 5.9, "112021": 3, "112101": 5.8, "112111": 2.6, "112121": 1.5, "112201": 2.3, "112211": 1.3, "112221": 0.6, "200000": 9.3, "200001": 8.7, "200010": 8.6, "200011": 7.2, "200020": 7.5, "200021": 5.8, "200100": 8.6, "200101": 7.4, "200110": 7.4, "200111": 6.1, "200120": 5.6, "200121": 3.4, "200200": 7, "200201": 5.4, "200210": 5.2, "200211": 4, "200220": 4, "200221": 2.2, "201000": 8.5, "201001": 7.5, "201010": 7.4, "201011": 5.5, "201020": 6.2, "201021": 5.1, "201100": 7.2, "201101": 5.7, "201110": 5.5, "201111": 4.1, "201120": 4.6, "201121": 1.9, "201200": 5.3, "201201": 3.6, "201210": 3.4, "201211": 1.9, "201220": 1.9, "201221": 0.8, "202001": 6.4, "202011": 5.1, "202021": 2, "202101": 4.7, "202111": 2.1, "202121": 1.1, "202201": 2.4, "202211": 0.9, "202221": 0.4, "210000": 8.8, "210001": 7.5, "210010": 7.3, "210011": 5.3, "210020": 6, "210021": 5, "210100": 7.3, "210101": 5.5, "210110": 5.9, "210111": 4, "210120": 4.1, "210121": 2, "210200": 5.4, "210201": 4.3, "210210": 4.5, "210211": 2.2, "210220": 2, "210221": 1.1, "211000": 7.5, "211001": 5.5, "211010": 5.8, "211011": 4.5, "211020": 4, "211021": 2.1, "211100": 6.1, "211101": 5.1, "211110": 4.8, "211111": 1.8, "211120": 2, "211121": 0.9, "211200": 4.6, "211201": 1.8, "211210": 1.7, "211211": 0.7, "211220": 0.8, "211221": 0.2, "212001": 5.3, "212011": 2.4, "212021": 1.4, "212101": 2.4, "212111": 1.2, "212121": 0.5, "212201": 1, "212211": 0.3, "212221": 0.1, }; export const maxComposed = { // EQ1 eq1: { 0: ["AV:N/PR:N/UI:N/"], 1: ["AV:A/PR:N/UI:N/", "AV:N/PR:L/UI:N/", "AV:N/PR:N/UI:P/"], 2: ["AV:P/PR:N/UI:N/", "AV:A/PR:L/UI:P/"], } as MaxComposedObject, // EQ2 eq2: { 0: ["AC:L/AT:N/"], 1: ["AC:H/AT:N/", "AC:L/AT:P/"], } as MaxComposedObject, // EQ3+EQ6 eq3: { 0: { "0": ["VC:H/VI:H/VA:H/CR:H/IR:H/AR:H/"], "1": ["VC:H/VI:H/VA:L/CR:M/IR:M/AR:H/", "VC:H/VI:H/VA:H/CR:M/IR:M/AR:M/"], }, 1: { "0": ["VC:L/VI:H/VA:H/CR:H/IR:H/AR:H/", "VC:H/VI:L/VA:H/CR:H/IR:H/AR:H/"], "1": [ "VC:L/VI:H/VA:L/CR:H/IR:M/AR:H/", "VC:L/VI:H/VA:H/CR:H/IR:M/AR:M/", "VC:H/VI:L/VA:H/CR:M/IR:H/AR:M/", "VC:H/VI:L/VA:L/CR:M/IR:H/AR:H/", "VC:L/VI:L/VA:H/CR:H/IR:H/AR:M/", ], }, 2: { "1": ["VC:L/VI:L/VA:L/CR:H/IR:H/AR:H/"] }, } as MaxComposedNestedObject, // EQ4 eq4: { 0: ["SC:H/SI:S/SA:S/"], 1: ["SC:H/SI:H/SA:H/"], 2: ["SC:L/SI:L/SA:L/"], } as MaxComposedObject, // EQ5 eq5: { 0: ["E:A/"], 1: ["E:P/"], 2: ["E:U/"], } as MaxComposedObject, }; export const maxSeverity = { eq1: { 0: 1, 1: 4, 2: 5, } as MaxSeverityObject, eq2: { 0: 1, 1: 2, } as MaxSeverityObject, eq3eq6: { 0: { 0: 7, 1: 6 }, 1: { 0: 8, 1: 8 }, 2: { 1: 10 }, } as MaxSeverityNestedObject, eq4: { 0: 6, 1: 5, 2: 4, } as MaxSeverityObject, eq5: { 0: 1, 1: 1, 2: 1, } as MaxSeverityObject, };