diff --git a/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql b/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql index 8f7a49db36d..ff24f882005 100644 --- a/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql +++ b/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql @@ -11,15 +11,13 @@ */ import csharp -import DataFlow::PathGraph +import InsecureSqlConnection::PathGraph /** * A data flow configuration for tracking strings passed to `SqlConnection[StringBuilder]` instances. */ -class TaintTrackingConfiguration extends DataFlow::Configuration { - TaintTrackingConfiguration() { this = "TaintTrackingConfiguration" } - - override predicate isSource(DataFlow::Node source) { +module InsecureSqlConnectionConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { exists(string s | s = source.asExpr().(StringLiteral).getValue().toLowerCase() | s.matches("%encrypt=false%") or @@ -27,7 +25,7 @@ class TaintTrackingConfiguration extends DataFlow::Configuration { ) } - override predicate isSink(DataFlow::Node sink) { + predicate isSink(DataFlow::Node sink) { exists(ObjectCreation oc | oc.getRuntimeArgument(0) = sink.asExpr() and ( @@ -39,8 +37,13 @@ class TaintTrackingConfiguration extends DataFlow::Configuration { } } -from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink -where c.hasFlowPath(source, sink) +/** + * A data flow configuration for tracking strings passed to `SqlConnection[StringBuilder]` instances. + */ +module InsecureSqlConnection = DataFlow::Global; + +from InsecureSqlConnection::PathNode source, InsecureSqlConnection::PathNode sink +where InsecureSqlConnection::flowPath(source, sink) select sink.getNode(), source, sink, "$@ flows to this SQL connection and does not specify `Encrypt=True`.", source.getNode(), "Connection string"