public static CvssV3BaseScore FromVectorString(string vectorString) { vectorString = vectorString ?? throw new ArgumentNullException(nameof(vectorString)); if (string.IsNullOrWhiteSpace(vectorString) || !Regex.IsMatch(vectorString, "^CVSS:3\\.0\\/((AV:[NALP]|AC:[LH]|PR:[UNLH]|UI:[NR]|S:[UC]|[CIA]:[NLH]|E:[XUPFH]|RL:[XOTWU]|RC:[XURC]|[CIA]R:[XLMH]|MAV:[XNALP]|MAC:[XLH]|MPR:[XUNLH]|MUI:[XNR]|MS:[XUC]|M[CIA]:[XNLH])\\/)*(AV:[NALP]|AC:[LH]|PR:[UNLH]|UI:[NR]|S:[UC]|[CIA]:[NLH]|E:[XUPFH]|RL:[XOTWU]|RC:[XURC]|[CIA]R:[XLMH]|MAV:[XNALP]|MAC:[XLH]|MPR:[XUNLH]|MUI:[XNR]|MS:[XUC]|M[CIA]:[XNLH])$")) { throw new ArgumentException("Not a valid CVSS V3 vector string, invalid format", nameof(vectorString)); } var cvssV3BaseScore = new CvssV3BaseScore { AttackVector = VectorStringParser <CvssV3Enums.AttackVector> .Parse(vectorString), AttackComplexity = VectorStringParser <CvssV3Enums.AttackComplexity> .Parse(vectorString), PrivilegesRequired = VectorStringParser <CvssV3Enums.PrivilegesRequired> .Parse(vectorString), UserInteraction = VectorStringParser <CvssV3Enums.UserInteraction> .Parse(vectorString), Scope = VectorStringParser <CvssV3Enums.Scope> .Parse(vectorString), Confidentiality = VectorStringParser <CvssV3Enums.Confidentiality> .Parse(vectorString), Integrity = VectorStringParser <CvssV3Enums.Integrity> .Parse(vectorString), Availability = VectorStringParser <CvssV3Enums.Availability> .Parse(vectorString), }; var hasAllRequiredValues = true; hasAllRequiredValues = hasAllRequiredValues && cvssV3BaseScore.AttackVector != CvssV3Enums.AttackVector.NotSpecified; hasAllRequiredValues = hasAllRequiredValues && cvssV3BaseScore.AttackComplexity != CvssV3Enums.AttackComplexity.NotSpecified; hasAllRequiredValues = hasAllRequiredValues && cvssV3BaseScore.PrivilegesRequired != CvssV3Enums.PrivilegesRequired.NotSpecified; hasAllRequiredValues = hasAllRequiredValues && cvssV3BaseScore.UserInteraction != CvssV3Enums.UserInteraction.NotSpecified; hasAllRequiredValues = hasAllRequiredValues && cvssV3BaseScore.Scope != CvssV3Enums.Scope.NotSpecified; hasAllRequiredValues = hasAllRequiredValues && cvssV3BaseScore.Confidentiality != CvssV3Enums.Confidentiality.NotSpecified; hasAllRequiredValues = hasAllRequiredValues && cvssV3BaseScore.Integrity != CvssV3Enums.Integrity.NotSpecified; hasAllRequiredValues = hasAllRequiredValues && cvssV3BaseScore.Availability != CvssV3Enums.Availability.NotSpecified; if (!hasAllRequiredValues) { throw new ArgumentException("Not a valid CVSS V3 vector string, missing required metric", nameof(vectorString)); } return(cvssV3BaseScore); }
public static CvssV3BaseScore FromCvssV2BaseScore(CvssV2BaseScore cvssV2BaseScore) { var cvssV3BaseScore = new CvssV3BaseScore(); switch (cvssV2BaseScore.AccessVector) { case CvssV2Enums.AccessVector.Network: cvssV3BaseScore.AttackVector = CvssV3Enums.AttackVector.Network; break; case CvssV2Enums.AccessVector.AdjacentNetwork: cvssV3BaseScore.AttackVector = CvssV3Enums.AttackVector.Adjacent; break; } switch (cvssV2BaseScore.Authentication) { case CvssV2Enums.Authentication.None: cvssV3BaseScore.PrivilegesRequired = CvssV3Enums.PrivilegesRequired.None; break; } switch (cvssV2BaseScore.ConfidentialityImpact) { case CvssV2Enums.ConfidentialityImpact.Complete: cvssV3BaseScore.Confidentiality = CvssV3Enums.Confidentiality.High; break; case CvssV2Enums.ConfidentialityImpact.Partial: cvssV3BaseScore.Confidentiality = CvssV3Enums.Confidentiality.Low; break; case CvssV2Enums.ConfidentialityImpact.None: cvssV3BaseScore.Confidentiality = CvssV3Enums.Confidentiality.None; break; } switch (cvssV2BaseScore.IntegrityImpact) { case CvssV2Enums.IntegrityImpact.Complete: cvssV3BaseScore.Integrity = CvssV3Enums.Integrity.High; break; case CvssV2Enums.IntegrityImpact.Partial: cvssV3BaseScore.Integrity = CvssV3Enums.Integrity.Low; break; case CvssV2Enums.IntegrityImpact.None: cvssV3BaseScore.Integrity = CvssV3Enums.Integrity.None; break; } switch (cvssV2BaseScore.AvailabilityImpact) { case CvssV2Enums.AvailabilityImpact.Complete: cvssV3BaseScore.Availability = CvssV3Enums.Availability.High; break; case CvssV2Enums.AvailabilityImpact.Partial: cvssV3BaseScore.Availability = CvssV3Enums.Availability.Low; break; case CvssV2Enums.AvailabilityImpact.None: cvssV3BaseScore.Availability = CvssV3Enums.Availability.None; break; } return(cvssV3BaseScore); }
public CvssV3Score() { BaseScore = new CvssV3BaseScore(); TemporalScore = new CvssV3TemporalScore(); EnvironmentalScore = new CvssV3EnvironmentalScore(); }