11/** Provides a taint-tracking model to reason about Data-Source name injection vulnerabilities. */
22
33import go
4- import DataFlow:: PathGraph
54import semmle.go.dataflow.barrierguardutil.RegexpCheck
65
76/** A source for `DsnInjection` taint-flow configuration. */
87abstract class Source extends DataFlow:: Node { }
98
10- /** A taint-tracking configuration to reason about Data Source Name injection vulnerabilities. */
11- class DsnInjection extends TaintTracking:: Configuration {
9+ /**
10+ * DEPRECATED: Use `DsnInjectionFlow` instead.
11+ *
12+ * A taint-tracking configuration to reason about Data Source Name injection vulnerabilities.
13+ */
14+ deprecated class DsnInjection extends TaintTracking:: Configuration {
1215 DsnInjection ( ) { this = "DsnInjection" }
1316
1417 override predicate isSource ( DataFlow:: Node node ) { node instanceof Source }
@@ -25,6 +28,20 @@ class DsnInjection extends TaintTracking::Configuration {
2528 override predicate isSanitizer ( DataFlow:: Node node ) { node instanceof RegexpCheckBarrier }
2629}
2730
31+ private module DsnInjectionConfig implements DataFlow:: ConfigSig {
32+ predicate isSource ( DataFlow:: Node source ) { source instanceof Source }
33+
34+ predicate isSink ( DataFlow:: Node sink ) {
35+ exists ( Function f | f .hasQualifiedName ( "database/sql" , "Open" ) |
36+ sink = f .getACall ( ) .getArgument ( 1 )
37+ )
38+ }
39+
40+ predicate isBarrier ( DataFlow:: Node node ) { node instanceof RegexpCheckBarrier }
41+ }
42+
43+ module DsnInjectionFlow = TaintTracking:: Global< DsnInjectionConfig > ;
44+
2845/** A model of a function which decodes or unmarshals a tainted input, propagating taint from any argument to either the method receiver or return value. */
2946private class DecodeFunctionModel extends TaintTracking:: FunctionModel {
3047 DecodeFunctionModel ( ) {
0 commit comments