Skip to content

Commit c1ee2dc

Browse files
committed
Refactor CWE-078/ExecTaintedLocal
1 parent ac58299 commit c1ee2dc

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

java/ql/src/Security/CWE/CWE-078/ExecTaintedLocal.ql

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,13 @@ import semmle.code.java.Expr
1616
import semmle.code.java.dataflow.FlowSources
1717
import semmle.code.java.security.ExternalProcess
1818
import semmle.code.java.security.CommandArguments
19-
import DataFlow::PathGraph
2019

21-
class LocalUserInputToArgumentToExecFlowConfig extends TaintTracking::Configuration {
22-
LocalUserInputToArgumentToExecFlowConfig() { this = "LocalUserInputToArgumentToExecFlowConfig" }
20+
private module LocalUserInputToArgumentToExecFlowConfig implements DataFlow::ConfigSig {
21+
predicate isSource(DataFlow::Node src) { src instanceof LocalUserInput }
2322

24-
override predicate isSource(DataFlow::Node src) { src instanceof LocalUserInput }
23+
predicate isSink(DataFlow::Node sink) { sink.asExpr() instanceof ArgumentToExec }
2524

26-
override predicate isSink(DataFlow::Node sink) { sink.asExpr() instanceof ArgumentToExec }
27-
28-
override predicate isSanitizer(DataFlow::Node node) {
25+
predicate isBarrier(DataFlow::Node node) {
2926
node.getType() instanceof PrimitiveType
3027
or
3128
node.getType() instanceof BoxedType
@@ -34,9 +31,16 @@ class LocalUserInputToArgumentToExecFlowConfig extends TaintTracking::Configurat
3431
}
3532
}
3633

34+
module LocalUserInputToArgumentToExecFlow =
35+
TaintTracking::Make<LocalUserInputToArgumentToExecFlowConfig>;
36+
37+
import LocalUserInputToArgumentToExecFlow::PathGraph
38+
3739
from
38-
DataFlow::PathNode source, DataFlow::PathNode sink, ArgumentToExec execArg,
39-
LocalUserInputToArgumentToExecFlowConfig conf
40-
where conf.hasFlowPath(source, sink) and sink.getNode().asExpr() = execArg
40+
LocalUserInputToArgumentToExecFlow::PathNode source,
41+
LocalUserInputToArgumentToExecFlow::PathNode sink, ArgumentToExec execArg
42+
where
43+
LocalUserInputToArgumentToExecFlow::hasFlowPath(source, sink) and
44+
sink.getNode().asExpr() = execArg
4145
select execArg, source, sink, "This command line depends on a $@.", source.getNode(),
4246
"user-provided value"

0 commit comments

Comments
 (0)