Skip to content

Commit 39ec713

Browse files
authored
Merge pull request #7049 from asgerf/js/routing-trees
Approved by erik-krogh
2 parents f3819e7 + 0e9c237 commit 39ec713

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+2185
-248
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
lgtm,codescanning
2+
* Data flow is now tracked across middleware functions in more cases, leading to more security results in general. Affected packages are `express` and `fastify`.
3+
* `js/missing-token-validation` has been made more precise, yielding both fewer false positives and more true positives.

javascript/ql/lib/javascript.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import semmle.javascript.Promises
5050
import semmle.javascript.CanonicalNames
5151
import semmle.javascript.RangeAnalysis
5252
import semmle.javascript.Regexp
53+
import semmle.javascript.Routing
5354
import semmle.javascript.SSA
5455
import semmle.javascript.StandardLibrary
5556
import semmle.javascript.Stmt

javascript/ql/lib/semmle/javascript/ApiGraphs.qll

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,23 @@ module API {
388388
API::Node getNode() { result = root().getASuccessor(Label::entryPoint(this)) }
389389
}
390390

391+
/**
392+
* A class for contributing new steps for tracking uses of an API.
393+
*/
394+
class AdditionalUseStep extends Unit {
395+
/**
396+
* Holds if use nodes should flow from `pred` to `succ`.
397+
*/
398+
predicate step(DataFlow::SourceNode pred, DataFlow::SourceNode succ) { none() }
399+
}
400+
401+
private module AdditionalUseStep {
402+
pragma[nomagic]
403+
predicate step(DataFlow::SourceNode pred, DataFlow::SourceNode succ) {
404+
any(AdditionalUseStep st).step(pred, succ)
405+
}
406+
}
407+
391408
/**
392409
* Provides the actual implementation of API graphs, cached for performance.
393410
*
@@ -751,6 +768,11 @@ module API {
751768
boundArgs in [0 .. 10]
752769
)
753770
or
771+
exists(DataFlow::SourceNode mid |
772+
mid = trackUseNode(nd, promisified, boundArgs, prop, t) and
773+
AdditionalUseStep::step(pragma[only_bind_out](mid), result)
774+
)
775+
or
754776
exists(DataFlow::Node pred, string preprop |
755777
trackUseNode(nd, promisified, boundArgs, preprop, t.continue()).flowsTo(pred) and
756778
promisified = false and

0 commit comments

Comments
 (0)