@@ -327,38 +327,38 @@ def how_vulnerable(
327327 if current_node in sanitiser_nodes :
328328 vuln_deets ['sanitiser' ] = current_node
329329 vuln_deets ['confident' ] = True
330- return VulnerabilityType .SANITISED
330+ return VulnerabilityType .SANITISED , interactive
331331
332332 if isinstance (current_node , BBorBInode ):
333333 if current_node .func_name in blackbox_mapping ['propagates' ]:
334334 continue
335335 elif current_node .func_name in blackbox_mapping ['does_not_propagate' ]:
336- return VulnerabilityType .FALSE
336+ return VulnerabilityType .FALSE , interactive
337337 elif interactive :
338338 user_says = input (
339- 'Is the return value of {} with tainted argument "{}" vulnerable? ([Y]es/[N]o/[S]top)' .format (
339+ 'Is the return value of {} with tainted argument "{}" vulnerable? ([Y]es/[N]o/[S]top asking )' .format (
340340 current_node .label ,
341341 chain [i - 1 ].left_hand_side
342342 )
343343 ).lower ()
344344 if user_says .startswith ('s' ):
345345 interactive = False
346346 vuln_deets ['unknown_assignment' ] = current_node
347- return VulnerabilityType .UNKNOWN
347+ return VulnerabilityType .UNKNOWN , interactive
348348 if user_says .startswith ('n' ):
349349 blackbox_mapping ['does_not_propagate' ].append (current_node .func_name )
350- return VulnerabilityType .FALSE
350+ return VulnerabilityType .FALSE , interactive
351351 blackbox_mapping ['propagates' ].append (current_node .func_name )
352352 else :
353353 vuln_deets ['unknown_assignment' ] = current_node
354- return VulnerabilityType .UNKNOWN
354+ return VulnerabilityType .UNKNOWN , interactive
355355
356356 if potential_sanitiser :
357357 vuln_deets ['sanitiser' ] = potential_sanitiser
358358 vuln_deets ['confident' ] = False
359- return VulnerabilityType .SANITISED
359+ return VulnerabilityType .SANITISED , interactive
360360
361- return VulnerabilityType .TRUE
361+ return VulnerabilityType .TRUE , interactive
362362
363363
364364def get_tainted_node_in_sink_args (
@@ -443,12 +443,13 @@ def get_vulnerability(
443443 cfg .nodes ,
444444 lattice
445445 )
446+
446447 for chain in get_vulnerability_chains (
447448 source .cfg_node ,
448449 sink .cfg_node ,
449450 def_use
450451 ):
451- vulnerability_type = how_vulnerable (
452+ vulnerability_type , interactive = how_vulnerable (
452453 chain ,
453454 blackbox_mapping ,
454455 sanitiser_nodes ,
@@ -462,9 +463,9 @@ def get_vulnerability(
462463
463464 vuln_deets ['reassignment_nodes' ] = chain
464465
465- return vuln_factory (vulnerability_type )(** vuln_deets )
466+ return vuln_factory (vulnerability_type )(** vuln_deets ), interactive
466467
467- return None
468+ return None , interactive
468469
469470
470471def find_vulnerabilities_in_cfg (
@@ -495,7 +496,7 @@ def find_vulnerabilities_in_cfg(
495496 )
496497 for sink in triggers .sinks :
497498 for source in triggers .sources :
498- vulnerability = get_vulnerability (
499+ vulnerability , interactive = get_vulnerability (
499500 source ,
500501 sink ,
501502 triggers ,
0 commit comments