@@ -16,10 +16,17 @@ import semmle.code.java.dataflow.FlowSources
16
16
import semmle.code.java.dataflow.TaintTracking
17
17
import DataFlow:: PathGraph
18
18
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
+
19
27
private class NonConstantTimeEqualsCall extends MethodAccess {
20
28
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" ] )
23
30
}
24
31
}
25
32
@@ -29,6 +36,12 @@ private predicate isNonConstantEqualsCallArgument(Expr e) {
29
36
)
30
37
}
31
38
39
+ private predicate isNonConstantComparisonCallArgument ( Expr p ) {
40
+ exists ( NonConstantTimeComparisonCall call |
41
+ p = [ call .getArgument ( 0 ) , call .getArgument ( 1 ) ]
42
+ )
43
+ }
44
+
32
45
class ClientSuppliedIpTokenCheck extends DataFlow:: Node {
33
46
ClientSuppliedIpTokenCheck ( ) {
34
47
exists ( MethodAccess ma |
@@ -47,7 +60,10 @@ class NonConstantTimeComparisonConfig extends TaintTracking::Configuration {
47
60
48
61
override predicate isSource ( DataFlow:: Node source ) { source instanceof ClientSuppliedIpTokenCheck }
49
62
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
+ }
51
67
}
52
68
53
69
from DataFlow:: PathNode source , DataFlow:: PathNode sink , NonConstantTimeComparisonConfig conf
0 commit comments