Skip to content

Commit 442ee8d

Browse files
committed
add consistency-checking for CWE-089
1 parent 2a8b37e commit 442ee8d

File tree

8 files changed

+132
-113
lines changed

8 files changed

+132
-113
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,8 @@ private module Mongoose {
302302
MongoDB::CollectionMethodSignatures::interpretsArgumentAsQuery(name, n)
303303
or
304304
name = "findByIdAndUpdate" and n = 1
305+
or
306+
name = "where" and n = 0
305307
}
306308

307309
/**

javascript/ql/test/query-tests/Security/CWE-079/Consistency.ql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import javascript
22
import testUtilities.ConsistencyChecking
3-
43
import semmle.javascript.security.dataflow.DomBasedXss as DomXss
54
import semmle.javascript.security.dataflow.ReflectedXss as ReflectedXss
65
import semmle.javascript.security.dataflow.StoredXss as StoredXss

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

Whitespace-only changes.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import javascript
2+
import testUtilities.ConsistencyChecking
3+
import semmle.javascript.security.dataflow.SqlInjection
4+
import semmle.javascript.security.dataflow.NosqlInjection

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,24 @@
1616
| mongoose.js:63:2:63:34 | Documen ... then(X) |
1717
| mongoose.js:65:2:65:51 | Documen ... on(){}) |
1818
| mongoose.js:67:2:68:27 | new Mon ... on(){}) |
19-
| mongoose.js:71:2:77:9 | Documen ... .exec() |
20-
| mongoose.js:84:2:84:52 | Documen ... query)) |
19+
| mongoose.js:71:5:78:9 | Documen ... .exec() |
2120
| mongoose.js:85:2:85:52 | Documen ... query)) |
22-
| mongoose.js:86:2:86:57 | Documen ... query)) |
21+
| mongoose.js:86:2:86:52 | Documen ... query)) |
2322
| mongoose.js:87:2:87:57 | Documen ... query)) |
24-
| mongoose.js:88:2:88:52 | Documen ... query)) |
25-
| mongoose.js:89:2:89:55 | Documen ... query)) |
26-
| mongoose.js:91:2:91:52 | Documen ... query)) |
27-
| mongoose.js:92:2:92:49 | Documen ... query)) |
28-
| mongoose.js:93:2:93:57 | Documen ... query)) |
29-
| mongoose.js:94:2:94:54 | Documen ... query)) |
30-
| mongoose.js:95:2:95:52 | Documen ... query)) |
23+
| mongoose.js:88:2:88:57 | Documen ... query)) |
24+
| mongoose.js:89:2:89:52 | Documen ... query)) |
25+
| mongoose.js:90:2:90:55 | Documen ... query)) |
26+
| mongoose.js:92:2:92:52 | Documen ... query)) |
27+
| mongoose.js:93:2:93:49 | Documen ... query)) |
28+
| mongoose.js:94:2:94:57 | Documen ... query)) |
29+
| mongoose.js:95:2:95:54 | Documen ... query)) |
3130
| mongoose.js:96:2:96:52 | Documen ... query)) |
32-
| mongoose.js:98:2:98:50 | Documen ... query)) |
31+
| mongoose.js:97:2:97:52 | Documen ... query)) |
32+
| mongoose.js:99:2:99:50 | Documen ... query)) |
3333
| socketio.js:11:5:11:54 | db.run( ... ndle}`) |
3434
| tst2.js:7:3:7:62 | sql.que ... ms.id}` |
3535
| tst2.js:9:3:9:85 | new sql ... + "'") |
36-
| tst3.js:10:3:12:4 | pool.qu ... ts\\n }) |
37-
| tst3.js:17:3:19:4 | pool.qu ... ts\\n }) |
36+
| tst3.js:9:3:11:4 | pool.qu ... ts\\n }) |
37+
| tst3.js:16:3:18:4 | pool.qu ... ts\\n }) |
3838
| tst4.js:8:3:8:67 | db.get( ... + '"') |
3939
| tst.js:10:3:10:65 | db.get( ... + '"') |

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

Lines changed: 110 additions & 96 deletions
Large diffs are not rendered by default.

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ app.post('/documents/find', (req, res) => {
6868
.and(query, function(){}) // NOT OK
6969
;
7070

71-
Document.where(query) // NOT OK
71+
Document.where(query) // NOT OK - `.where()` on a Model.
72+
.where(query) // NOT OK - `.where()` on a Query.
7273
.and(query) // NOT OK
7374
.or(query) // NOT OK
7475
.distinct(X, query) // NOT OK

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ const pg = require('pg');
44
const pool = new pg.Pool(config);
55

66
function handler(req, res) {
7-
// BAD: the category might have SQL special characters in it
87
var query1 = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='"
98
+ req.params.category + "' ORDER BY PRICE";
10-
pool.query(query1, [], function(err, results) {
9+
pool.query(query1, [], function(err, results) { // BAD: the category might have SQL special characters in it
1110
// process results
1211
});
1312

0 commit comments

Comments
 (0)