@@ -75,15 +75,17 @@ def extractEvidence(desiredLine: int, file: str) -> list[Line]:
7575 """
7676 with open (file , encoding = "utf-8" , errors = "ignore" ) as fileContents :
7777 start = max (desiredLine - 3 , 0 )
78- for line in range (start ):
79- next (fileContents )
8078 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 ):
8383 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
8789 return content
8890
8991
@@ -115,20 +117,22 @@ def bandit(scanDir=".") -> list[Finding]:
115117 )[1 ]
116118 )["results" ]
117119 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" )
119123 findings .append (
120124 {
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" ) ,
124128 "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 ,
129133 "_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" ) ,
132136 },
133137 }
134138 )
@@ -138,23 +142,45 @@ def bandit(scanDir=".") -> list[Finding]:
138142def _doSafetyProcessing (results : dict [str , Any ]) -> list [Finding ]:
139143 findings = []
140144 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+
141167 findings .append (
142168 {
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 ,
146172 "file" : "Project Requirements" ,
147173 "evidence" : [
148174 {
149175 "selected" : True ,
150176 "line" : 0 ,
151- "content" : f" { result [ 0 ] } version= { result [ 2 ] } affects { result [ 1 ] } " ,
177+ "content" : content ,
152178 }
153179 ],
154- "severity" : Level . MED ,
180+ "severity" : severity ,
155181 "confidence" : Level .HIGH ,
156182 "line" : "Unknown" ,
157- "_other" : {"id" : result [ 4 ] , "affected " : result [ 1 ] },
183+ "_other" : {"id" : vulnerabilityId , "affectedVersions " : affectedVersions },
158184 }
159185 )
160186 return findings
@@ -227,17 +253,18 @@ def dodgy(scanDir=".") -> list[Finding]:
227253 rawResults = _doSysExec (f"dodgy { scanDir } -i { ' ' .join (EXCLUDED )} " )[1 ]
228254 results = loads (rawResults )["warnings" ]
229255 for result in results :
230- file = "./" + result ["path" ].replace ("\\ " , "/" )
256+ file = "./" + result .get ("path" ).replace ("\\ " , "/" )
257+ message = result .get ("message" )
231258 findings .append (
232259 {
233- "id" : result [ "code" ] ,
234- "title" : result [ " message" ] ,
235- "description" : result [ " message" ] ,
260+ "id" : result . get ( "code" ) ,
261+ "title" : message ,
262+ "description" : message ,
236263 "file" : file ,
237- "evidence" : extractEvidence (result [ "line" ] , file ),
264+ "evidence" : extractEvidence (result . get ( "line" ) , file ),
238265 "severity" : Level .MED ,
239266 "confidence" : Level .MED ,
240- "line" : result [ "line" ] ,
267+ "line" : result . get ( "line" ) ,
241268 "_other" : {},
242269 }
243270 )
@@ -269,29 +296,31 @@ def dlint(scanDir=".") -> list[Finding]:
269296 "info" : Level .LOW ,
270297 "minor" : Level .MED ,
271298 "major" : Level .MED ,
272- "critical" : Level .HIGH ,
273- "blocker" : Level .HIGH ,
299+ "critical" : Level .CRIT ,
300+ "blocker" : Level .CRIT ,
274301 }
275302 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 )
277307 findings .append (
278308 {
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 ,
282312 "file" : filePath ,
283313 "evidence" : extractEvidence (
284- scanResult [ "location" ][ "positions" ][ "begin" ][ " line" ] ,
314+ line ,
285315 filePath ,
286316 ),
287- "severity" : levelMap [scanResult [ "severity" ] ],
317+ "severity" : levelMap [result . get ( "severity" ) ],
288318 "confidence" : Level .MED ,
289- "line" : scanResult [ "location" ][ "positions" ][ "begin" ][ " line" ] ,
319+ "line" : line ,
290320 "_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" ),
295324 },
296325 }
297326 )
@@ -324,23 +353,24 @@ def semgrep(scanDir=".") -> list[Finding]:
324353 )["results" ]
325354 levelMap = {"INFO" : Level .LOW , "WARNING" : Level .MED , "ERROR" : Level .HIGH }
326355 for result in results :
327- filePath = result [ "Target" ] .replace ("\\ " , "/" )
356+ filePath = result . get ( "Target" ) .replace ("\\ " , "/" )
328357 file = f"{ scanDir } /{ filePath } "
358+ resultId = result .get ("check_id" , "" )
359+ extras = result .get ("extra" , {})
360+ line = result .get ("start" , {}).get ("line" , 0 )
329361 findings .append (
330362 {
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 (),
334366 "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") ],
337369 "confidence" : Level .HIGH ,
338- "line" : result [ "start" ][ " line" ] ,
370+ "line" : line ,
339371 "_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 ,
344374 },
345375 }
346376 )
0 commit comments