Skip to content

Commit f9d704b

Browse files
author
Max Schaefer
committed
JavaScript: Add example of indirect command injection.
1 parent 7d2d338 commit f9d704b

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,21 @@ nodes
3838
| child_process-test.js:55:19:55:22 | args |
3939
| child_process-test.js:56:12:56:14 | cmd |
4040
| child_process-test.js:56:17:56:20 | args |
41+
| execSeries.js:3:20:3:22 | arr |
42+
| execSeries.js:5:4:5:3 | arr |
43+
| execSeries.js:6:14:6:16 | arr |
44+
| execSeries.js:6:14:6:21 | arr[i++] |
45+
| execSeries.js:13:19:13:26 | commands |
46+
| execSeries.js:14:13:14:20 | commands |
47+
| execSeries.js:14:24:14:30 | command |
48+
| execSeries.js:14:41:14:47 | command |
49+
| execSeries.js:18:7:18:58 | cmd |
50+
| execSeries.js:18:13:18:47 | require ... , true) |
51+
| execSeries.js:18:13:18:53 | require ... ).query |
52+
| execSeries.js:18:13:18:58 | require ... ry.path |
53+
| execSeries.js:18:34:18:40 | req.url |
54+
| execSeries.js:19:12:19:16 | [cmd] |
55+
| execSeries.js:19:13:19:15 | cmd |
4156
edges
4257
| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:17:13:17:15 | cmd |
4358
| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:18:17:18:19 | cmd |
@@ -70,6 +85,21 @@ edges
7085
| child_process-test.js:48:16:48:17 | [] | child_process-test.js:48:9:48:17 | args |
7186
| child_process-test.js:55:14:55:16 | cmd | child_process-test.js:56:12:56:14 | cmd |
7287
| child_process-test.js:55:19:55:22 | args | child_process-test.js:56:17:56:20 | args |
88+
| execSeries.js:3:20:3:22 | arr | execSeries.js:5:4:5:3 | arr |
89+
| execSeries.js:5:4:5:3 | arr | execSeries.js:6:14:6:16 | arr |
90+
| execSeries.js:6:14:6:16 | arr | execSeries.js:6:14:6:21 | arr[i++] |
91+
| execSeries.js:6:14:6:21 | arr[i++] | execSeries.js:14:24:14:30 | command |
92+
| execSeries.js:13:19:13:26 | commands | execSeries.js:14:13:14:20 | commands |
93+
| execSeries.js:14:13:14:20 | commands | execSeries.js:3:20:3:22 | arr |
94+
| execSeries.js:14:13:14:20 | commands | execSeries.js:14:24:14:30 | command |
95+
| execSeries.js:14:24:14:30 | command | execSeries.js:14:41:14:47 | command |
96+
| execSeries.js:18:7:18:58 | cmd | execSeries.js:19:13:19:15 | cmd |
97+
| execSeries.js:18:13:18:47 | require ... , true) | execSeries.js:18:13:18:53 | require ... ).query |
98+
| execSeries.js:18:13:18:53 | require ... ).query | execSeries.js:18:13:18:58 | require ... ry.path |
99+
| execSeries.js:18:13:18:58 | require ... ry.path | execSeries.js:18:7:18:58 | cmd |
100+
| execSeries.js:18:34:18:40 | req.url | execSeries.js:18:13:18:47 | require ... , true) |
101+
| execSeries.js:19:12:19:16 | [cmd] | execSeries.js:13:19:13:26 | commands |
102+
| execSeries.js:19:13:19:15 | cmd | execSeries.js:19:12:19:16 | [cmd] |
73103
#select
74104
| child_process-test.js:17:13:17:15 | cmd | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:17:13:17:15 | cmd | This command depends on $@. | child_process-test.js:6:25:6:31 | req.url | a user-provided value |
75105
| child_process-test.js:18:17:18:19 | cmd | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:18:17:18:19 | cmd | This command depends on $@. | child_process-test.js:6:25:6:31 | req.url | a user-provided value |
@@ -83,3 +113,4 @@ edges
83113
| child_process-test.js:44:5:44:34 | cp.exec ... , args) | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:43:15:43:17 | cmd | This command depends on $@. | child_process-test.js:6:25:6:31 | req.url | a user-provided value |
84114
| child_process-test.js:51:5:51:39 | cp.exec ... , args) | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:50:15:50:17 | cmd | This command depends on $@. | child_process-test.js:6:25:6:31 | req.url | a user-provided value |
85115
| child_process-test.js:56:3:56:21 | cp.spawn(cmd, args) | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:43:15:43:17 | cmd | This command depends on $@. | child_process-test.js:6:25:6:31 | req.url | a user-provided value |
116+
| execSeries.js:14:41:14:47 | command | execSeries.js:18:34:18:40 | req.url | execSeries.js:14:41:14:47 | command | This command depends on $@. | execSeries.js:18:34:18:40 | req.url | a user-provided value |
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var exec = require('child_process').exec;
2+
3+
function asyncEach(arr, iterator) {
4+
var i = 0;
5+
(function iterate() {
6+
iterator(arr[i++], function () {
7+
if (i < arr.length)
8+
process.nextTick(iterate);
9+
});
10+
})();
11+
}
12+
13+
function execEach(commands) {
14+
asyncEach(commands, (command) => exec(command));
15+
};
16+
17+
require('http').createServer(function(req, res) {
18+
let cmd = require('url').parse(req.url, true).query.path;
19+
execEach([cmd]); // NOT OK
20+
});

0 commit comments

Comments
 (0)