1414
1515import codeql.ruby.AST
1616import codeql.ruby.DataFlow
17- import DataFlow:: PathGraph
1817import codeql.ruby.TaintTracking
1918import codeql.ruby.controlflow.CfgNodes
2019
@@ -132,14 +131,12 @@ class CredentialSink extends DataFlow::Node {
132131 CredentialSink ( ) { isCredentialSink ( this ) }
133132}
134133
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 }
137136
138- override predicate isSource ( DataFlow:: Node source ) { source instanceof HardcodedValueSource }
137+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof CredentialSink }
139138
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 ) {
143140 exists ( ExprNodes:: BinaryOperationCfgNode binop |
144141 (
145142 binop .getLeftOperand ( ) = node1 .asExpr ( ) or
@@ -152,7 +149,11 @@ class HardcodedCredentialsConfiguration extends DataFlow::Configuration {
152149 }
153150}
154151
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 )
157158select source .getNode ( ) , source , sink , "This hardcoded value is $@." , sink .getNode ( ) ,
158159 "used as credentials"
0 commit comments