Skip to content

Commit e002f20

Browse files
committed
JS: Add modeling for es6-promisify
1 parent 35c75c0 commit e002f20

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

javascript/ql/lib/semmle/javascript/Promises.qll

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,8 @@ module Promisify {
727727
PromisifyAllCall() {
728728
this =
729729
[
730-
DataFlow::moduleMember(["bluebird", "@google-cloud/promisify"], "promisifyAll"),
730+
DataFlow::moduleMember(["bluebird", "@google-cloud/promisify", "es6-promisify"],
731+
"promisifyAll"),
731732
DataFlow::moduleMember("thenify-all", "withCallback"),
732733
DataFlow::moduleImport(["util-promisifyall", "pify", "thenify-all", "@gar/promisify"])
733734
].getACall()
@@ -744,7 +745,7 @@ module Promisify {
744745
or
745746
this = DataFlow::moduleImport(["pify", "util.promisify"]).getACall()
746747
or
747-
this = DataFlow::moduleImport(["thenify", "@gar/promisify"]).getACall()
748+
this = DataFlow::moduleImport(["thenify", "@gar/promisify", "es6-promisify"]).getACall()
748749
or
749750
this = DataFlow::moduleMember("thenify", "withCallback").getACall()
750751
or

javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@
8787
| promisification.js:43:24:43:27 | code | promisification.js:37:18:37:25 | req.body | promisification.js:43:24:43:27 | code | This command line depends on a $@. | promisification.js:37:18:37:25 | req.body | user-provided value |
8888
| promisification.js:52:21:52:24 | code | promisification.js:49:18:49:25 | req.body | promisification.js:52:21:52:24 | code | This command line depends on a $@. | promisification.js:49:18:49:25 | req.body | user-provided value |
8989
| promisification.js:55:15:55:18 | code | promisification.js:49:18:49:25 | req.body | promisification.js:55:15:55:18 | code | This command line depends on a $@. | promisification.js:49:18:49:25 | req.body | user-provided value |
90+
| promisification.js:65:21:65:23 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:65:21:65:23 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value |
91+
| promisification.js:69:20:69:22 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:69:20:69:22 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value |
92+
| promisification.js:74:26:74:28 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:74:26:74:28 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value |
93+
| promisification.js:77:24:77:26 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:77:24:77:26 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value |
94+
| promisification.js:78:28:78:30 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:78:28:78:30 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value |
95+
| promisification.js:79:25:79:27 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:79:25:79:27 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value |
9096
| promisification.js:100:23:100:26 | code | promisification.js:99:18:99:25 | req.body | promisification.js:100:23:100:26 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value |
9197
| promisification.js:101:27:101:30 | code | promisification.js:99:18:99:25 | req.body | promisification.js:101:27:101:30 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value |
9298
| promisification.js:102:27:102:30 | code | promisification.js:99:18:99:25 | req.body | promisification.js:102:27:102:30 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value |
@@ -282,6 +288,13 @@ edges
282288
| promisification.js:49:11:49:14 | code | promisification.js:52:21:52:24 | code | provenance | |
283289
| promisification.js:49:11:49:14 | code | promisification.js:55:15:55:18 | code | provenance | |
284290
| promisification.js:49:18:49:25 | req.body | promisification.js:49:11:49:14 | code | provenance | |
291+
| promisification.js:61:9:61:11 | cmd | promisification.js:65:21:65:23 | cmd | provenance | |
292+
| promisification.js:61:9:61:11 | cmd | promisification.js:69:20:69:22 | cmd | provenance | |
293+
| promisification.js:61:9:61:11 | cmd | promisification.js:74:26:74:28 | cmd | provenance | |
294+
| promisification.js:61:9:61:11 | cmd | promisification.js:77:24:77:26 | cmd | provenance | |
295+
| promisification.js:61:9:61:11 | cmd | promisification.js:78:28:78:30 | cmd | provenance | |
296+
| promisification.js:61:9:61:11 | cmd | promisification.js:79:25:79:27 | cmd | provenance | |
297+
| promisification.js:61:15:61:22 | req.body | promisification.js:61:9:61:11 | cmd | provenance | |
285298
| promisification.js:99:11:99:14 | code | promisification.js:100:23:100:26 | code | provenance | |
286299
| promisification.js:99:11:99:14 | code | promisification.js:101:27:101:30 | code | provenance | |
287300
| promisification.js:99:11:99:14 | code | promisification.js:102:27:102:30 | code | provenance | |
@@ -492,6 +505,14 @@ nodes
492505
| promisification.js:49:18:49:25 | req.body | semmle.label | req.body |
493506
| promisification.js:52:21:52:24 | code | semmle.label | code |
494507
| promisification.js:55:15:55:18 | code | semmle.label | code |
508+
| promisification.js:61:9:61:11 | cmd | semmle.label | cmd |
509+
| promisification.js:61:15:61:22 | req.body | semmle.label | req.body |
510+
| promisification.js:65:21:65:23 | cmd | semmle.label | cmd |
511+
| promisification.js:69:20:69:22 | cmd | semmle.label | cmd |
512+
| promisification.js:74:26:74:28 | cmd | semmle.label | cmd |
513+
| promisification.js:77:24:77:26 | cmd | semmle.label | cmd |
514+
| promisification.js:78:28:78:30 | cmd | semmle.label | cmd |
515+
| promisification.js:79:25:79:27 | cmd | semmle.label | cmd |
495516
| promisification.js:99:11:99:14 | code | semmle.label | code |
496517
| promisification.js:99:18:99:25 | req.body | semmle.label | req.body |
497518
| promisification.js:100:23:100:26 | code | semmle.label | code |

javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/promisification.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,25 +58,25 @@ app.post('/eval', async (req, res) => {
5858

5959
app.post('/eval', async (req, res) => {
6060
const es6Promisify = require("es6-promisify");
61-
let cmd = req.body; // $ MISSING: Source
61+
let cmd = req.body; // $ Source
6262

6363
// Test basic promisification
6464
const promisifiedExec = es6Promisify(cp.exec);
65-
promisifiedExec(cmd); // $ MISSING: Alert
65+
promisifiedExec(cmd); // $ Alert
6666

6767
// Test with method binding
6868
const execBoundAsync = es6Promisify(cp.exec.bind(cp));
69-
execBoundAsync(cmd); // $ MISSING: Alert
69+
execBoundAsync(cmd); // $ Alert
7070

7171
const promisifiedExecMulti = es6Promisify(cp.exec, {
7272
multiArgs: true
7373
});
74-
promisifiedExecMulti(cmd); // $ MISSING: Alert
74+
promisifiedExecMulti(cmd); // $ Alert
7575

7676
const promisifiedCp = es6Promisify.promisifyAll(cp);
77-
promisifiedCp.exec(cmd); // $ MISSING: Alert
78-
promisifiedCp.execFile(cmd); // $ MISSING: Alert
79-
promisifiedCp.spawn(cmd); // $ MISSING: Alert
77+
promisifiedCp.exec(cmd); // $ Alert
78+
promisifiedCp.execFile(cmd); // $ Alert
79+
promisifiedCp.spawn(cmd); // $ Alert
8080

8181
const lambda = es6Promisify((code, callback) => {
8282
try {

0 commit comments

Comments
 (0)