Skip to content

Commit ff55ed8

Browse files
authored
Merge pull request github#16181 from hvitved/dynamic/deprecate-csv-models
Dynamic languages: Deprecate models-as-data CSV interface
2 parents 3105697 + e7dc120 commit ff55ed8

File tree

40 files changed

+775
-901
lines changed

40 files changed

+775
-901
lines changed

javascript/ql/lib/qlpack.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ dependencies:
1515
codeql/yaml: ${workspace}
1616
dataExtensions:
1717
- semmle/javascript/frameworks/**/model.yml
18+
- semmle/javascript/frameworks/**/*.model.yml
1819
warnOnImplicitThis: true
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: typeModel
5+
data:
6+
# In Mongo version 2.x, a client and a database handle were the same concept, but in 3.x
7+
# they were separated. To handle everything with a single model, we treat them as the same here.
8+
- ['mongodb.Db', 'mongodb.MongoClient', '']
9+
# 'marsdb' has no typings and is archived.
10+
# We just model is as a variant of 'mongoose'.
11+
- ['mongoose.Model', 'marsdb', 'Member[Collection].Instance']
12+
- ['mongoose.Query', 'marsdb', 'Member[Collection].Instance']
13+
- ['mongoose.Query', 'mongoose.Query', 'Member[sortFunc].ReturnValue']

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

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,6 @@ module NoSql {
2121
* Provides classes modeling the `mongodb` and `mongoose` libraries.
2222
*/
2323
private module MongoDB {
24-
private class OldMongoDbAdapter extends ModelInput::TypeModelCsv {
25-
override predicate row(string row) {
26-
// In Mongo version 2.x, a client and a database handle were the same concept, but in 3.x
27-
// they were separated. To handle everything with a single model, we treat them as the same here.
28-
row = "mongodb.Db;mongodb.MongoClient;"
29-
}
30-
}
31-
3224
/**
3325
* An expression that is interpreted as a MongoDB query.
3426
*/
@@ -169,24 +161,6 @@ private module Mongoose {
169161
}
170162
}
171163

172-
/**
173-
* Provides classes modeling the MarsDB library.
174-
*/
175-
private module MarsDB {
176-
// 'marsdb' has no typings and is archived.
177-
// We just model is as a variant of 'mongoose'.
178-
private class MongooseExtension extends ModelInput::TypeModelCsv {
179-
override predicate row(string row) {
180-
row =
181-
[
182-
"mongoose.Query;marsdb;Member[Collection].Instance",
183-
"mongoose.Model;marsdb;Member[Collection].Instance",
184-
"mongoose.Query;mongoose.Query;Member[sortFunc].ReturnValue",
185-
]
186-
}
187-
}
188-
}
189-
190164
/**
191165
* Provides classes modeling the `Node Redis` library.
192166
*
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/javascript-all
4+
extensible: sourceModel
5+
data:
6+
- ['@google-cloud/spanner.~SpannerObject', 'Member[executeSql].Argument[0..].Parameter[1]', 'database-access-result']
7+
- ['@google-cloud/spanner.~SpannerObject', 'Member[executeSql].ReturnValue.Awaited.Member[0]', 'database-access-result']
8+
- ['@google-cloud/spanner.~SpannerObject', 'Member[run].Argument[0..].Parameter[1]', 'database-access-result']
9+
- ['@google-cloud/spanner.~SpannerObject', 'Member[run].ReturnValue.Awaited', 'database-access-result']
10+
- ['sequelize.Sequelize', 'Member[query].ReturnValue.Awaited', 'database-access-result']
11+
12+
- addsTo:
13+
pack: codeql/javascript-all
14+
extensible: sinkModel
15+
data:
16+
- ['@google-cloud/spanner.Transaction', 'Member[batchUpdate].Argument[0]', 'sql-injection']
17+
- ['@google-cloud/spanner.Transaction', 'Member[batchUpdate].Argument[0].ArrayElement.Member[sql]', 'sql-injection']
18+
- ['@google-cloud/spanner.~SqlExecutorDirect', 'Argument[0]', 'sql-injection']
19+
- ['@google-cloud/spanner.~SqlExecutorDirect', 'Argument[0].Member[sql]', 'sql-injection']

javascript/ql/lib/semmle/javascript/frameworks/SQL.qll

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -415,42 +415,3 @@ private module MsSql {
415415
override string getCredentialsKind() { result = kind }
416416
}
417417
}
418-
419-
/**
420-
* Provides classes modeling the `sequelize` package.
421-
*/
422-
private module Sequelize {
423-
// Note: the sinks are specified directly in the MaD model
424-
class SequelizeSource extends ModelInput::SourceModelCsv {
425-
override predicate row(string row) {
426-
row = "sequelize.Sequelize;Member[query].ReturnValue.Awaited;database-access-result"
427-
}
428-
}
429-
}
430-
431-
private module SpannerCsv {
432-
class SpannerSinks extends ModelInput::SinkModelCsv {
433-
override predicate row(string row) {
434-
// type; path; kind
435-
row =
436-
[
437-
"@google-cloud/spanner.~SqlExecutorDirect;Argument[0];sql-injection",
438-
"@google-cloud/spanner.~SqlExecutorDirect;Argument[0].Member[sql];sql-injection",
439-
"@google-cloud/spanner.Transaction;Member[batchUpdate].Argument[0];sql-injection",
440-
"@google-cloud/spanner.Transaction;Member[batchUpdate].Argument[0].ArrayElement.Member[sql];sql-injection",
441-
]
442-
}
443-
}
444-
445-
class SpannerSources extends ModelInput::SourceModelCsv {
446-
override predicate row(string row) {
447-
row =
448-
[
449-
"@google-cloud/spanner.~SpannerObject;Member[executeSql].Argument[0..].Parameter[1];database-access-result",
450-
"@google-cloud/spanner.~SpannerObject;Member[executeSql].ReturnValue.Awaited.Member[0];database-access-result",
451-
"@google-cloud/spanner.~SpannerObject;Member[run].ReturnValue.Awaited;database-access-result",
452-
"@google-cloud/spanner.~SpannerObject;Member[run].Argument[0..].Parameter[1];database-access-result",
453-
]
454-
}
455-
}
456-
}

0 commit comments

Comments
 (0)