Skip to content

Commit 3157cd7

Browse files
committed
add noSQL tests for type-tracking req.query
1 parent bace299 commit 3157cd7

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

javascript/ql/test/query-tests/Security/CWE-089/untyped/DatabaseAccesses.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
| mongodb.js:65:3:65:17 | doc.find(query) |
1212
| mongodb.js:73:5:77:27 | client\\n ... tag }) |
1313
| mongodb.js:81:3:85:25 | importe ... tag }) |
14+
| mongodb.js:98:5:98:19 | doc.find(query) |
15+
| mongodb.js:112:5:112:19 | doc.find(query) |
1416
| mongodb_bodySafe.js:18:7:18:21 | doc.find(query) |
1517
| mongodb_bodySafe.js:29:7:29:21 | doc.find(query) |
1618
| mongoose.js:63:2:63:34 | Documen ... then(X) |

javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ nodes
5656
| mongodb.js:85:12:85:24 | { tags: tag } |
5757
| mongodb.js:85:12:85:24 | { tags: tag } |
5858
| mongodb.js:85:20:85:22 | tag |
59+
| mongodb.js:106:9:106:18 | query |
60+
| mongodb.js:106:17:106:18 | {} |
61+
| mongodb.js:107:17:107:29 | queries.title |
62+
| mongodb.js:107:17:107:29 | queries.title |
63+
| mongodb.js:112:14:112:18 | query |
64+
| mongodb.js:112:14:112:18 | query |
5965
| mongodb_bodySafe.js:23:11:23:20 | query |
6066
| mongodb_bodySafe.js:23:19:23:20 | {} |
6167
| mongodb_bodySafe.js:24:19:24:33 | req.query.title |
@@ -244,6 +250,17 @@ edges
244250
| mongodb.js:77:22:77:24 | tag | mongodb.js:77:14:77:26 | { tags: tag } |
245251
| mongodb.js:85:20:85:22 | tag | mongodb.js:85:12:85:24 | { tags: tag } |
246252
| mongodb.js:85:20:85:22 | tag | mongodb.js:85:12:85:24 | { tags: tag } |
253+
| mongodb.js:106:9:106:18 | query | mongodb.js:112:14:112:18 | query |
254+
| mongodb.js:106:9:106:18 | query | mongodb.js:112:14:112:18 | query |
255+
| mongodb.js:106:17:106:18 | {} | mongodb.js:106:9:106:18 | query |
256+
| mongodb.js:107:17:107:29 | queries.title | mongodb.js:106:9:106:18 | query |
257+
| mongodb.js:107:17:107:29 | queries.title | mongodb.js:106:9:106:18 | query |
258+
| mongodb.js:107:17:107:29 | queries.title | mongodb.js:106:17:106:18 | {} |
259+
| mongodb.js:107:17:107:29 | queries.title | mongodb.js:106:17:106:18 | {} |
260+
| mongodb.js:107:17:107:29 | queries.title | mongodb.js:112:14:112:18 | query |
261+
| mongodb.js:107:17:107:29 | queries.title | mongodb.js:112:14:112:18 | query |
262+
| mongodb.js:107:17:107:29 | queries.title | mongodb.js:112:14:112:18 | query |
263+
| mongodb.js:107:17:107:29 | queries.title | mongodb.js:112:14:112:18 | query |
247264
| mongodb_bodySafe.js:23:11:23:20 | query | mongodb_bodySafe.js:29:16:29:20 | query |
248265
| mongodb_bodySafe.js:23:11:23:20 | query | mongodb_bodySafe.js:29:16:29:20 | query |
249266
| mongodb_bodySafe.js:23:19:23:20 | {} | mongodb_bodySafe.js:23:11:23:20 | query |
@@ -428,6 +445,7 @@ edges
428445
| mongodb.js:65:12:65:16 | query | mongodb.js:60:16:60:30 | req.query.title | mongodb.js:65:12:65:16 | query | This query depends on $@. | mongodb.js:60:16:60:30 | req.query.title | a user-provided value |
429446
| mongodb.js:77:14:77:26 | { tags: tag } | mongodb.js:70:13:70:25 | req.query.tag | mongodb.js:77:14:77:26 | { tags: tag } | This query depends on $@. | mongodb.js:70:13:70:25 | req.query.tag | a user-provided value |
430447
| mongodb.js:85:12:85:24 | { tags: tag } | mongodb.js:70:13:70:25 | req.query.tag | mongodb.js:85:12:85:24 | { tags: tag } | This query depends on $@. | mongodb.js:70:13:70:25 | req.query.tag | a user-provided value |
448+
| mongodb.js:112:14:112:18 | query | mongodb.js:107:17:107:29 | queries.title | mongodb.js:112:14:112:18 | query | This query depends on $@. | mongodb.js:107:17:107:29 | queries.title | a user-provided value |
431449
| mongodb_bodySafe.js:29:16:29:20 | query | mongodb_bodySafe.js:24:19:24:33 | req.query.title | mongodb_bodySafe.js:29:16:29:20 | query | This query depends on $@. | mongodb_bodySafe.js:24:19:24:33 | req.query.title | a user-provided value |
432450
| mongoose.js:24:24:24:30 | [query] | mongoose.js:21:19:21:26 | req.body | mongoose.js:24:24:24:30 | [query] | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |
433451
| mongoose.js:27:20:27:24 | query | mongoose.js:21:19:21:26 | req.body | mongoose.js:27:20:27:24 | query | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |

javascript/ql/test/query-tests/Security/CWE-089/untyped/mongodb.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,31 @@ app.post("/logs/count-by-tag", (req, res) => {
8484
// NOT OK: query is tainted by user-provided object value
8585
.count({ tags: tag });
8686
});
87+
88+
89+
app.get('/:id', (req, res) => {
90+
useParams(req.param);
91+
});
92+
function useParams(params) {
93+
let query = { id: params.id };
94+
MongoClient.connect('mongodb://localhost:27017/test', (err, db) => {
95+
let doc = db.collection('doc');
96+
97+
// OK: query is tainted, but only by string value
98+
doc.find(query);
99+
});
100+
}
101+
102+
app.post('/documents/find', (req, res) => {
103+
useQuery(req.query);
104+
});
105+
function useQuery(queries) {
106+
const query = {};
107+
query.title = queries.title;
108+
MongoClient.connect('mongodb://localhost:27017/test', (err, db) => {
109+
let doc = db.collection('doc');
110+
111+
// NOT OK: query is tainted by user-provided object value
112+
doc.find(query);
113+
});
114+
}

0 commit comments

Comments
 (0)