Skip to content

Commit d83444c

Browse files
ahmed-farid-devsmowton
authored andcommitted
Update TimingAttackAgainstHeader.ql
1 parent e79c0ea commit d83444c

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,17 @@ import semmle.code.java.dataflow.FlowSources
1616
import semmle.code.java.dataflow.TaintTracking
1717
import DataFlow::PathGraph
1818

19+
private class NonConstantTimeComparisonCall extends StaticMethodAccess {
20+
NonConstantTimeComparisonCall() {
21+
this.getMethod()
22+
.hasQualifiedName("org.apache.commons.lang3", "StringUtils",
23+
["equals", "equalsAny", "equalsAnyIgnoreCase", "equalsIgnoreCase"])
24+
}
25+
}
26+
1927
private class NonConstantTimeEqualsCall extends MethodAccess {
2028
NonConstantTimeEqualsCall() {
21-
this.getMethod().hasQualifiedName("java.lang", "String", ["equals", "contentEquals", "equalsIgnoreCase"]) or
22-
this.getMethod().hasQualifiedName("java.nio", "ByteBuffer", ["equals", "compareTo"])
29+
this.getMethod().hasQualifiedName("java.lang", "String", ["equals", "contentEquals", "equalsIgnoreCase"])
2330
}
2431
}
2532

@@ -29,6 +36,12 @@ private predicate isNonConstantEqualsCallArgument(Expr e) {
2936
)
3037
}
3138

39+
private predicate isNonConstantComparisonCallArgument(Expr p) {
40+
exists(NonConstantTimeComparisonCall call |
41+
p = [call.getArgument(0), call.getArgument(1)]
42+
)
43+
}
44+
3245
class ClientSuppliedIpTokenCheck extends DataFlow::Node {
3346
ClientSuppliedIpTokenCheck() {
3447
exists(MethodAccess ma |
@@ -47,7 +60,10 @@ class NonConstantTimeComparisonConfig extends TaintTracking::Configuration {
4760

4861
override predicate isSource(DataFlow::Node source) { source instanceof ClientSuppliedIpTokenCheck }
4962

50-
override predicate isSink(DataFlow::Node sink) { isNonConstantEqualsCallArgument(sink.asExpr()) }
63+
override predicate isSink(DataFlow::Node sink) {
64+
isNonConstantEqualsCallArgument(sink.asExpr()) or
65+
isNonConstantComparisonCallArgument(sink.asExpr())
66+
}
5167
}
5268

5369
from DataFlow::PathNode source, DataFlow::PathNode sink, NonConstantTimeComparisonConfig conf

0 commit comments

Comments
 (0)