14
14
15
15
import codeql.ruby.AST
16
16
import codeql.ruby.DataFlow
17
- import DataFlow:: PathGraph
18
17
import codeql.ruby.TaintTracking
19
18
import codeql.ruby.controlflow.CfgNodes
20
19
@@ -132,14 +131,12 @@ class CredentialSink extends DataFlow::Node {
132
131
CredentialSink ( ) { isCredentialSink ( this ) }
133
132
}
134
133
135
- class HardcodedCredentialsConfiguration extends DataFlow:: Configuration {
136
- HardcodedCredentialsConfiguration ( ) { this = "HardcodedCredentialsConfiguration" }
134
+ private module HardcodedCredentialsConfig implements DataFlow:: ConfigSig {
135
+ predicate isSource ( DataFlow :: Node source ) { source instanceof HardcodedValueSource }
137
136
138
- override predicate isSource ( DataFlow:: Node source ) { source instanceof HardcodedValueSource }
137
+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof CredentialSink }
139
138
140
- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof CredentialSink }
141
-
142
- override predicate isAdditionalFlowStep ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
139
+ predicate isAdditionalFlowStep ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
143
140
exists ( ExprNodes:: BinaryOperationCfgNode binop |
144
141
(
145
142
binop .getLeftOperand ( ) = node1 .asExpr ( ) or
@@ -152,7 +149,11 @@ class HardcodedCredentialsConfiguration extends DataFlow::Configuration {
152
149
}
153
150
}
154
151
155
- from DataFlow:: PathNode source , DataFlow:: PathNode sink , HardcodedCredentialsConfiguration conf
156
- where conf .hasFlowPath ( source , sink )
152
+ private module HardcodedCredentialsFlow = DataFlow:: Global< HardcodedCredentialsConfig > ;
153
+
154
+ private import HardcodedCredentialsFlow:: PathGraph
155
+
156
+ from HardcodedCredentialsFlow:: PathNode source , HardcodedCredentialsFlow:: PathNode sink
157
+ where HardcodedCredentialsFlow:: flowPath ( source , sink )
157
158
select source .getNode ( ) , source , sink , "This hardcoded value is $@." , sink .getNode ( ) ,
158
159
"used as credentials"
0 commit comments