Skip to content

Commit dc27a8f

Browse files
committed
JS: model mongoose Model on createConnection.<model/models>
1 parent 730396d commit dc27a8f

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,13 @@ private module Mongoose {
218218
*/
219219
private DataFlow::SourceNode ref(DataFlow::TypeTracker t) {
220220
(
221-
result = getAMongooseInstance().getAMemberCall("model") or
221+
result = getAMongooseInstance().getAMemberCall("model")
222+
or
223+
exists(DataFlow::SourceNode conn | conn = createConnection() |
224+
result = conn.getAMemberCall("model") or
225+
result = conn.getAPropertyRead("models").getAPropertyRead()
226+
)
227+
or
222228
result.hasUnderlyingType("mongoose", "Model")
223229
) and
224230
t.start()

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ nodes
8686
| mongoose.js:74:16:74:20 | query |
8787
| mongoose.js:76:10:76:14 | query |
8888
| mongoose.js:76:10:76:14 | query |
89+
| mongoose.js:81:46:81:50 | query |
90+
| mongoose.js:81:46:81:50 | query |
91+
| mongoose.js:82:47:82:51 | query |
92+
| mongoose.js:82:47:82:51 | query |
8993
| mongooseJsonParse.js:19:11:19:20 | query |
9094
| mongooseJsonParse.js:19:19:19:20 | {} |
9195
| mongooseJsonParse.js:20:19:20:44 | JSON.pa ... y.data) |
@@ -228,6 +232,10 @@ edges
228232
| mongoose.js:20:11:20:20 | query | mongoose.js:74:16:74:20 | query |
229233
| mongoose.js:20:11:20:20 | query | mongoose.js:76:10:76:14 | query |
230234
| mongoose.js:20:11:20:20 | query | mongoose.js:76:10:76:14 | query |
235+
| mongoose.js:20:11:20:20 | query | mongoose.js:81:46:81:50 | query |
236+
| mongoose.js:20:11:20:20 | query | mongoose.js:81:46:81:50 | query |
237+
| mongoose.js:20:11:20:20 | query | mongoose.js:82:47:82:51 | query |
238+
| mongoose.js:20:11:20:20 | query | mongoose.js:82:47:82:51 | query |
231239
| mongoose.js:20:19:20:20 | {} | mongoose.js:20:11:20:20 | query |
232240
| mongoose.js:21:19:21:26 | req.body | mongoose.js:21:19:21:32 | req.body.title |
233241
| mongoose.js:21:19:21:26 | req.body | mongoose.js:21:19:21:32 | req.body.title |
@@ -273,6 +281,10 @@ edges
273281
| mongoose.js:21:19:21:32 | req.body.title | mongoose.js:74:16:74:20 | query |
274282
| mongoose.js:21:19:21:32 | req.body.title | mongoose.js:76:10:76:14 | query |
275283
| mongoose.js:21:19:21:32 | req.body.title | mongoose.js:76:10:76:14 | query |
284+
| mongoose.js:21:19:21:32 | req.body.title | mongoose.js:81:46:81:50 | query |
285+
| mongoose.js:21:19:21:32 | req.body.title | mongoose.js:81:46:81:50 | query |
286+
| mongoose.js:21:19:21:32 | req.body.title | mongoose.js:82:47:82:51 | query |
287+
| mongoose.js:21:19:21:32 | req.body.title | mongoose.js:82:47:82:51 | query |
276288
| mongooseJsonParse.js:19:11:19:20 | query | mongooseJsonParse.js:23:19:23:23 | query |
277289
| mongooseJsonParse.js:19:11:19:20 | query | mongooseJsonParse.js:23:19:23:23 | query |
278290
| mongooseJsonParse.js:19:19:19:20 | {} | mongooseJsonParse.js:19:11:19:20 | query |
@@ -343,6 +355,8 @@ edges
343355
| mongoose.js:73:7:73:11 | query | mongoose.js:21:19:21:26 | req.body | mongoose.js:73:7:73:11 | query | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |
344356
| mongoose.js:74:16:74:20 | query | mongoose.js:21:19:21:26 | req.body | mongoose.js:74:16:74:20 | query | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |
345357
| mongoose.js:76:10:76:14 | query | mongoose.js:21:19:21:26 | req.body | mongoose.js:76:10:76:14 | query | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |
358+
| mongoose.js:81:46:81:50 | query | mongoose.js:21:19:21:26 | req.body | mongoose.js:81:46:81:50 | query | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |
359+
| mongoose.js:82:47:82:51 | query | mongoose.js:21:19:21:26 | req.body | mongoose.js:82:47:82:51 | query | This query depends on $@. | mongoose.js:21:19:21:26 | req.body | a user-provided value |
346360
| mongooseJsonParse.js:23:19:23:23 | query | mongooseJsonParse.js:20:30:20:43 | req.query.data | mongooseJsonParse.js:23:19:23:23 | query | This query depends on $@. | mongooseJsonParse.js:20:30:20:43 | req.query.data | a user-provided value |
347361
| mongooseModelClient.js:11:16:11:24 | { id: v } | mongooseModelClient.js:10:22:10:29 | req.body | mongooseModelClient.js:11:16:11:24 | { id: v } | This query depends on $@. | mongooseModelClient.js:10:22:10:29 | req.body | a user-provided value |
348362
| mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | mongooseModelClient.js:12:22:12:29 | req.body | mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | This query depends on $@. | mongooseModelClient.js:12:22:12:29 | req.body | a user-provided value |

0 commit comments

Comments
 (0)