Skip to content

Commit e4f47ec

Browse files
committed
Add ResponseSplittingLocalQuery
1 parent 91b3533 commit e4f47ec

File tree

3 files changed

+30
-20
lines changed

3 files changed

+30
-20
lines changed

java/ql/lib/change-notes/2023-03-30-add-libraries-for-query-configurations.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ category: minorAnalysis
99
* Added the `InsecureCookieQuery.qll` library to provide the `SecureCookieFlow` taint-tracking module to reason about insecure cookie vulnerabilities.
1010
* Added the `ExecTaintedLocalQuery.qll` library to provide the `LocalUserInputToArgumentToExecFlow` taint-tracking module to reason about command injection vulnerabilities caused by local data flow.
1111
* Added the `StackTraceExposureQuery.qll` library to provide the `printsStackExternally`, `stringifiedStackFlowsExternally`, and `getMessageFlowsExternally` predicates to reason about stack trace exposure vulnerabilities.
12-
* Added the `SqlTaintedLocalQuery.qll` library to provide the `LocalUserInputToArgumentToSqlFlow` taint-tracking module to reason about SQL injection vulnerabilities caused by local data flow.
12+
* Added the `SqlTaintedLocalQuery.qll` library to provide the `LocalUserInputToArgumentToSqlFlow` taint-tracking module to reason about SQL injection vulnerabilities caused by local data flow.
13+
* Added the `ResponseSplittingLocalQuery.qll` library to provide the `ResponseSplittingLocalFlow` taint-tracking module to reason about response splitting vulnerabilities caused by local data flow.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/** Provides a taint-tracking configuration to reason about response splitting vulnerabilities from local user input. */
2+
3+
import java
4+
import semmle.code.java.dataflow.FlowSources
5+
import semmle.code.java.security.ResponseSplitting
6+
7+
/**
8+
* A taint-tracking configuration to reason about response splitting vulnerabilities from local user input.
9+
*/
10+
module ResponseSplittingLocalConfig implements DataFlow::ConfigSig {
11+
predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput }
12+
13+
predicate isSink(DataFlow::Node sink) { sink instanceof HeaderSplittingSink }
14+
15+
predicate isBarrier(DataFlow::Node node) {
16+
node.getType() instanceof PrimitiveType or
17+
node.getType() instanceof BoxedType
18+
}
19+
}
20+
21+
/**
22+
* Taint-tracking flow for response splitting vulnerabilities from local user input.
23+
*/
24+
module ResponseSplittingLocalFlow = TaintTracking::Global<ResponseSplittingLocalConfig>;

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

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,11 @@
1212
*/
1313

1414
import java
15-
import semmle.code.java.dataflow.FlowSources
16-
import semmle.code.java.security.ResponseSplitting
15+
import semmle.code.java.security.ResponseSplittingLocalQuery
16+
import ResponseSplittingLocalFlow::PathGraph
1717

18-
module ResponseSplittingLocalConfig implements DataFlow::ConfigSig {
19-
predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput }
20-
21-
predicate isSink(DataFlow::Node sink) { sink instanceof HeaderSplittingSink }
22-
23-
predicate isBarrier(DataFlow::Node node) {
24-
node.getType() instanceof PrimitiveType or
25-
node.getType() instanceof BoxedType
26-
}
27-
}
28-
29-
module ResponseSplitting = TaintTracking::Global<ResponseSplittingLocalConfig>;
30-
31-
import ResponseSplitting::PathGraph
32-
33-
from ResponseSplitting::PathNode source, ResponseSplitting::PathNode sink
34-
where ResponseSplitting::flowPath(source, sink)
18+
from ResponseSplittingLocalFlow::PathNode source, ResponseSplittingLocalFlow::PathNode sink
19+
where ResponseSplittingLocalFlow::flowPath(source, sink)
3520
select sink.getNode(), source, sink,
3621
"This header depends on a $@, which may cause a response-splitting vulnerability.",
3722
source.getNode(), "user-provided value"

0 commit comments

Comments
 (0)