|
11 | 11 | */ |
12 | 12 |
|
13 | 13 | import java |
14 | | -import semmle.code.java.dataflow.TaintTracking |
15 | | -import semmle.code.java.dataflow.DataFlow |
16 | | -import semmle.code.java.dataflow.FlowSources |
17 | | -import semmle.code.java.dataflow.ExternalFlow |
| 14 | +import semmle.code.java.security.TaintedEnvironmentVariableQuery |
| 15 | +import ExecTaintedEnvironmentFlow::PathGraph |
18 | 16 |
|
19 | | -class ExecMethod extends Method { |
20 | | - ExecMethod() { |
21 | | - this.hasName("exec") and |
22 | | - this.getDeclaringType().hasQualifiedName("java.lang", "Runtime") |
23 | | - } |
24 | | -} |
25 | | - |
26 | | -module ProcessBuilderEnvironmentFlow implements DataFlow::ConfigSig { |
27 | | - predicate isSource(DataFlow::Node source) { |
28 | | - source.getType().(RefType).hasQualifiedName("java.lang", "ProcessBuilder") |
29 | | - } |
30 | | - |
31 | | - predicate isSink(DataFlow::Node sink) { |
32 | | - exists(MethodAccess ma | ma.getQualifier() = sink.asExpr() | |
33 | | - ma.getMethod().hasName("environment") |
34 | | - ) |
35 | | - } |
36 | | -} |
37 | | - |
38 | | -module ExecTaintedEnvironmentConfig implements DataFlow::ConfigSig { |
39 | | - predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } |
40 | | - |
41 | | - predicate isSink(DataFlow::Node sink) { sinkNode(sink, "environment-injection") } |
42 | | -} |
43 | | - |
44 | | -module ExecTaintedEnvironmentFlow = TaintTracking::Global<ExecTaintedEnvironmentConfig>; |
45 | | - |
46 | | -from Flow::PathNode source, Flow::PathNode sink, string label |
47 | | -where |
48 | | - ExecTaintedCommandFlow::flowPath(source.asPathNode1(), sink.asPathNode1()) and label = "argument" |
49 | | - or |
50 | | - ExecTaintedEnvironmentFlow::flowPath(source.asPathNode2(), sink.asPathNode2()) and |
51 | | - label = "environment" |
52 | | -select sink.getNode(), sink, source, "This command will be execute with a tainted $@.", |
53 | | - sink.getNode(), label |
| 17 | +from ExecTaintedEnvironmentFlow::PathNode source, ExecTaintedEnvironmentFlow::PathNode sink |
| 18 | +where ExecTaintedEnvironmentFlow::flowPath(source, sink) |
| 19 | +select sink.getNode(), source, sink, "This command will be execute with a tainted $@.", |
| 20 | + sink.getNode(), "environment variable" |
0 commit comments