Skip to content

Commit 60f9160

Browse files
authored
Merge pull request #18574 from asgerf/js/diff-informed2
JS: fix and improve diff-informed queries
2 parents a6cd53e + 6423033 commit 60f9160

17 files changed

+103
-4
lines changed

javascript/ql/lib/semmle/javascript/security/dataflow/BrokenCryptoAlgorithmQuery.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ module BrokenCryptoAlgorithmConfig implements DataFlow::ConfigSig {
2727
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
2828

2929
predicate observeDiffInformedIncrementalMode() { any() }
30+
31+
Location getASelectedSinkLocation(DataFlow::Node sink) {
32+
result = sink.(Sink).getLocation()
33+
or
34+
result = sink.(Sink).getInitialization().getLocation()
35+
}
3036
}
3137

3238
/**

javascript/ql/lib/semmle/javascript/security/dataflow/ClientSideRequestForgeryQuery.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ module ClientSideRequestForgeryConfig implements DataFlow::ConfigSig {
3333
}
3434

3535
predicate observeDiffInformedIncrementalMode() { any() }
36+
37+
Location getASelectedSinkLocation(DataFlow::Node sink) {
38+
result = sink.(Sink).getLocation()
39+
or
40+
result = sink.(Sink).getARequest().getLocation()
41+
}
3642
}
3743

3844
/**

javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionQuery.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ module CommandInjectionConfig implements DataFlow::ConfigSig {
3232
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
3333

3434
predicate observeDiffInformedIncrementalMode() { any() }
35+
36+
Location getASelectedSinkLocation(DataFlow::Node sink) {
37+
exists(DataFlow::Node node |
38+
isSinkWithHighlight(sink, node) and
39+
result = node.getLocation()
40+
)
41+
}
3542
}
3643

3744
/**

javascript/ql/lib/semmle/javascript/security/dataflow/CorsMisconfigurationForCredentialsQuery.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ module CorsMisconfigurationConfig implements DataFlow::ConfigSig {
2525
}
2626

2727
predicate observeDiffInformedIncrementalMode() { any() }
28+
29+
Location getASelectedSinkLocation(DataFlow::Node sink) {
30+
result = sink.(Sink).getLocation()
31+
or
32+
result = sink.(Sink).getCredentialsHeader().getLocation()
33+
}
2834
}
2935

3036
/**

javascript/ql/lib/semmle/javascript/security/dataflow/DeepObjectResourceExhaustionQuery.qll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,15 @@ module DeepObjectResourceExhaustionConfig implements DataFlow::StateConfigSig {
3535
}
3636

3737
predicate observeDiffInformedIncrementalMode() { any() }
38+
39+
Location getASelectedSinkLocation(DataFlow::Node sink) {
40+
result = sink.(Sink).getLocation()
41+
or
42+
exists(DataFlow::Node link |
43+
sink.(Sink).hasReason(link, _) and
44+
result = link.getLocation()
45+
)
46+
}
3847
}
3948

4049
/**

javascript/ql/lib/semmle/javascript/security/dataflow/IndirectCommandInjectionQuery.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ module IndirectCommandInjectionConfig implements DataFlow::ConfigSig {
2828
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
2929

3030
predicate observeDiffInformedIncrementalMode() { any() }
31+
32+
Location getASelectedSinkLocation(DataFlow::Node sink) {
33+
exists(DataFlow::Node node |
34+
isSinkWithHighlight(sink, node) and
35+
result = node.getLocation()
36+
)
37+
}
3138
}
3239

3340
/**

javascript/ql/lib/semmle/javascript/security/dataflow/InsecureDownloadQuery.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ module InsecureDownloadConfig implements DataFlow::StateConfigSig {
2525
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
2626

2727
predicate observeDiffInformedIncrementalMode() { any() }
28+
29+
Location getASelectedSinkLocation(DataFlow::Node sink) {
30+
result = sink.(Sink).getLocation()
31+
or
32+
result = sink.(Sink).getDownloadCall().getLocation()
33+
}
2834
}
2935

3036
/**

javascript/ql/lib/semmle/javascript/security/dataflow/PrototypePollutionQuery.qll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ module PrototypePollutionConfig implements DataFlow::StateConfigSig {
4949
}
5050

5151
predicate observeDiffInformedIncrementalMode() { any() }
52+
53+
Location getASelectedSinkLocation(DataFlow::Node sink) {
54+
result = sink.(Sink).getLocation()
55+
or
56+
exists(Locatable loc |
57+
sink.(Sink).dependencyInfo(_, loc) and
58+
result = loc.getLocation()
59+
)
60+
}
5261
}
5362

5463
/**

javascript/ql/lib/semmle/javascript/security/dataflow/RequestForgeryQuery.qll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ module RequestForgeryConfig implements DataFlow::ConfigSig {
2828
}
2929

3030
predicate observeDiffInformedIncrementalMode() { any() }
31+
32+
Location getASelectedSinkLocation(DataFlow::Node sink) {
33+
result = sink.(Sink).getLocation()
34+
or
35+
result = sink.(Sink).getARequest().getLocation()
36+
}
3137
}
3238

3339
/**

javascript/ql/lib/semmle/javascript/security/dataflow/ShellCommandInjectionFromEnvironmentQuery.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ module ShellCommandInjectionFromEnvironmentConfig implements DataFlow::ConfigSig
2929
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
3030

3131
predicate observeDiffInformedIncrementalMode() { any() }
32+
33+
Location getASelectedSinkLocation(DataFlow::Node sink) {
34+
exists(DataFlow::Node node |
35+
isSinkWithHighlight(sink, node) and
36+
result = node.getLocation()
37+
)
38+
}
3239
}
3340

3441
/**

0 commit comments

Comments
 (0)