Skip to content

Commit 5e72048

Browse files
committed
JS: recognize req.query.x as deep object taint
1 parent d72d734 commit 5e72048

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

javascript/ql/src/semmle/javascript/frameworks/Express.qll

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,17 @@ module Express {
501501
// but all known body parsers are deep, assume req.body is a deep object.
502502
kind = "body" and
503503
forall(ExpressLibraries::BodyParser bodyParser | bodyParser.isDeepObject())
504+
or
505+
kind = "parameter" and
506+
exists (DataFlow::Node request | request = DataFlow::valueNode(rh.getARequestExpr()) |
507+
this.(DataFlow::MethodCallNode).calls(request, "param")
508+
or
509+
exists (DataFlow::PropRead base |
510+
// `req.query.name`
511+
base.accesses(request, "query") and
512+
this = base.getAPropertyReference(_)
513+
)
514+
)
504515
}
505516
}
506517

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
| mongodb.js:18:16:18:20 | query | This query depends on $@. | mongodb.js:13:19:13:26 | req.body | a user-provided value |
2+
| mongodb.js:45:16:45:20 | query | This query depends on $@. | mongodb.js:40:19:40:33 | req.query.title | a user-provided value |
3+
| 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 |
24
| mongoose.js:27:20:27:24 | query | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |
35
| mongoose.js:30:25:30:29 | query | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |
46
| mongoose.js:33:24:33:28 | 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/mongodb.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ app.post('/documents/find', (req, res) => {
4242
let doc = db.collection('doc');
4343

4444
// NOT OK: query is tainted by user-provided object value
45-
doc.find(query); // Not currently detected
45+
doc.find(query);
4646
});
4747
});

0 commit comments

Comments
 (0)