14
14
import java
15
15
import semmle.code.java.dataflow.FlowSources
16
16
import semmle.code.java.security.ResponseSplitting
17
- import DataFlow:: PathGraph
18
17
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 ) {
23
20
source instanceof RemoteFlowSource and
24
21
not source instanceof SafeHeaderSplittingSource
25
22
}
26
23
27
- override predicate isSink ( DataFlow:: Node sink ) { sink instanceof HeaderSplittingSink }
24
+ predicate isSink ( DataFlow:: Node sink ) { sink instanceof HeaderSplittingSink }
28
25
29
- override predicate isSanitizer ( DataFlow:: Node node ) {
26
+ predicate isBarrier ( DataFlow:: Node node ) {
30
27
node .getType ( ) instanceof PrimitiveType
31
28
or
32
29
node .getType ( ) instanceof BoxedType
@@ -45,8 +42,12 @@ class ResponseSplittingConfig extends TaintTracking::Configuration {
45
42
}
46
43
}
47
44
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 )
50
51
select sink .getNode ( ) , source , sink ,
51
52
"This header depends on a $@, which may cause a response-splitting vulnerability." ,
52
53
source .getNode ( ) , "user-provided value"
0 commit comments