Skip to content

Commit 157b7ce

Browse files
committed
Refactor TimingAttackAgainstHeader
1 parent a186b77 commit 157b7ce

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

java/ql/src/experimental/Security/CWE/CWE-208/TimingAttackAgainstHeader.ql

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import java
1515
import semmle.code.java.dataflow.FlowSources
1616
import semmle.code.java.dataflow.TaintTracking
17-
import DataFlow::PathGraph
17+
import NonConstantTimeComparisonFlow::PathGraph
1818

1919
/** A static method that uses a non-constant-time algorithm for comparing inputs. */
2020
private class NonConstantTimeComparisonCall extends StaticMethodAccess {
@@ -54,20 +54,18 @@ class ClientSuppliedIpTokenCheck extends DataFlow::Node {
5454
}
5555
}
5656

57-
class NonConstantTimeComparisonConfig extends TaintTracking::Configuration {
58-
NonConstantTimeComparisonConfig() { this = "NonConstantTimeComparisonConfig" }
57+
module NonConstantTimeComparisonConfig implements DataFlow::ConfigSig {
58+
predicate isSource(DataFlow::Node source) { source instanceof ClientSuppliedIpTokenCheck }
5959

60-
override predicate isSource(DataFlow::Node source) {
61-
source instanceof ClientSuppliedIpTokenCheck
62-
}
63-
64-
override predicate isSink(DataFlow::Node sink) {
60+
predicate isSink(DataFlow::Node sink) {
6561
isNonConstantEqualsCallArgument(sink.asExpr()) or
6662
isNonConstantComparisonCallArgument(sink.asExpr())
6763
}
6864
}
6965

70-
from DataFlow::PathNode source, DataFlow::PathNode sink, NonConstantTimeComparisonConfig conf
71-
where conf.hasFlowPath(source, sink)
66+
module NonConstantTimeComparisonFlow = TaintTracking::Global<NonConstantTimeComparisonConfig>;
67+
68+
from NonConstantTimeComparisonFlow::PathNode source, NonConstantTimeComparisonFlow::PathNode sink
69+
where NonConstantTimeComparisonFlow::flowPath(source, sink)
7270
select sink.getNode(), source, sink, "Possible timing attack against $@ validation.",
7371
source.getNode(), "client-supplied token"

0 commit comments

Comments
 (0)