@@ -17,21 +17,22 @@ import python
1717import semmle.python.dataflow.new.DataFlow
1818import semmle.python.dataflow.new.TaintTracking
1919import experimental.semmle.python.security.TimingAttack
20- import DataFlow:: PathGraph
2120
2221/**
2322 * A configuration that tracks data flow from cryptographic operations
2423 * to equality test
2524 */
26- class PossibleTimingAttackAgainstHash extends TaintTracking :: Configuration {
27- PossibleTimingAttackAgainstHash ( ) { this = "PossibleTimingAttackAgainstHash" }
25+ private module PossibleTimingAttackAgainstHash implements DataFlow :: ConfigSig {
26+ predicate isSource ( DataFlow :: Node source ) { source instanceof ProduceCryptoCall }
2827
29- override predicate isSource ( DataFlow:: Node source ) { source instanceof ProduceCryptoCall }
30-
31- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof NonConstantTimeComparisonSink }
28+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof NonConstantTimeComparisonSink }
3229}
3330
34- from PossibleTimingAttackAgainstHash config , DataFlow:: PathNode source , DataFlow:: PathNode sink
35- where config .hasFlowPath ( source , sink )
31+ module PossibleTimingAttackAgainstHashFlow = TaintTracking:: Global< PossibleTimingAttackAgainstHash > ;
32+
33+ import PossibleTimingAttackAgainstHashFlow:: PathGraph
34+
35+ from PossibleTimingAttackAgainstHashFlow:: PathNode source , PossibleTimingAttackAgainstHashFlow:: PathNode sink
36+ where PossibleTimingAttackAgainstHashFlow:: flowPath ( source , sink )
3637select sink .getNode ( ) , source , sink , "Possible Timing attack against $@ validation." ,
3738 source .getNode ( ) .( ProduceCryptoCall ) .getResultType ( ) , "message"
0 commit comments