Skip to content

Commit 7a08f32

Browse files
committed
Added support for cp functions from fs-extra.
1 parent 96a5505 commit 7a08f32

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ module NodeJSLib {
434434
* method might represent a file path.
435435
*/
436436
private predicate fsExtraExtensionFileParam(string methodName, int i) {
437-
methodName = ["copy", "copySync", "copyFile"] and i = [0, 1]
437+
methodName = ["copy", "copySync", "copyFile", "cp", "copyFileSync", "cpSync"] and i = [0, 1]
438438
or
439439
methodName = ["move", "moveSync"] and i = [0, 1]
440440
or

javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@
5252
| handlebars.js:11:32:11:39 | filePath | handlebars.js:29:46:29:60 | req.params.path | handlebars.js:11:32:11:39 | filePath | This path depends on a $@. | handlebars.js:29:46:29:60 | req.params.path | user-provided value |
5353
| handlebars.js:15:25:15:32 | filePath | handlebars.js:43:15:43:29 | req.params.path | handlebars.js:15:25:15:32 | filePath | This path depends on a $@. | handlebars.js:43:15:43:29 | req.params.path | user-provided value |
5454
| hapi.js:15:44:15:51 | filepath | hapi.js:14:30:14:51 | request ... ilepath | hapi.js:15:44:15:51 | filepath | This path depends on a $@. | hapi.js:14:30:14:51 | request ... ilepath | user-provided value |
55+
| more-fs-extra.js:14:11:14:18 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:14:11:14:18 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value |
56+
| more-fs-extra.js:15:21:15:28 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:15:21:15:28 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value |
57+
| more-fs-extra.js:16:21:16:28 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:16:21:16:28 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value |
58+
| more-fs-extra.js:17:31:17:38 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:17:31:17:38 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value |
59+
| more-fs-extra.js:18:15:18:22 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:18:15:18:22 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value |
60+
| more-fs-extra.js:19:25:19:32 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:19:25:19:32 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value |
5561
| normalizedPaths.js:13:19:13:22 | path | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:13:19:13:22 | path | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value |
5662
| normalizedPaths.js:14:19:14:29 | './' + path | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:14:19:14:29 | './' + path | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value |
5763
| normalizedPaths.js:15:19:15:38 | path + '/index.html' | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:15:19:15:38 | path + '/index.html' | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value |
@@ -347,6 +353,15 @@ edges
347353
| handlebars.js:43:15:43:29 | req.params.path | handlebars.js:13:73:13:80 | filePath | provenance | |
348354
| hapi.js:14:19:14:51 | filepath | hapi.js:15:44:15:51 | filepath | provenance | |
349355
| hapi.js:14:30:14:51 | request ... ilepath | hapi.js:14:19:14:51 | filepath | provenance | |
356+
| more-fs-extra.js:8:11:8:22 | { filename } | more-fs-extra.js:8:13:8:20 | filename | provenance | Config |
357+
| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:14:11:14:18 | filename | provenance | |
358+
| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:15:21:15:28 | filename | provenance | |
359+
| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:16:21:16:28 | filename | provenance | |
360+
| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:17:31:17:38 | filename | provenance | |
361+
| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:18:15:18:22 | filename | provenance | |
362+
| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:19:25:19:32 | filename | provenance | |
363+
| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:8:11:8:33 | filename | provenance | |
364+
| more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:8:11:8:22 | { filename } | provenance | |
350365
| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:13:19:13:22 | path | provenance | |
351366
| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:14:26:14:29 | path | provenance | |
352367
| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:15:19:15:22 | path | provenance | |
@@ -827,6 +842,16 @@ nodes
827842
| hapi.js:14:19:14:51 | filepath | semmle.label | filepath |
828843
| hapi.js:14:30:14:51 | request ... ilepath | semmle.label | request ... ilepath |
829844
| hapi.js:15:44:15:51 | filepath | semmle.label | filepath |
845+
| more-fs-extra.js:8:11:8:22 | { filename } | semmle.label | { filename } |
846+
| more-fs-extra.js:8:11:8:33 | filename | semmle.label | filename |
847+
| more-fs-extra.js:8:13:8:20 | filename | semmle.label | filename |
848+
| more-fs-extra.js:8:26:8:33 | req.body | semmle.label | req.body |
849+
| more-fs-extra.js:14:11:14:18 | filename | semmle.label | filename |
850+
| more-fs-extra.js:15:21:15:28 | filename | semmle.label | filename |
851+
| more-fs-extra.js:16:21:16:28 | filename | semmle.label | filename |
852+
| more-fs-extra.js:17:31:17:38 | filename | semmle.label | filename |
853+
| more-fs-extra.js:18:15:18:22 | filename | semmle.label | filename |
854+
| more-fs-extra.js:19:25:19:32 | filename | semmle.label | filename |
830855
| normalizedPaths.js:11:7:11:27 | path | semmle.label | path |
831856
| normalizedPaths.js:11:14:11:27 | req.query.path | semmle.label | req.query.path |
832857
| normalizedPaths.js:13:19:13:22 | path | semmle.label | path |

javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ const app = express();
55
app.use(express.json());
66

77
app.post('/rmsync', (req, res) => {
8-
const { filename } = req.body; // $ MISSING: Source
8+
const { filename } = req.body; // $ Source
99

1010
fs.rmSync(filename); // MISSING: $ Alert
1111
fs.rm(filename); // MISSING: $ Alert
1212
fs.rmdir(filename); // MISSING: $ Alert
1313
fs.rmdirSync(filename); // MISSING: $ Alert
14-
fs.cp(filename, "destination"); // MISSING: $ Alert
15-
fs.cp("source", filename); // MISSING: $ Alert
16-
fs.copyFileSync(filename, "destination"); // MISSING: $ Alert
17-
fs.copyFileSync("source", filename); // MISSING: $ Alert
18-
fs.cpSync(filename, "destination"); // MISSING: $ Alert
19-
fs.cpSync("source", filename); // MISSING: $ Alert
14+
fs.cp(filename, "destination"); // $ Alert
15+
fs.cp("source", filename); // $ Alert
16+
fs.copyFileSync(filename, "destination"); // $ Alert
17+
fs.copyFileSync("source", filename); // $ Alert
18+
fs.cpSync(filename, "destination"); // $ Alert
19+
fs.cpSync("source", filename); // $ Alert
2020
fs.emptydirSync(filename); // MISSING: $ Alert
2121
fs.emptydir(filename); // MISSING: $ Alert
2222
fs.opendir(filename); // $ MISSING: Alert

0 commit comments

Comments
 (0)