Skip to content

Commit 0751d73

Browse files
authored
Merge pull request #19256 from Napalys/js/open_package
JS: Model as Data `open` package
2 parents 8d467c7 + 4a4d78b commit 0751d73

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Added support for the `open` package.

javascript/ql/lib/ext/open.model.yml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: sinkModel
5+
data:
6+
- ["open", "Argument[0]", "path-injection"]
7+
- ["open", "Member[openApp].Argument[0]", "path-injection"]

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

+9
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@
140140
| normalizedPaths.js:408:19:408:60 | pathMod ... t('/')) | normalizedPaths.js:408:38:408:48 | req.query.x | normalizedPaths.js:408:19:408:60 | pathMod ... t('/')) | This path depends on a $@. | normalizedPaths.js:408:38:408:48 | req.query.x | user-provided value |
141141
| normalizedPaths.js:415:19:415:22 | path | normalizedPaths.js:412:35:412:45 | req.query.x | normalizedPaths.js:415:19:415:22 | path | This path depends on a $@. | normalizedPaths.js:412:35:412:45 | req.query.x | user-provided value |
142142
| normalizedPaths.js:426:21:426:24 | path | normalizedPaths.js:412:35:412:45 | req.query.x | normalizedPaths.js:426:21:426:24 | path | This path depends on a $@. | normalizedPaths.js:412:35:412:45 | req.query.x | user-provided value |
143+
| open.js:9:10:9:13 | file | open.js:7:18:7:31 | req.query.file | open.js:9:10:9:13 | file | This path depends on a $@. | open.js:7:18:7:31 | req.query.file | user-provided value |
144+
| open.js:10:13:10:16 | file | open.js:7:18:7:31 | req.query.file | open.js:10:13:10:16 | file | This path depends on a $@. | open.js:7:18:7:31 | req.query.file | user-provided value |
143145
| other-fs-libraries.js:11:19:11:22 | path | other-fs-libraries.js:9:24:9:30 | req.url | other-fs-libraries.js:11:19:11:22 | path | This path depends on a $@. | other-fs-libraries.js:9:24:9:30 | req.url | user-provided value |
144146
| other-fs-libraries.js:12:27:12:30 | path | other-fs-libraries.js:9:24:9:30 | req.url | other-fs-libraries.js:12:27:12:30 | path | This path depends on a $@. | other-fs-libraries.js:9:24:9:30 | req.url | user-provided value |
145147
| other-fs-libraries.js:13:24:13:27 | path | other-fs-libraries.js:9:24:9:30 | req.url | other-fs-libraries.js:13:24:13:27 | path | This path depends on a $@. | other-fs-libraries.js:9:24:9:30 | req.url | user-provided value |
@@ -561,6 +563,9 @@ edges
561563
| normalizedPaths.js:412:7:412:46 | path | normalizedPaths.js:426:21:426:24 | path | provenance | |
562564
| normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | normalizedPaths.js:412:7:412:46 | path | provenance | |
563565
| normalizedPaths.js:412:35:412:45 | req.query.x | normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | provenance | Config |
566+
| open.js:7:11:7:31 | file | open.js:9:10:9:13 | file | provenance | |
567+
| open.js:7:11:7:31 | file | open.js:10:13:10:16 | file | provenance | |
568+
| open.js:7:18:7:31 | req.query.file | open.js:7:11:7:31 | file | provenance | |
564569
| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:11:19:11:22 | path | provenance | |
565570
| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:12:27:12:30 | path | provenance | |
566571
| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:13:24:13:27 | path | provenance | |
@@ -1116,6 +1121,10 @@ nodes
11161121
| normalizedPaths.js:412:35:412:45 | req.query.x | semmle.label | req.query.x |
11171122
| normalizedPaths.js:415:19:415:22 | path | semmle.label | path |
11181123
| normalizedPaths.js:426:21:426:24 | path | semmle.label | path |
1124+
| open.js:7:11:7:31 | file | semmle.label | file |
1125+
| open.js:7:18:7:31 | req.query.file | semmle.label | req.query.file |
1126+
| open.js:9:10:9:13 | file | semmle.label | file |
1127+
| open.js:10:13:10:16 | file | semmle.label | file |
11191128
| other-fs-libraries.js:9:7:9:48 | path | semmle.label | path |
11201129
| other-fs-libraries.js:9:14:9:37 | url.par ... , true) | semmle.label | url.par ... , true) |
11211130
| other-fs-libraries.js:9:14:9:43 | url.par ... ).query | semmle.label | url.par ... ).query |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import open, {openApp, apps} from 'open';
2+
3+
const express = require('express');
4+
const app = express();
5+
6+
app.get('/open', (req, res) => {
7+
const file = req.query.file; // $ Source
8+
9+
open(file); // $ Alert
10+
openApp(file); // $ Alert
11+
});

0 commit comments

Comments
 (0)