Skip to content

Commit 70d675b

Browse files
committed
JS: Port heuristic versions of standard queries
1 parent f51e1e8 commit 70d675b

File tree

8 files changed

+46
-33
lines changed

8 files changed

+46
-33
lines changed

javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-020/UntrustedDataToExternalAPI.ql

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,15 @@
1212

1313
import javascript
1414
import semmle.javascript.security.dataflow.ExternalAPIUsedWithUntrustedDataQuery
15-
import DataFlow::PathGraph
1615
import semmle.javascript.heuristics.AdditionalSources
16+
import ExternalAPIUsedWithUntrustedDataFlow::PathGraph
1717

18-
from Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink
19-
where config.hasFlowPath(source, sink) and source.getNode() instanceof HeuristicSource
18+
from
19+
ExternalAPIUsedWithUntrustedDataFlow::PathNode source,
20+
ExternalAPIUsedWithUntrustedDataFlow::PathNode sink
21+
where
22+
ExternalAPIUsedWithUntrustedDataFlow::flowPath(source, sink) and
23+
source.getNode() instanceof HeuristicSource
2024
select sink, source, sink,
2125
"Call to " + sink.getNode().(Sink).getApiName() + " with untrusted data from $@.", source,
2226
source.toString()

javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-078/CommandInjection.ql

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@
1616

1717
import javascript
1818
import semmle.javascript.security.dataflow.CommandInjectionQuery
19-
import DataFlow::PathGraph
2019
import semmle.javascript.heuristics.AdditionalSources
20+
import CommandInjectionFlow::PathGraph
2121

2222
from
23-
Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink, DataFlow::Node highlight,
24-
Source sourceNode
23+
CommandInjectionFlow::PathNode source, CommandInjectionFlow::PathNode sink,
24+
DataFlow::Node highlight, Source sourceNode
2525
where
26-
cfg.hasFlowPath(source, sink) and
26+
CommandInjectionFlow::flowPath(source, sink) and
2727
(
28-
if cfg.isSinkWithHighlight(sink.getNode(), _)
29-
then cfg.isSinkWithHighlight(sink.getNode(), highlight)
28+
if isSinkWithHighlight(sink.getNode(), _)
29+
then isSinkWithHighlight(sink.getNode(), highlight)
3030
else highlight = sink.getNode()
3131
) and
3232
sourceNode = source.getNode() and

javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-079/Xss.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515

1616
import javascript
1717
import semmle.javascript.security.dataflow.DomBasedXssQuery
18-
import DataFlow::PathGraph
1918
import semmle.javascript.heuristics.AdditionalSources
19+
import DomBasedXssFlow::PathGraph
2020

21-
from DataFlow::Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
22-
where cfg.hasFlowPath(source, sink) and source.getNode() instanceof HeuristicSource
21+
from DomBasedXssFlow::PathNode source, DomBasedXssFlow::PathNode sink
22+
where DomBasedXssFlow::flowPath(source, sink) and source.getNode() instanceof HeuristicSource
2323
select sink.getNode(), source, sink,
2424
sink.getNode().(Sink).getVulnerabilityKind() + " vulnerability due to $@.", source.getNode(),
2525
"user-provided value"

javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-089/SqlInjection.ql

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,24 @@
1515
*/
1616

1717
import javascript
18-
import semmle.javascript.security.dataflow.SqlInjectionQuery as SqlInjection
19-
import semmle.javascript.security.dataflow.NosqlInjectionQuery as NosqlInjection
20-
import DataFlow::PathGraph
18+
import semmle.javascript.security.dataflow.SqlInjectionQuery as Sql
19+
import semmle.javascript.security.dataflow.NosqlInjectionQuery as Nosql
2120
import semmle.javascript.heuristics.AdditionalSources
2221

