|
10 | 10 | import json |
11 | 11 | from pathlib import Path |
12 | 12 |
|
| 13 | +from vulnerabilities.importer import VulnerabilitySeverity |
13 | 14 | from vulnerabilities.pipelines import nvd_importer |
| 15 | +from vulnerabilities.severity_systems import Cvssv2ScoringSystem |
| 16 | +from vulnerabilities.severity_systems import Cvssv3ScoringSystem |
| 17 | +from vulnerabilities.severity_systems import Cvssv4ScoringSystem |
14 | 18 | from vulnerabilities.tests.util_tests import VULNERABLECODE_REGEN_TEST_FIXTURES as REGEN |
15 | 19 |
|
16 | 20 | TEST_DATA = Path(__file__).parent.parent / "test_data" / "nvd" |
@@ -95,28 +99,139 @@ def get_test_cve_item(): |
95 | 99 | }, |
96 | 100 | ], |
97 | 101 | "metrics": { |
| 102 | + "cvssMetricV40": [ |
| 103 | + { |
| 104 | + "source": "cna@vuldb.com", |
| 105 | + "type": "Secondary", |
| 106 | + "cvssData": { |
| 107 | + "version": "4.0", |
| 108 | + "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", |
| 109 | + "baseScore": 5.3, |
| 110 | + "baseSeverity": "MEDIUM", |
| 111 | + "attackVector": "NETWORK", |
| 112 | + "attackComplexity": "LOW", |
| 113 | + "attackRequirements": "NONE", |
| 114 | + "privilegesRequired": "LOW", |
| 115 | + "userInteraction": "NONE", |
| 116 | + "vulnConfidentialityImpact": "LOW", |
| 117 | + "vulnIntegrityImpact": "LOW", |
| 118 | + "vulnAvailabilityImpact": "LOW", |
| 119 | + "subConfidentialityImpact": "NONE", |
| 120 | + "subIntegrityImpact": "NONE", |
| 121 | + "subAvailabilityImpact": "NONE", |
| 122 | + "exploitMaturity": "NOT_DEFINED", |
| 123 | + "confidentialityRequirement": "NOT_DEFINED", |
| 124 | + "integrityRequirement": "NOT_DEFINED", |
| 125 | + "availabilityRequirement": "NOT_DEFINED", |
| 126 | + "modifiedAttackVector": "NOT_DEFINED", |
| 127 | + "modifiedAttackComplexity": "NOT_DEFINED", |
| 128 | + "modifiedAttackRequirements": "NOT_DEFINED", |
| 129 | + "modifiedPrivilegesRequired": "NOT_DEFINED", |
| 130 | + "modifiedUserInteraction": "NOT_DEFINED", |
| 131 | + "modifiedVulnConfidentialityImpact": "NOT_DEFINED", |
| 132 | + "modifiedVulnIntegrityImpact": "NOT_DEFINED", |
| 133 | + "modifiedVulnAvailabilityImpact": "NOT_DEFINED", |
| 134 | + "modifiedSubConfidentialityImpact": "NOT_DEFINED", |
| 135 | + "modifiedSubIntegrityImpact": "NOT_DEFINED", |
| 136 | + "modifiedSubAvailabilityImpact": "NOT_DEFINED", |
| 137 | + "Safety": "NOT_DEFINED", |
| 138 | + "Automatable": "NOT_DEFINED", |
| 139 | + "Recovery": "NOT_DEFINED", |
| 140 | + "valueDensity": "NOT_DEFINED", |
| 141 | + "vulnerabilityResponseEffort": "NOT_DEFINED", |
| 142 | + "providerUrgency": "NOT_DEFINED", |
| 143 | + }, |
| 144 | + } |
| 145 | + ], |
98 | 146 | "cvssMetricV31": [ |
99 | 147 | { |
100 | | - "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", |
| 148 | + "source": "cna@vuldb.com", |
101 | 149 | "type": "Secondary", |
102 | 150 | "cvssData": { |
103 | 151 | "version": "3.1", |
104 | | - "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", |
105 | | - "baseScore": 9.8, |
106 | | - "baseSeverity": "CRITICAL", |
| 152 | + "vectorString": "CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L", |
| 153 | + "baseScore": 3.5, |
| 154 | + "baseSeverity": "LOW", |
| 155 | + "attackVector": "ADJACENT_NETWORK", |
| 156 | + "attackComplexity": "LOW", |
| 157 | + "privilegesRequired": "LOW", |
| 158 | + "userInteraction": "NONE", |
| 159 | + "scope": "UNCHANGED", |
| 160 | + "confidentialityImpact": "NONE", |
| 161 | + "integrityImpact": "NONE", |
| 162 | + "availabilityImpact": "LOW", |
| 163 | + }, |
| 164 | + "exploitabilityScore": 2.1, |
| 165 | + "impactScore": 1.4, |
| 166 | + }, |
| 167 | + { |
| 168 | + "source": "nvd@nist.gov", |
| 169 | + "type": "Primary", |
| 170 | + "cvssData": { |
| 171 | + "version": "3.1", |
| 172 | + "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", |
| 173 | + "baseScore": 7.5, |
| 174 | + "baseSeverity": "HIGH", |
| 175 | + "attackVector": "NETWORK", |
| 176 | + "attackComplexity": "LOW", |
| 177 | + "privilegesRequired": "NONE", |
| 178 | + "userInteraction": "NONE", |
| 179 | + "scope": "UNCHANGED", |
| 180 | + "confidentialityImpact": "NONE", |
| 181 | + "integrityImpact": "NONE", |
| 182 | + "availabilityImpact": "HIGH", |
| 183 | + }, |
| 184 | + "exploitabilityScore": 3.9, |
| 185 | + "impactScore": 3.6, |
| 186 | + }, |
| 187 | + ], |
| 188 | + "cvssMetricV30": [ |
| 189 | + { |
| 190 | + "source": "nvd@nist.gov", |
| 191 | + "type": "Primary", |
| 192 | + "cvssData": { |
| 193 | + "version": "3.0", |
| 194 | + "vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", |
| 195 | + "baseScore": 7.5, |
| 196 | + "baseSeverity": "HIGH", |
107 | 197 | "attackVector": "NETWORK", |
108 | 198 | "attackComplexity": "LOW", |
109 | 199 | "privilegesRequired": "NONE", |
110 | 200 | "userInteraction": "NONE", |
111 | 201 | "scope": "UNCHANGED", |
112 | | - "confidentialityImpact": "HIGH", |
113 | | - "integrityImpact": "HIGH", |
| 202 | + "confidentialityImpact": "NONE", |
| 203 | + "integrityImpact": "NONE", |
114 | 204 | "availabilityImpact": "HIGH", |
115 | 205 | }, |
116 | 206 | "exploitabilityScore": 3.9, |
117 | | - "impactScore": 5.9, |
| 207 | + "impactScore": 3.6, |
118 | 208 | } |
119 | | - ] |
| 209 | + ], |
| 210 | + "cvssMetricV2": [ |
| 211 | + { |
| 212 | + "source": "cna@vuldb.com", |
| 213 | + "type": "Secondary", |
| 214 | + "cvssData": { |
| 215 | + "version": "2.0", |
| 216 | + "vectorString": "AV:A/AC:L/Au:S/C:N/I:N/A:P", |
| 217 | + "baseScore": 2.7, |
| 218 | + "accessVector": "ADJACENT_NETWORK", |
| 219 | + "accessComplexity": "LOW", |
| 220 | + "authentication": "SINGLE", |
| 221 | + "confidentialityImpact": "NONE", |
| 222 | + "integrityImpact": "NONE", |
| 223 | + "availabilityImpact": "PARTIAL", |
| 224 | + }, |
| 225 | + "baseSeverity": "LOW", |
| 226 | + "exploitabilityScore": 5.1, |
| 227 | + "impactScore": 2.9, |
| 228 | + "acInsufInfo": False, |
| 229 | + "obtainAllPrivilege": False, |
| 230 | + "obtainUserPrivilege": False, |
| 231 | + "obtainOtherPrivilege": False, |
| 232 | + "userInteractionRequired": False, |
| 233 | + } |
| 234 | + ], |
120 | 235 | }, |
121 | 236 | "weaknesses": [ |
122 | 237 | { |
@@ -381,6 +496,74 @@ def get_test_cve_item(): |
381 | 496 | } |
382 | 497 |
|
383 | 498 |
|
| 499 | +def test_CveItem_severities(): |
| 500 | + expected_severities = [ |
| 501 | + VulnerabilitySeverity( |
| 502 | + system=Cvssv4ScoringSystem( |
| 503 | + identifier="cvssv4", |
| 504 | + name="CVSSv4 Base Score", |
| 505 | + url="https://www.first.org/cvss/v4-0/", |
| 506 | + notes="CVSSv4 base score and " "vector", |
| 507 | + ), |
| 508 | + value="5.3", |
| 509 | + scoring_elements="CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", |
| 510 | + published_at=None, |
| 511 | + url="https://nvd.nist.gov/vuln/detail/CVE-2025-45988", |
| 512 | + ), |
| 513 | + VulnerabilitySeverity( |
| 514 | + system=Cvssv3ScoringSystem( |
| 515 | + identifier="cvssv3.1", |
| 516 | + name="CVSSv3.1 Base Score", |
| 517 | + url="https://www.first.org/cvss/v3-1/", |
| 518 | + notes="CVSSv3.1 base score and vector", |
| 519 | + ), |
| 520 | + value="3.5", |
| 521 | + scoring_elements="CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L", |
| 522 | + published_at=None, |
| 523 | + url="https://nvd.nist.gov/vuln/detail/CVE-2025-45988", |
| 524 | + ), |
| 525 | + VulnerabilitySeverity( |
| 526 | + system=Cvssv3ScoringSystem( |
| 527 | + identifier="cvssv3.1", |
| 528 | + name="CVSSv3.1 Base Score", |
| 529 | + url="https://www.first.org/cvss/v3-1/", |
| 530 | + notes="CVSSv3.1 base score and vector", |
| 531 | + ), |
| 532 | + value="7.5", |
| 533 | + scoring_elements="CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", |
| 534 | + published_at=None, |
| 535 | + url="https://nvd.nist.gov/vuln/detail/CVE-2025-45988", |
| 536 | + ), |
| 537 | + VulnerabilitySeverity( |
| 538 | + system=Cvssv3ScoringSystem( |
| 539 | + identifier="cvssv3", |
| 540 | + name="CVSSv3 Base Score", |
| 541 | + url="https://www.first.org/cvss/v3-0/", |
| 542 | + notes="CVSSv3 base score and " "vector", |
| 543 | + ), |
| 544 | + value="7.5", |
| 545 | + scoring_elements="CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", |
| 546 | + published_at=None, |
| 547 | + url="https://nvd.nist.gov/vuln/detail/CVE-2025-45988", |
| 548 | + ), |
| 549 | + VulnerabilitySeverity( |
| 550 | + system=Cvssv2ScoringSystem( |
| 551 | + identifier="cvssv2", |
| 552 | + name="CVSSv2 Base Score", |
| 553 | + url="https://www.first.org/cvss/v2/", |
| 554 | + notes="CVSSv2 base score and vector", |
| 555 | + ), |
| 556 | + value="2.7", |
| 557 | + scoring_elements="AV:A/AC:L/Au:S/C:N/I:N/A:P", |
| 558 | + published_at=None, |
| 559 | + url="https://nvd.nist.gov/vuln/detail/CVE-2025-45988", |
| 560 | + ), |
| 561 | + ] |
| 562 | + |
| 563 | + found_severities = nvd_importer.CveItem(cve_item=get_test_cve_item()).severities |
| 564 | + assert found_severities == expected_severities |
| 565 | + |
| 566 | + |
384 | 567 | def test_CveItem_cpes(): |
385 | 568 | expected_cpes = [ |
386 | 569 | "cpe:2.3:o:b-link:bl-wr9000_firmware:2.4.9:*:*:*:*:*:*:*", |
|
0 commit comments