@@ -5,8 +5,12 @@ import semmle.code.java.dataflow.TaintTracking
55import semmle.code.java.dataflow.FlowSources
66import semmle.code.java.security.TemplateInjection
77
8- /** A taint tracking configuration to reason about server-side template injection (SST) vulnerabilities */
9- class TemplateInjectionFlowConfig extends TaintTracking:: Configuration {
8+ /**
9+ * DEPRECATED: Use `TemplateInjectionFlow` instead.
10+ *
11+ * A taint tracking configuration to reason about server-side template injection (SST) vulnerabilities
12+ */
13+ deprecated class TemplateInjectionFlowConfig extends TaintTracking:: Configuration {
1014 TemplateInjectionFlowConfig ( ) { this = "TemplateInjectionFlowConfig" }
1115
1216 override predicate isSource ( DataFlow:: Node source , DataFlow:: FlowState state ) {
@@ -36,3 +40,35 @@ class TemplateInjectionFlowConfig extends TaintTracking::Configuration {
3640 any ( TemplateInjectionAdditionalTaintStep a ) .isAdditionalTaintStep ( node1 , state1 , node2 , state2 )
3741 }
3842}
43+
44+ /** A taint tracking configuration to reason about server-side template injection (SST) vulnerabilities */
45+ private module TemplateInjectionFlowConfig implements DataFlow:: StateConfigSig {
46+ class FlowState = DataFlow:: FlowState ;
47+
48+ predicate isSource ( DataFlow:: Node source , FlowState state ) {
49+ source .( TemplateInjectionSource ) .hasState ( state )
50+ }
51+
52+ predicate isSink ( DataFlow:: Node sink , FlowState state ) {
53+ sink .( TemplateInjectionSink ) .hasState ( state )
54+ }
55+
56+ predicate isBarrier ( DataFlow:: Node sanitizer ) { sanitizer instanceof TemplateInjectionSanitizer }
57+
58+ predicate isBarrier ( DataFlow:: Node sanitizer , FlowState state ) {
59+ sanitizer .( TemplateInjectionSanitizerWithState ) .hasState ( state )
60+ }
61+
62+ predicate isAdditionalFlowStep ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
63+ any ( TemplateInjectionAdditionalTaintStep a ) .isAdditionalTaintStep ( node1 , node2 )
64+ }
65+
66+ predicate isAdditionalFlowStep (
67+ DataFlow:: Node node1 , FlowState state1 , DataFlow:: Node node2 , FlowState state2
68+ ) {
69+ any ( TemplateInjectionAdditionalTaintStep a ) .isAdditionalTaintStep ( node1 , state1 , node2 , state2 )
70+ }
71+ }
72+
73+ /** Tracks server-side template injection (SST) vulnerabilities */
74+ module TemplateInjectionFlow = TaintTracking:: MakeWithState< TemplateInjectionFlowConfig > ;
0 commit comments