@@ -75,15 +75,17 @@ def extractEvidence(desiredLine: int, file: str) -> list[Line]:
75
75
"""
76
76
with open (file , encoding = "utf-8" , errors = "ignore" ) as fileContents :
77
77
start = max (desiredLine - 3 , 0 )
78
- for line in range (start ):
79
- next (fileContents )
80
78
content = []
81
- for line in range (start + 1 , desiredLine + 3 ):
82
- try :
79
+ try :
80
+ for line in range (start ):
81
+ next (fileContents )
82
+ for line in range (start + 1 , desiredLine + 3 ):
83
83
lineContent = next (fileContents ).rstrip ().replace ("\t " , " " )
84
- except StopIteration :
85
- break
86
- content .append ({"selected" : line == desiredLine , "line" : line , "content" : lineContent })
84
+ content .append (
85
+ {"selected" : line == desiredLine , "line" : line , "content" : lineContent }
86
+ )
87
+ except StopIteration :
88
+ pass
87
89
return content
88
90
89
91
@@ -115,20 +117,22 @@ def bandit(scanDir=".") -> list[Finding]:
115
117
)[1 ]
116
118
)["results" ]
117
119
for result in results :
118
- file = result ["filename" ].replace ("\\ " , "/" )
120
+ file = result .get ("filename" ).replace ("\\ " , "/" )
121
+ resultId = result .get ("test_id" )
122
+ line = result .get ("line_number" )
119
123
findings .append (
120
124
{
121
- "id" : result [ "test_id" ] ,
122
- "title" : f"{ result [ 'test_id' ] } : { result [ 'test_name' ] } " ,
123
- "description" : result [ "issue_text" ] ,
125
+ "id" : resultId ,
126
+ "title" : f"{ resultId } : { result . get ( 'test_name' ) } " ,
127
+ "description" : result . get ( "issue_text" ) ,
124
128
"file" : file ,
125
- "evidence" : extractEvidence (result [ "line_number" ] , file ),
126
- "severity" : levelMap [result [ "issue_severity" ] ],
127
- "confidence" : levelMap [result [ "issue_confidence" ] ],
128
- "line" : result [ "line_number" ] ,
129
+ "evidence" : extractEvidence (line , file ),
130
+ "severity" : levelMap [result . get ( "issue_severity" ) ],
131
+ "confidence" : levelMap [result . get ( "issue_confidence" ) ],
132
+ "line" : line ,
129
133
"_other" : {
130
- "more_info" : result [ "more_info" ] ,
131
- "line_range" : result [ "line_range" ] ,
134
+ "more_info" : result . get ( "more_info" ) ,
135
+ "line_range" : result . get ( "line_range" ) ,
132
136
},
133
137
}
134
138
)
@@ -138,23 +142,45 @@ def bandit(scanDir=".") -> list[Finding]:
138
142
def _doSafetyProcessing (results : dict [str , Any ]) -> list [Finding ]:
139
143
findings = []
140
144
for result in results ["vulnerabilities" ]:
145
+ vulnerabilityId = result .get ("vulnerability_id" )
146
+ packageName = result .get ("package_name" )
147
+ advisory = result .get ("advisory" )
148
+
149
+ moreInfo = result .get ("more_info_url" )
150
+ affectedVersions = "; " .join (result .get ("affected_versions" ))
151
+
152
+ content = f"{ packageName } , version(s)={ affectedVersions } "
153
+ description = (
154
+ f"Vulnerability found in package { packageName } ,"
155
+ f"version(s)={ affectedVersions } . { advisory } . More info available at { moreInfo } "
156
+ )
157
+
158
+ cvssv3Score = result .get ("severity" ).get ("cvssv3" , {}).get ("base_score" , 0 )
159
+ severity = Level .LOW
160
+ if cvssv3Score > 3.9 :
161
+ severity = Level .MED
162
+ if cvssv3Score > 6.9 :
163
+ severity = Level .HIGH
164
+ if cvssv3Score > 8.9 :
165
+ severity = Level .CRIT
166
+
141
167
findings .append (
142
168
{
143
- "id" : result [ 4 ] ,
144
- "title" : f"{ result [ 4 ] } : { result [ 0 ] } " ,
145
- "description" : result [ 3 ] ,
169
+ "id" : vulnerabilityId ,
170
+ "title" : f"{ vulnerabilityId } : { packageName } " ,
171
+ "description" : description ,
146
172
"file" : "Project Requirements" ,
147
173
"evidence" : [
148
174
{
149
175
"selected" : True ,
150
176
"line" : 0 ,
151
- "content" : f" { result [ 0 ] } version= { result [ 2 ] } affects { result [ 1 ] } " ,
177
+ "content" : content ,
152
178
}
153
179
],
154
- "severity" : Level . MED ,
180
+ "severity" : severity ,
155
181
"confidence" : Level .HIGH ,
156
182
"line" : "Unknown" ,
157
- "_other" : {"id" : result [ 4 ] , "affected " : result [ 1 ] },
183
+ "_other" : {"id" : vulnerabilityId , "affectedVersions " : affectedVersions },
158
184
}
159
185
)
160
186
return findings
@@ -227,17 +253,18 @@ def dodgy(scanDir=".") -> list[Finding]:
227
253
rawResults = _doSysExec (f"dodgy { scanDir } -i { ' ' .join (EXCLUDED )} " )[1 ]
228
254
results = loads (rawResults )["warnings" ]
229
255
for result in results :
230
- file = "./" + result ["path" ].replace ("\\ " , "/" )
256
+ file = "./" + result .get ("path" ).replace ("\\ " , "/" )
257
+ message = result .get ("message" )
231
258
findings .append (
232
259
{
233
- "id" : result [ "code" ] ,
234
- "title" : result [ " message" ] ,
235
- "description" : result [ " message" ] ,
260
+ "id" : result . get ( "code" ) ,
261
+ "title" : message ,
262
+ "description" : message ,
236
263
"file" : file ,
237
- "evidence" : extractEvidence (result [ "line" ] , file ),
264
+ "evidence" : extractEvidence (result . get ( "line" ) , file ),
238
265
"severity" : Level .MED ,
239
266
"confidence" : Level .MED ,
240
- "line" : result [ "line" ] ,
267
+ "line" : result . get ( "line" ) ,
241
268
"_other" : {},
242
269
}
243
270
)
@@ -269,29 +296,31 @@ def dlint(scanDir=".") -> list[Finding]:
269
296
"info" : Level .LOW ,
270
297
"minor" : Level .MED ,
271
298
"major" : Level .MED ,
272
- "critical" : Level .HIGH ,
273
- "blocker" : Level .HIGH ,
299
+ "critical" : Level .CRIT ,
300
+ "blocker" : Level .CRIT ,
274
301
}
275
302
for filePath , scanResults in jsonResults .items ():
276
- for scanResult in scanResults :
303
+ for result in scanResults :
304
+ message = f"{ result .get ('check_name' )} : " f"{ result .get ('description' )} "
305
+ positions = result .get ("location" , {}).get ("positions" , {})
306
+ line = positions .get ("begin" , {}).get ("line" , 0 )
277
307
findings .append (
278
308
{
279
- "id" : scanResult [ "check_name" ] ,
280
- "title" : f" { scanResult [ 'check_name' ] } : " f" { scanResult [ 'description' ] } " ,
281
- "description" : f" { scanResult [ 'check_name' ] } : " f" { scanResult [ 'description' ] } " ,
309
+ "id" : result . get ( "check_name" ) ,
310
+ "title" : message ,
311
+ "description" : message ,
282
312
"file" : filePath ,
283
313
"evidence" : extractEvidence (
284
- scanResult [ "location" ][ "positions" ][ "begin" ][ " line" ] ,
314
+ line ,
285
315
filePath ,
286
316
),
287
- "severity" : levelMap [scanResult [ "severity" ] ],
317
+ "severity" : levelMap [result . get ( "severity" ) ],
288
318
"confidence" : Level .MED ,
289
- "line" : scanResult [ "location" ][ "positions" ][ "begin" ][ " line" ] ,
319
+ "line" : line ,
290
320
"_other" : {
291
- "col" : scanResult ["location" ]["positions" ]["begin" ]["column" ],
292
- "start" : scanResult ["location" ]["positions" ]["begin" ]["line" ],
293
- "end" : scanResult ["location" ]["positions" ]["end" ]["line" ],
294
- "fingerprint" : scanResult ["fingerprint" ],
321
+ "start" : line ,
322
+ "end" : positions .get ("end" , {}).get ("line" , 0 ),
323
+ "fingerprint" : result .get ("fingerprint" ),
295
324
},
296
325
}
297
326
)
@@ -324,23 +353,24 @@ def semgrep(scanDir=".") -> list[Finding]:
324
353
)["results" ]
325
354
levelMap = {"INFO" : Level .LOW , "WARNING" : Level .MED , "ERROR" : Level .HIGH }
326
355
for result in results :
327
- filePath = result [ "Target" ] .replace ("\\ " , "/" )
356
+ filePath = result . get ( "Target" ) .replace ("\\ " , "/" )
328
357
file = f"{ scanDir } /{ filePath } "
358
+ resultId = result .get ("check_id" , "" )
359
+ extras = result .get ("extra" , {})
360
+ line = result .get ("start" , {}).get ("line" , 0 )
329
361
findings .append (
330
362
{
331
- "id" : result [ "check_id" ] ,
332
- "title" : result [ "check_id" ] .split ("." )[- 1 ],
333
- "description" : result [ "extra" ][ " message"] .strip (),
363
+ "id" : resultId ,
364
+ "title" : resultId .split ("." )[- 1 ],
365
+ "description" : extras ( " message") .strip (),
334
366
"file" : file ,
335
- "evidence" : extractEvidence (result [ "start" ][ " line" ] , file ),
336
- "severity" : levelMap [result [ "extra" ][ " severity"] ],
367
+ "evidence" : extractEvidence (line , file ),
368
+ "severity" : levelMap [extras ( " severity") ],
337
369
"confidence" : Level .HIGH ,
338
- "line" : result [ "start" ][ " line" ] ,
370
+ "line" : line ,
339
371
"_other" : {
340
- "col" : result ["start" ]["col" ],
341
- "start" : result ["start" ],
342
- "end" : result ["end" ],
343
- "extra" : result ["extra" ],
372
+ "end" : result .get ("end" ),
373
+ "extra" : extras ,
344
374
},
345
375
}
346
376
)
0 commit comments