From dcc127832ea62fecbf19e5ee924c92475e11b4e4 Mon Sep 17 00:00:00 2001 From: Mathias Vorreiter Pedersen Date: Tue, 15 Apr 2025 17:02:48 +0100 Subject: [PATCH] PS: Make remote flow sources flow sources. --- .../powershell/dataflow/flowsources/Remote.qll | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/powershell/ql/lib/semmle/code/powershell/dataflow/flowsources/Remote.qll b/powershell/ql/lib/semmle/code/powershell/dataflow/flowsources/Remote.qll index f6b4edd93cb..bcdaab217b5 100644 --- a/powershell/ql/lib/semmle/code/powershell/dataflow/flowsources/Remote.qll +++ b/powershell/ql/lib/semmle/code/powershell/dataflow/flowsources/Remote.qll @@ -6,6 +6,7 @@ private import semmle.code.powershell.dataflow.internal.DataFlowPublic as DataFlow // Need to import since frameworks can extend `RemoteFlowSource::Range` private import semmle.code.powershell.Frameworks +private import semmle.code.powershell.dataflow.flowsources.FlowSources /** * A data flow source of remote user input. @@ -13,9 +14,10 @@ private import semmle.code.powershell.Frameworks * Extend this class to refine existing API models. If you want to model new APIs, * extend `RemoteFlowSource::Range` instead. */ -class RemoteFlowSource extends DataFlow::Node instanceof RemoteFlowSource::Range { - /** Gets a string that describes the type of this remote flow source. */ - string getSourceType() { result = super.getSourceType() } +class RemoteFlowSource extends SourceNode instanceof RemoteFlowSource::Range { + override string getSourceType() { result = "remote flow source" } + + override string getThreatModel() { result = "remote" } } /** Provides a class for modeling new sources of remote user input. */ @@ -31,3 +33,9 @@ module RemoteFlowSource { abstract string getSourceType(); } } + +private class ExternalRemoteFlowSource extends RemoteFlowSource::Range { + ExternalRemoteFlowSource() { this = ModelOutput::getASourceNode("remote", _).asSource() } + + override string getSourceType() { result = "remote flow" } +}