Skip to content

Commit 312471e

Browse files
committed
JS: Add modeling for @google-cloud/promisify
1 parent d37425a commit 312471e

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,7 @@ module Promisify {
727727
PromisifyAllCall() {
728728
this =
729729
[
730-
DataFlow::moduleMember("bluebird", "promisifyAll"),
730+
DataFlow::moduleMember(["bluebird", "@google-cloud/promisify"], "promisifyAll"),
731731
DataFlow::moduleMember("thenify-all", "withCallback"),
732732
DataFlow::moduleImport(["util-promisifyall", "pify", "thenify-all"])
733733
].getACall()
@@ -747,6 +747,8 @@ module Promisify {
747747
this = DataFlow::moduleImport("thenify").getACall()
748748
or
749749
this = DataFlow::moduleMember("thenify", "withCallback").getACall()
750+
or
751+
this = DataFlow::moduleMember("@google-cloud/promisify", "promisify").getACall()
750752
}
751753
}
752754
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@
9090
| 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 |
9191
| promisification.js:106:24:106:27 | code | promisification.js:99:18:99:25 | req.body | promisification.js:106:24:106:27 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value |
9292
| promisification.js:109:24:109:27 | code | promisification.js:99:18:99:25 | req.body | promisification.js:109:24:109:27 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value |
93+
| promisification.js:144:21:144:24 | code | promisification.js:141:18:141:25 | req.body | promisification.js:144:21:144:24 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value |
94+
| promisification.js:147:15:147:18 | code | promisification.js:141:18:141:25 | req.body | promisification.js:147:15:147:18 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value |
95+
| promisification.js:150:24:150:27 | code | promisification.js:141:18:141:25 | req.body | promisification.js:150:24:150:27 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value |
96+
| promisification.js:151:28:151:31 | code | promisification.js:141:18:141:25 | req.body | promisification.js:151:28:151:31 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value |
97+
| promisification.js:152:25:152:28 | code | promisification.js:141:18:141:25 | req.body | promisification.js:152:25:152:28 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value |
9398
| third-party-command-injection.js:6:21:6:27 | command | third-party-command-injection.js:5:20:5:26 | command | third-party-command-injection.js:6:21:6:27 | command | This command line depends on a $@. | third-party-command-injection.js:5:20:5:26 | command | user-provided value |
9499
edges
95100
| actions.js:8:9:8:13 | title | actions.js:9:16:9:20 | title | provenance | |
@@ -278,6 +283,12 @@ edges
278283
| promisification.js:99:11:99:14 | code | promisification.js:106:24:106:27 | code | provenance | |
279284
| promisification.js:99:11:99:14 | code | promisification.js:109:24:109:27 | code | provenance | |
280285
| promisification.js:99:18:99:25 | req.body | promisification.js:99:11:99:14 | code | provenance | |
286+
| promisification.js:141:11:141:14 | code | promisification.js:144:21:144:24 | code | provenance | |
287+
| promisification.js:141:11:141:14 | code | promisification.js:147:15:147:18 | code | provenance | |
288+
| promisification.js:141:11:141:14 | code | promisification.js:150:24:150:27 | code | provenance | |
289+
| promisification.js:141:11:141:14 | code | promisification.js:151:28:151:31 | code | provenance | |
290+
| promisification.js:141:11:141:14 | code | promisification.js:152:25:152:28 | code | provenance | |
291+
| promisification.js:141:18:141:25 | req.body | promisification.js:141:11:141:14 | code | provenance | |
281292
| third-party-command-injection.js:5:20:5:26 | command | third-party-command-injection.js:6:21:6:27 | command | provenance | |
282293
nodes
283294
| actions.js:8:9:8:13 | title | semmle.label | title |
@@ -479,6 +490,13 @@ nodes
479490
| promisification.js:102:27:102:30 | code | semmle.label | code |
480491
| promisification.js:106:24:106:27 | code | semmle.label | code |
481492
| promisification.js:109:24:109:27 | code | semmle.label | code |
493+
| promisification.js:141:11:141:14 | code | semmle.label | code |
494+
| promisification.js:141:18:141:25 | req.body | semmle.label | req.body |
495+
| promisification.js:144:21:144:24 | code | semmle.label | code |
496+
| promisification.js:147:15:147:18 | code | semmle.label | code |
497+
| promisification.js:150:24:150:27 | code | semmle.label | code |
498+
| promisification.js:151:28:151:31 | code | semmle.label | code |
499+
| promisification.js:152:25:152:28 | code | semmle.label | code |
482500
| third-party-command-injection.js:5:20:5:26 | command | semmle.label | command |
483501
| third-party-command-injection.js:6:21:6:27 | command | semmle.label | command |
484502
subpaths

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,16 @@ app.post('/eval', async (req, res) => {
138138

139139
app.post('/eval', async (req, res) => {
140140
const {promisify, promisifyAll} = require('@google-cloud/promisify');
141-
const code = req.body; // $ MISSING: Source
141+
const code = req.body; // $ Source
142142

143143
const promisifiedExec = promisify(cp.exec);
144-
promisifiedExec(code); // $ MISSING: Alert
144+
promisifiedExec(code); // $ Alert
145145

146146
const execAsync = promisify(cp.exec.bind(cp));
147-
execAsync(code); // $ MISSING: Alert
147+
execAsync(code); // $ Alert
148148

149149
const promisifiedCp = promisifyAll(cp);
150-
promisifiedCp.exec(code); // $ MISSING: Alert
151-
promisifiedCp.execFile(code); // $ MISSING: Alert
152-
promisifiedCp.spawn(code); // $ MISSING: Alert
150+
promisifiedCp.exec(code); // $ Alert
151+
promisifiedCp.execFile(code); // $ Alert
152+
promisifiedCp.spawn(code); // $ Alert
153153
});

0 commit comments

Comments
 (0)