Skip to content

Commit 7435dac

Browse files
committed
Move source and sink into importable library
1 parent b66f391 commit 7435dac

File tree

4 files changed

+40
-41
lines changed

4 files changed

+40
-41
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
*/
1212

1313
import java
14-
import ServletResponseSplitting
14+
import semmle.code.java.dataflow.FlowSources
15+
import semmle.code.java.security.ResponseSplitting
1516
import DataFlow::PathGraph
1617

1718
class ResponseSplittingConfig extends TaintTracking::Configuration {

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 ServletResponseSplitting
15+
import semmle.code.java.security.ResponseSplitting
1616
import DataFlow::PathGraph
1717

1818
class ResponseSplittingLocalConfig extends TaintTracking::Configuration {

java/ql/src/Security/CWE/CWE-113/ServletResponseSplitting.qll

Lines changed: 0 additions & 39 deletions
This file was deleted.

java/ql/src/semmle/code/java/security/ResponseSplitting.qll

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import semmle.code.java.dataflow.DataFlow
2+
import semmle.code.java.frameworks.Servlets
3+
import semmle.code.java.frameworks.JaxWS
24

35
/**
46
* Header-splitting sinks. Expressions that end up in an HTTP header.
@@ -9,3 +11,38 @@ abstract class HeaderSplittingSink extends DataFlow::Node { }
911
* Sources that cannot be used to perform a header splitting attack.
1012
*/
1113
abstract class SafeHeaderSplittingSource extends DataFlow::Node { }
14+
15+
/**
16+
* Header-splitting sinks. Expressions that end up in an HTTP header.
17+
*/
18+
private class ServletHeaderSplittingSink extends HeaderSplittingSink {
19+
ServletHeaderSplittingSink() {
20+
exists(ResponseAddCookieMethod m, MethodAccess ma |
21+
ma.getMethod() = m and
22+
this.asExpr() = ma.getArgument(0)
23+
)
24+
or
25+
exists(ResponseAddHeaderMethod m, MethodAccess ma |
26+
ma.getMethod() = m and
27+
this.asExpr() = ma.getAnArgument()
28+
)
29+
or
30+
exists(ResponseSetHeaderMethod m, MethodAccess ma |
31+
ma.getMethod() = m and
32+
this.asExpr() = ma.getAnArgument()
33+
)
34+
or
35+
exists(JaxRsResponseBuilder builder, Method m |
36+
m = builder.getAMethod() and m.getName() = "header"
37+
|
38+
this.asExpr() = m.getAReference().getArgument(1)
39+
)
40+
}
41+
}
42+
43+
private class ServletSafeHeaderSplittingSource extends SafeHeaderSplittingSource {
44+
ServletSafeHeaderSplittingSource() {
45+
this.asExpr().(MethodAccess).getMethod() instanceof HttpServletRequestGetHeaderMethod or
46+
this.asExpr().(MethodAccess).getMethod() instanceof CookieGetNameMethod
47+
}
48+
}

0 commit comments

Comments
 (0)