Skip to content

Commit 5f560e0

Browse files
committed
Extract HeaderSplittingSink and WhitelistedSource
- Extract `HeaderSplittingSink` and `WhitelistedSource` into an importable library. - Rename the existing `HeaderSplittingSink` implementation to `ServletHeaderSplittingSink`.
1 parent c166fee commit 5f560e0

File tree

4 files changed

+19
-7
lines changed

4 files changed

+19
-7
lines changed

java/ql/src/Security/CWE/CWE-113/ResponseSplitting.ql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
*/
1212

1313
import java
14-
import ResponseSplitting
14+
import ServletResponseSplitting
1515
import DataFlow::PathGraph
1616

1717
class ResponseSplittingConfig extends TaintTracking::Configuration {
1818
ResponseSplittingConfig() { this = "ResponseSplittingConfig" }
1919

2020
override predicate isSource(DataFlow::Node source) {
2121
source instanceof RemoteFlowSource and
22-
not source instanceof WhitelistedSource
22+
not source instanceof TrustedSource
2323
}
2424

2525
override predicate isSink(DataFlow::Node sink) { sink instanceof HeaderSplittingSink }

java/ql/src/Security/CWE/CWE-113/ResponseSplittingLocal.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import java
1414
import semmle.code.java.dataflow.FlowSources
15-
import ResponseSplitting
15+
import ServletResponseSplitting
1616
import DataFlow::PathGraph
1717

1818
class ResponseSplittingLocalConfig extends TaintTracking::Configuration {

java/ql/src/Security/CWE/CWE-113/ResponseSplitting.qll renamed to java/ql/src/Security/CWE/CWE-113/ServletResponseSplitting.qll

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import java
22
import semmle.code.java.frameworks.Servlets
33
import semmle.code.java.dataflow.FlowSources
4+
import semmle.code.java.security.ResponseSplitting
45

56
/**
67
* Header-splitting sinks. Expressions that end up in an HTTP header.
78
*/
8-
class HeaderSplittingSink extends DataFlow::ExprNode {
9-
HeaderSplittingSink() {
9+
class ServletHeaderSplittingSink extends HeaderSplittingSink {
10+
ServletHeaderSplittingSink() {
1011
exists(ResponseAddCookieMethod m, MethodAccess ma |
1112
ma.getMethod() = m and
1213
this.getExpr() = ma.getArgument(0)
@@ -30,8 +31,8 @@ class HeaderSplittingSink extends DataFlow::ExprNode {
3031
}
3132
}
3233

33-
class WhitelistedSource extends DataFlow::ExprNode {
34-
WhitelistedSource() {
34+
class TrustedServletSource extends TrustedSource {
35+
TrustedServletSource() {
3536
this.asExpr().(MethodAccess).getMethod() instanceof HttpServletRequestGetHeaderMethod or
3637
this.asExpr().(MethodAccess).getMethod() instanceof CookieGetNameMethod
3738
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import semmle.code.java.dataflow.DataFlow
2+
3+
/**
4+
* Header-splitting sinks. Expressions that end up in an HTTP header.
5+
*/
6+
abstract class HeaderSplittingSink extends DataFlow::ExprNode { }
7+
8+
/**
9+
* Sources that cannot be used to perform a header splitting attack.
10+
*/
11+
abstract class TrustedSource extends DataFlow::ExprNode { }

0 commit comments

Comments
 (0)