|
5 | 5 | import java
|
6 | 6 | import semmle.code.java.controlflow.Guards
|
7 | 7 | 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 |
9 | 10 |
|
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 | + ) |
19 | 43 | }
|
20 | 44 | }
|
21 | 45 |
|
|
0 commit comments