From e9bfbb677d87f7a638d40bcf32fc44a912436f34 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 10 Feb 2021 17:06:21 +0100 Subject: [PATCH] Java: Connect the external sources and steps to the defaults. --- java/ql/src/semmle/code/java/dataflow/FlowSources.qll | 7 +++++++ .../code/java/dataflow/internal/TaintTrackingUtil.qll | 3 +++ 2 files changed, 10 insertions(+) diff --git a/java/ql/src/semmle/code/java/dataflow/FlowSources.qll b/java/ql/src/semmle/code/java/dataflow/FlowSources.qll index 4359fdbcbc2..b4235cb2635 100644 --- a/java/ql/src/semmle/code/java/dataflow/FlowSources.qll +++ b/java/ql/src/semmle/code/java/dataflow/FlowSources.qll @@ -24,6 +24,7 @@ import semmle.code.java.frameworks.spring.SpringWebClient import semmle.code.java.frameworks.Guice import semmle.code.java.frameworks.struts.StrutsActions import semmle.code.java.frameworks.Thrift +private import semmle.code.java.dataflow.ExternalFlow /** A data flow source of remote user input. */ abstract class RemoteFlowSource extends DataFlow::Node { @@ -31,6 +32,12 @@ abstract class RemoteFlowSource extends DataFlow::Node { abstract string getSourceType(); } +private class ExternalRemoteFlowSource extends RemoteFlowSource { + ExternalRemoteFlowSource() { sourceNode(this, "remote") } + + override string getSourceType() { result = "external" } +} + private class RemoteTaintedMethodAccessSource extends RemoteFlowSource { RemoteTaintedMethodAccessSource() { this.asExpr().(MethodAccess).getMethod() instanceof RemoteTaintedMethod diff --git a/java/ql/src/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/src/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index 69189d949f1..f03dab44a4f 100644 --- a/java/ql/src/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/src/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -10,6 +10,7 @@ private import semmle.code.java.dataflow.internal.ContainerFlow private import semmle.code.java.frameworks.spring.SpringController private import semmle.code.java.frameworks.spring.SpringHttp private import semmle.code.java.frameworks.Networking +private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.FlowSteps /** @@ -45,6 +46,8 @@ predicate localAdditionalTaintStep(DataFlow::Node src, DataFlow::Node sink) { localAdditionalTaintUpdateStep(src.asExpr(), sink.(DataFlow::PostUpdateNode).getPreUpdateNode().asExpr()) or + summaryStep(src, sink, "taint") + or exists(Argument arg | src.asExpr() = arg and arg.isVararg() and