@@ -22,8 +22,8 @@ def get_label_for_scan_types(self, scan_type):
22
22
23
23
def get_description_for_scan_types (self , scan_type ):
24
24
return (
25
- "A vulnerability scanner for container images and filesystems. JSON report generated with '-o json' "
26
- "format"
25
+ "A vulnerability scanner for container images, filesystems, and SBOMs. "
26
+ "JSON report generated with '--output=json' format. "
27
27
)
28
28
29
29
def get_findings (self , file , test ):
@@ -41,11 +41,13 @@ def get_findings(self, file, test):
41
41
if "fix" in vulnerability :
42
42
vuln_fix_versions = vulnerability ["fix" ].get ("versions" )
43
43
vuln_cvss = vulnerability .get ("cvss" )
44
+ vuln_epss = vulnerability .get ("epss" )
44
45
45
46
rel_datasource = None
46
47
rel_urls = None
47
48
rel_description = None
48
49
rel_cvss = None
50
+ rel_epss = None
49
51
vulnerability_ids = None
50
52
related_vulnerabilities = item .get ("relatedVulnerabilities" )
51
53
if related_vulnerabilities :
@@ -54,6 +56,7 @@ def get_findings(self, file, test):
54
56
rel_urls = related_vulnerability .get ("urls" )
55
57
rel_description = related_vulnerability .get ("description" )
56
58
rel_cvss = related_vulnerability .get ("cvss" )
59
+ rel_epss = related_vulnerability .get ("epss" )
57
60
vulnerability_ids = self .get_vulnerability_ids (
58
61
vuln_id , related_vulnerabilities ,
59
62
)
@@ -160,6 +163,10 @@ def get_findings(self, file, test):
160
163
if not finding_cvss3 and rel_cvss :
161
164
finding_cvss3 = self .get_cvss (rel_cvss )
162
165
166
+ finding_epss_score , finding_epss_percentile = self .get_epss_values (vuln_id , vuln_epss )
167
+ if finding_epss_score is None and rel_epss :
168
+ finding_epss_score , finding_epss_percentile = self .get_epss_values (vuln_id , rel_epss )
169
+
163
170
dupe_key = finding_title
164
171
if dupe_key in dupes :
165
172
finding = dupes [dupe_key ]
@@ -168,8 +175,9 @@ def get_findings(self, file, test):
168
175
dupes [dupe_key ] = Finding (
169
176
title = finding_title .replace ("\x00 " , "" ),
170
177
description = finding_description .replace ("\x00 " , "" ),
171
- cwe = 1352 ,
172
178
cvssv3 = finding_cvss3 ,
179
+ epss_score = finding_epss_score ,
180
+ epss_percentile = finding_epss_percentile ,
173
181
severity = vuln_severity ,
174
182
mitigation = finding_mitigation ,
175
183
references = finding_references ,
@@ -202,6 +210,20 @@ def get_cvss(self, cvss):
202
210
return vector
203
211
return None
204
212
213
+ def get_epss_values (self , vuln_id , epss_list ):
214
+ if isinstance (epss_list , list ):
215
+ for epss_data in epss_list :
216
+ if epss_data .get ("cve" ) != vuln_id :
217
+ continue
218
+ try :
219
+ epss_score = float (epss_data .get ("epss" ))
220
+ epss_percentile = float (epss_data .get ("percentile" ))
221
+ except (TypeError , ValueError ):
222
+ pass
223
+ else :
224
+ return epss_score , epss_percentile
225
+ return None , None
226
+
205
227
def get_vulnerability_ids (self , vuln_id , related_vulnerabilities ):
206
228
vulnerability_ids = []
207
229
if vuln_id :
0 commit comments