Skip to content

Commit 1d12082

Browse files
authored
Merge pull request github#5920 from erik-krogh/clone
Approved by esbena
2 parents 9b0e3b1 + 06514a2 commit 1d12082

File tree

5 files changed

+51
-0
lines changed

5 files changed

+51
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lgtm,codescanning
2+
* The dataflow libraries now model dataflow in the `clone` library.
3+
Affected packages are
4+
[clone](https://npmjs.com/package/clone)

javascript/ql/src/semmle/javascript/Extend.qll

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,17 @@ private class ExtendCallTaintStep extends TaintTracking::SharedTaintStep {
174174
)
175175
}
176176
}
177+
178+
private import semmle.javascript.dataflow.internal.PreCallGraphStep
179+
180+
/**
181+
* A step for the `clone` package.
182+
*/
183+
private class CloneStep extends PreCallGraphStep {
184+
override predicate step(DataFlow::Node pred, DataFlow::Node succ) {
185+
exists(DataFlow::CallNode call | call = DataFlow::moduleImport("clone").getACall() |
186+
pred = call.getArgument(0) and
187+
succ = call
188+
)
189+
}
190+
}

javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXss.expected

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,14 @@ nodes
174174
| tst2.js:18:12:18:12 | p |
175175
| tst2.js:21:14:21:14 | p |
176176
| tst2.js:21:14:21:14 | p |
177+
| tst2.js:30:7:30:24 | p |
178+
| tst2.js:30:9:30:9 | p |
179+
| tst2.js:30:9:30:9 | p |
180+
| tst2.js:33:11:33:11 | p |
181+
| tst2.js:36:12:36:12 | p |
182+
| tst2.js:36:12:36:12 | p |
183+
| tst2.js:37:12:37:18 | other.p |
184+
| tst2.js:37:12:37:18 | other.p |
177185
edges
178186
| ReflectedXss.js:8:33:8:45 | req.params.id | ReflectedXss.js:8:14:8:45 | "Unknow ... rams.id |
179187
| ReflectedXss.js:8:33:8:45 | req.params.id | ReflectedXss.js:8:14:8:45 | "Unknow ... rams.id |
@@ -318,6 +326,13 @@ edges
318326
| tst2.js:14:7:14:24 | p | tst2.js:21:14:21:14 | p |
319327
| tst2.js:14:9:14:9 | p | tst2.js:14:7:14:24 | p |
320328
| tst2.js:14:9:14:9 | p | tst2.js:14:7:14:24 | p |
329+
| tst2.js:30:7:30:24 | p | tst2.js:33:11:33:11 | p |
330+
| tst2.js:30:7:30:24 | p | tst2.js:36:12:36:12 | p |
331+
| tst2.js:30:7:30:24 | p | tst2.js:36:12:36:12 | p |
332+
| tst2.js:30:9:30:9 | p | tst2.js:30:7:30:24 | p |
333+
| tst2.js:30:9:30:9 | p | tst2.js:30:7:30:24 | p |
334+
| tst2.js:33:11:33:11 | p | tst2.js:37:12:37:18 | other.p |
335+
| tst2.js:33:11:33:11 | p | tst2.js:37:12:37:18 | other.p |
321336
#select
322337
| ReflectedXss.js:8:14:8:45 | "Unknow ... rams.id | ReflectedXss.js:8:33:8:45 | req.params.id | ReflectedXss.js:8:14:8:45 | "Unknow ... rams.id | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:8:33:8:45 | req.params.id | user-provided value |
323338
| ReflectedXss.js:17:12:17:39 | "Unknow ... rams.id | ReflectedXss.js:17:31:17:39 | params.id | ReflectedXss.js:17:12:17:39 | "Unknow ... rams.id | Cross-site scripting vulnerability due to $@. | ReflectedXss.js:17:31:17:39 | params.id | user-provided value |
@@ -359,3 +374,5 @@ edges
359374
| tst2.js:8:12:8:12 | r | tst2.js:6:12:6:15 | q: r | tst2.js:8:12:8:12 | r | Cross-site scripting vulnerability due to $@. | tst2.js:6:12:6:15 | q: r | user-provided value |
360375
| tst2.js:18:12:18:12 | p | tst2.js:14:9:14:9 | p | tst2.js:18:12:18:12 | p | Cross-site scripting vulnerability due to $@. | tst2.js:14:9:14:9 | p | user-provided value |
361376
| tst2.js:21:14:21:14 | p | tst2.js:14:9:14:9 | p | tst2.js:21:14:21:14 | p | Cross-site scripting vulnerability due to $@. | tst2.js:14:9:14:9 | p | user-provided value |
377+
| tst2.js:36:12:36:12 | p | tst2.js:30:9:30:9 | p | tst2.js:36:12:36:12 | p | Cross-site scripting vulnerability due to $@. | tst2.js:30:9:30:9 | p | user-provided value |
378+
| tst2.js:37:12:37:18 | other.p | tst2.js:30:9:30:9 | p | tst2.js:37:12:37:18 | other.p | Cross-site scripting vulnerability due to $@. | tst2.js:30:9:30:9 | p | user-provided value |

javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/ReflectedXssWithCustomSanitizer.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,5 @@
3737
| tst2.js:8:12:8:12 | r | Cross-site scripting vulnerability due to $@. | tst2.js:6:12:6:15 | q: r | user-provided value |
3838
| tst2.js:18:12:18:12 | p | Cross-site scripting vulnerability due to $@. | tst2.js:14:9:14:9 | p | user-provided value |
3939
| tst2.js:21:14:21:14 | p | Cross-site scripting vulnerability due to $@. | tst2.js:14:9:14:9 | p | user-provided value |
40+
| tst2.js:36:12:36:12 | p | Cross-site scripting vulnerability due to $@. | tst2.js:30:9:30:9 | p | user-provided value |
41+
| tst2.js:37:12:37:18 | other.p | Cross-site scripting vulnerability due to $@. | tst2.js:30:9:30:9 | p | user-provided value |

javascript/ql/test/query-tests/Security/CWE-079/ReflectedXss/tst2.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,17 @@ app.get('/bar', function(req, res) {
2222
else
2323
res.send(p); // OK
2424
});
25+
26+
27+
const clone = require('clone');
28+
29+
app.get('/baz', function(req, res) {
30+
let { p } = req.params;
31+
32+
var obj = {};
33+
obj.p = p;
34+
var other = clone(obj);
35+
36+
res.send(p); // NOT OK
37+
res.send(other.p); // NOT OK
38+
});

0 commit comments

Comments
 (0)