1414import java
1515import semmle.code.java.dataflow.FlowSources
1616import semmle.code.java.security.ResponseSplitting
17- import DataFlow:: PathGraph
1817
19- class ResponseSplittingConfig extends TaintTracking:: Configuration {
20- ResponseSplittingConfig ( ) { this = "ResponseSplittingConfig" }
21-
22- override predicate isSource ( DataFlow:: Node source ) {
18+ module ResponseSplittingConfig implements DataFlow:: ConfigSig {
19+ predicate isSource ( DataFlow:: Node source ) {
2320 source instanceof RemoteFlowSource and
2421 not source instanceof SafeHeaderSplittingSource
2522 }
2623
27- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof HeaderSplittingSink }
24+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof HeaderSplittingSink }
2825
29- override predicate isSanitizer ( DataFlow:: Node node ) {
26+ predicate isBarrier ( DataFlow:: Node node ) {
3027 node .getType ( ) instanceof PrimitiveType
3128 or
3229 node .getType ( ) instanceof BoxedType
@@ -45,8 +42,12 @@ class ResponseSplittingConfig extends TaintTracking::Configuration {
4542 }
4643}
4744
48- from DataFlow:: PathNode source , DataFlow:: PathNode sink , ResponseSplittingConfig conf
49- where conf .hasFlowPath ( source , sink )
45+ module ResponseSplitting = TaintTracking:: Make< ResponseSplittingConfig > ;
46+
47+ import ResponseSplitting:: PathGraph
48+
49+ from ResponseSplitting:: PathNode source , ResponseSplitting:: PathNode sink
50+ where ResponseSplitting:: hasFlowPath ( source , sink )
5051select sink .getNode ( ) , source , sink ,
5152 "This header depends on a $@, which may cause a response-splitting vulnerability." ,
5253 source .getNode ( ) , "user-provided value"
0 commit comments