|
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