Skip to content

Commit 93025cc

Browse files
committed
Argument injection initial commit
1 parent 7e6f2d1 commit 93025cc

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* @name ExecTaintedEnvironment.ql
3+
* @description Using tainted data in a call to exec() may allow an attacker to execute arbitrary commands.
4+
* @problem.severity error
5+
* @kind path-problem
6+
* @precision medium
7+
* @id java/exec-tainted-environment
8+
* @tags security
9+
* external/cwe/cwe-078
10+
* external/cwe/cwe-088
11+
*/
12+
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+
18+
class ExecMethod extends Method {
19+
ExecMethod() {
20+
this.hasName("exec") and
21+
this.getDeclaringType().hasQualifiedName("java.lang", "Runtime")
22+
}
23+
}
24+
25+
module ExecTaintedEnvironmentConfig implements DataFlow::ConfigSig {
26+
predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
27+
28+
predicate isSink(DataFlow::Node sink) {
29+
exists(MethodAccess ma |
30+
ma.getMethod() instanceof ExecMethod and sink.asExpr() = ma.getArgument(1)
31+
)
32+
}
33+
}
34+
35+
module ExecTaintedEnvironmentFlow = TaintTracking::Global<ExecTaintedEnvironmentConfig>;
36+
37+
import ExecTaintedEnvironmentFlow::PathGraph
38+
39+
from ExecTaintedEnvironmentFlow::PathNode source, ExecTaintedEnvironmentFlow::PathNode sink
40+
where ExecTaintedEnvironmentFlow::flowPath(source, sink)
41+
select sink.getNode(), sink, source, "This command will be executed in a $@.", sink.getNode(),
42+
"tainted environment"

0 commit comments

Comments
 (0)