|
38 | 38 | from vulnerabilities.data_source import DataSource |
39 | 39 | from vulnerabilities.data_source import DataSourceConfiguration |
40 | 40 | from vulnerabilities.data_source import Reference |
41 | | - |
| 41 | +from vulnerabilities.data_source import VulnerabilitySeverity |
42 | 42 | from vulnerabilities.package_managers import MavenVersionAPI |
43 | 43 | from vulnerabilities.package_managers import NugetVersionAPI |
44 | 44 | from vulnerabilities.package_managers import ComposerVersionAPI |
45 | 45 | from vulnerabilities.package_managers import PypiVersionAPI |
46 | 46 | from vulnerabilities.package_managers import RubyVersionAPI |
| 47 | +from vulnerabilities.severity_systems import scoring_systems |
47 | 48 |
|
48 | 49 | # set of all possible values of first '%s' = {'MAVEN','COMPOSER', 'NUGET', 'RUBYGEMS', 'PYPI'} |
49 | 50 | # second '%s' is interesting, it will have the value '' for the first request, |
|
63 | 64 | references { |
64 | 65 | url |
65 | 66 | } |
| 67 | + severity |
66 | 68 | } |
67 | 69 | package { |
68 | 70 | name |
@@ -222,9 +224,24 @@ def process_response(self) -> List[Advisory]: |
222 | 224 | vuln_references = self.extract_references(adv["node"]["advisory"]["references"]) |
223 | 225 | vuln_desc = adv["node"]["advisory"]["summary"] |
224 | 226 |
|
225 | | - for vuln in adv["node"]["advisory"]["identifiers"]: |
226 | | - if vuln["type"] == "CVE": |
227 | | - cve_ids.add(vuln["value"]) |
| 227 | + for identifier in adv["node"]["advisory"]["identifiers"]: |
| 228 | + # collect CVEs |
| 229 | + if identifier["type"] == "CVE": |
| 230 | + cve_ids.add(identifier["value"]) |
| 231 | + |
| 232 | + # attach the GHSA with severity score |
| 233 | + if identifier["type"] == "GHSA": |
| 234 | + for ref in vuln_references: |
| 235 | + if ref.reference_id == identifier["value"]: |
| 236 | + ref.severities = [ |
| 237 | + VulnerabilitySeverity( |
| 238 | + system=scoring_systems["cvssv3.1_qr"], |
| 239 | + value=adv["node"]["advisory"]["severity"] |
| 240 | + ) |
| 241 | + ] |
| 242 | + # Each Node has only one GHSA, hence exit after attaching |
| 243 | + # score to this GHSA |
| 244 | + break |
228 | 245 |
|
229 | 246 | for cve_id in cve_ids: |
230 | 247 | adv_list.append( |
|
0 commit comments