Skip to content

Commit 95478f1

Browse files
author
Sebastian Bauersfeld
committed
Address review comments.
1 parent 20d7897 commit 95478f1

File tree

3 files changed

+36
-12
lines changed

3 files changed

+36
-12
lines changed

java/ql/src/Security/CWE/CWE-022/TaintedPath.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ predicate containsDotDotSanitizer(Guard g, Expr e, boolean branch) {
2929
)
3030
}
3131

32-
class TaintedPathConfig extends TaintTracking::Configuration {
32+
class TaintedPathConfig extends TaintedPathCommonConfig {
3333
TaintedPathConfig() { this = "TaintedPathConfig" }
3434

3535
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }

java/ql/src/Security/CWE/CWE-022/TaintedPathCommon.qll

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,41 @@
55
import java
66
import semmle.code.java.controlflow.Guards
77
import semmle.code.java.security.PathCreation
8-
import semmle.code.java.dataflow.ExternalFlow
8+
import semmle.code.java.frameworks.Networking
9+
import semmle.code.java.dataflow.TaintTracking
910

10-
class TaintedPathInjectionSummaries extends SummaryModelCsv {
11-
override predicate row(string row) {
12-
row =
13-
[
14-
"java.net;URI;false;URI;(String,String,String);;Argument[1];Argument[-1];taint;manual",
15-
"java.net;URI;false;URI;(String,String,String,String);;Argument[1..2];Argument[-1];taint;manual",
16-
"java.net;URI;false;URI;(String,String,String,String,String);;Argument[2];Argument[-1];taint;manual",
17-
"java.net;URI;false;URI;(String,String,String,int,String,String,String);;Argument[4];Argument[-1];taint;manual",
18-
]
11+
abstract class TaintedPathCommonConfig extends TaintTracking::Configuration {
12+
bindingset[this]
13+
TaintedPathCommonConfig() { any() }
14+
15+
final override predicate isAdditionalTaintStep(DataFlow::Node n1, DataFlow::Node n2) {
16+
exists(Argument a |
17+
a = n1.asExpr() and
18+
a.getCall() = n2.asExpr() and
19+
a = any(TaintPreservingUriCtorParam tpp).getAnArgument()
20+
)
21+
}
22+
}
23+
24+
private class TaintPreservingUriCtorParam extends Parameter {
25+
TaintPreservingUriCtorParam() {
26+
exists(Constructor ctor, int idx, int nParams |
27+
ctor.getDeclaringType() instanceof TypeUri and
28+
this = ctor.getParameter(idx) and
29+
nParams = ctor.getNumberOfParameters()
30+
|
31+
// URI(String scheme, String ssp, String fragment)
32+
idx = 1 and nParams = 3
33+
or
34+
// URI(String scheme, String host, String path, String fragment)
35+
idx = [1, 2] and nParams = 4
36+
or
37+
// URI(String scheme, String authority, String path, String query, String fragment)
38+
idx = 2 and nParams = 5
39+
or
40+
// URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment)
41+
idx = 4 and nParams = 7
42+
)
1943
}
2044
}
2145

java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import semmle.code.java.security.PathCreation
1919
import DataFlow::PathGraph
2020
import TaintedPathCommon
2121

22-
class TaintedPathLocalConfig extends TaintTracking::Configuration {
22+
class TaintedPathLocalConfig extends TaintedPathCommonConfig {
2323
TaintedPathLocalConfig() { this = "TaintedPathLocalConfig" }
2424

2525
override predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput }

0 commit comments

Comments
 (0)