23-
from DataFlow::Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink, string type
22+
module Merged =
23+
DataFlow::MergePathGraph<Sql::SqlInjectionFlow::PathNode, Nosql::NosqlInjectionFlow::PathNode,
24+
Sql::SqlInjectionFlow::PathGraph, Nosql::NosqlInjectionFlow::PathGraph>;
25+
26+
import DataFlow::DeduplicatePathGraph<Merged::PathNode, Merged::PathGraph>
27+
28+
from PathNode source, PathNode sink, string type
2429
where
25-
(
26-
cfg instanceof SqlInjection::Configuration and type = "string"
27-
or
28-
cfg instanceof NosqlInjection::Configuration and type = "object"
29-
) and
30-
cfg.hasFlowPath(source, sink)
30+
Sql::SqlInjectionFlow::flowPath(source.getAnOriginalPathNode().asPathNode1(),
31+
sink.getAnOriginalPathNode().asPathNode1()) and
32+
type = "string"
33+
or
34+
Nosql::NosqlInjectionFlow::flowPath(source.getAnOriginalPathNode().asPathNode2(),
35+
sink.getAnOriginalPathNode().asPathNode2()) and
36+
type = "object"
3137
select sink.getNode(), source, sink, "This query " + type + " depends on a $@.", source.getNode(),
3238
"user-provided value"

javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-117/LogInjection.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
*/
1414

1515
import javascript
16-
import DataFlow::PathGraph
1716
import semmle.javascript.security.dataflow.LogInjectionQuery
1817
import semmle.javascript.heuristics.AdditionalSources
18+
import LogInjectionFlow::PathGraph
1919

20-
from LogInjectionConfiguration config, DataFlow::PathNode source, DataFlow::PathNode sink
21-
where config.hasFlowPath(source, sink) and source.getNode() instanceof HeuristicSource
20+
from LogInjectionFlow::PathNode source, LogInjectionFlow::PathNode sink
21+
where LogInjectionFlow::flowPath(source, sink) and source.getNode() instanceof HeuristicSource
2222
select sink.getNode(), source, sink, "Log entry depends on a $@.", source.getNode(),
2323
"user-provided value"

javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-770/ResourceExhaustion.ql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
*/
1515

1616
import javascript
17-
import DataFlow::PathGraph
1817
import semmle.javascript.security.dataflow.ResourceExhaustionQuery
1918
import semmle.javascript.heuristics.AdditionalSources
19+
import ResourceExhaustionFlow::PathGraph
2020

21-
from Configuration dataflow, DataFlow::PathNode source, DataFlow::PathNode sink
22-
where dataflow.hasFlowPath(source, sink) and source.getNode() instanceof HeuristicSource
21+
from ResourceExhaustionFlow::PathNode source, ResourceExhaustionFlow::PathNode sink
22+
where ResourceExhaustionFlow::flowPath(source, sink) and source.getNode() instanceof HeuristicSource
2323
select sink, source, sink, sink.getNode().(Sink).getProblemDescription() + " from a $@.", source,
2424
"user-provided value"

javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-807/ConditionalBypass.ql

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414

1515
import javascript
1616
import semmle.javascript.security.dataflow.ConditionalBypassQuery
17-
import DataFlow::PathGraph
1817
import semmle.javascript.heuristics.AdditionalSources
18+
import ConditionalBypassFlow::PathGraph
1919

20-
from DataFlow::PathNode source, DataFlow::PathNode sink, SensitiveAction action
20+
from
21+
ConditionalBypassFlow::PathNode source, ConditionalBypassFlow::PathNode sink,
22+
SensitiveAction action
2123
where
22-
isTaintedGuardForSensitiveAction(sink, source, action) and
23-
not isEarlyAbortGuard(sink, action) and
24+
isTaintedGuardNodeForSensitiveAction(sink, source, action) and
25+
not isEarlyAbortGuardNode(sink, action) and
2426
source.getNode() instanceof HeuristicSource
2527
select sink.getNode(), source, sink, "This condition guards a sensitive $@, but a $@ controls it.",
2628
action, "action", source.getNode(), "user-provided value"

javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-915/PrototypePollutingAssignment.ql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@
2020

2121
import javascript
2222
import semmle.javascript.security.dataflow.PrototypePollutingAssignmentQuery
23-
import PrototypePollutingAssignmentFlow::PathGraph
2423
import semmle.javascript.heuristics.AdditionalSources
24+
import PrototypePollutingAssignmentFlow::PathGraph
2525

2626
from
2727
PrototypePollutingAssignmentFlow::PathNode source, PrototypePollutingAssignmentFlow::PathNode sink
2828
where
2929
PrototypePollutingAssignmentFlow::flowPath(source, sink) and
30+
not isIgnoredLibraryFlow(source.getNode(), sink.getNode()) and
3031
source.getNode() instanceof HeuristicSource
3132
select sink, source, sink,
3233
"This assignment may alter Object.prototype if a malicious '__proto__' string is injected from $@.",

0 commit comments

Comments
 (0)