@@ -16,23 +16,24 @@ import python
1616import semmle.python.dataflow.new.DataFlow
1717import semmle.python.dataflow.new.TaintTracking
1818import experimental.semmle.python.security.TimingAttack
19- import DataFlow:: PathGraph
2019
2120/**
2221 * A configuration that tracks data flow from cryptographic operations
2322 * to Equality test.
2423 */
25- class TimingAttackAgainsthash extends TaintTracking :: Configuration {
26- TimingAttackAgainsthash ( ) { this = "TimingAttackAgainsthash" }
24+ private module TimingAttackAgainstHashConfig implements DataFlow :: ConfigSig {
25+ predicate isSource ( DataFlow :: Node source ) { source instanceof ProduceCryptoCall }
2726
28- override predicate isSource ( DataFlow:: Node source ) { source instanceof ProduceCryptoCall }
29-
30- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof NonConstantTimeComparisonSink }
27+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof NonConstantTimeComparisonSink }
3128}
3229
33- from TimingAttackAgainsthash config , DataFlow:: PathNode source , DataFlow:: PathNode sink
30+ module TimingAttackAgainstHashFlow = TaintTracking:: Global< TimingAttackAgainstHashConfig > ;
31+
32+ import TimingAttackAgainstHashFlow:: PathGraph
33+
34+ from TimingAttackAgainstHashFlow:: PathNode source , TimingAttackAgainstHashFlow:: PathNode sink
3435where
35- config . hasFlowPath ( source , sink ) and
36+ TimingAttackAgainstHashFlow :: flowPath ( source , sink ) and
3637 sink .getNode ( ) .( NonConstantTimeComparisonSink ) .includesUserInput ( )
3738select sink .getNode ( ) , source , sink , "Timing attack against $@ validation." ,
3839 source .getNode ( ) .( ProduceCryptoCall ) .getResultType ( ) , "message"
0 commit comments