Skip to content

Commit 01f7d45

Browse files
committed
JS: Add meta query for reporting threat model sources
1 parent 30d192a commit 01f7d45

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

javascript/ql/src/meta/alerts/TaintSources.ql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
import javascript
1212
import meta.internal.TaintMetrics
1313

14-
from DataFlow::Node node
15-
where node = relevantTaintSource()
14+
from ThreatModelSource node
15+
where node = relevantTaintSource() and node.getThreatModel() = "remote"
1616
select node, getTaintSourceName(node)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @name Threat model sources
3+
* @description Sources of possibly untrusted input that can be configured via threat models.
4+
* @kind problem
5+
* @problem.severity recommendation
6+
* @id js/meta/alerts/threat-model-sources
7+
* @tags meta
8+
* @precision very-low
9+
*/
10+
11+
import javascript
12+
import meta.internal.TaintMetrics
13+
14+
from ThreatModelSource node, string threatModel
15+
where
16+
node = relevantTaintSource() and
17+
threatModel = node.getThreatModel() and
18+
threatModel != "remote" // "remote" is reported by TaintSources.ql
19+
select node, getTaintSourceName(node) + " (\"" + threatModel + "\" threat model)"

javascript/ql/src/meta/internal/TaintMetrics.qll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ DataFlow::Node relevantTaintSink(string kind) {
7575
DataFlow::Node relevantTaintSink() { result = relevantTaintSink(_) }
7676

7777
/**
78-
* Gets a relevant remote flow source.
78+
* Gets a relevant threat model source.
7979
*/
80-
RemoteFlowSource relevantTaintSource() { not result.getFile() instanceof IgnoredFile }
80+
ThreatModelSource relevantTaintSource() { not result.getFile() instanceof IgnoredFile }
8181

8282
/**
8383
* Gets the output of a call that shows intent to sanitize a value
@@ -102,8 +102,8 @@ DataFlow::Node relevantSanitizerInput() {
102102
}
103103

104104
string getTaintSourceName(DataFlow::Node node) {
105-
result = node.(RemoteFlowSource).getSourceType()
105+
result = node.(ThreatModelSource).getSourceType()
106106
or
107-
not node instanceof RemoteFlowSource and
107+
not node instanceof ThreatModelSource and
108108
result = "Taint source"
109109
}

0 commit comments

Comments
 (0)