Skip to content

Commit 84a7b3c

Browse files
authored
Merge pull request github#13157 from jcogs33/jcogs33/update-javascript-sink-kinds
JS: update MaD sink kinds
2 parents 1a82e21 + 3886ebf commit 84a7b3c

File tree

7 files changed

+24
-18
lines changed

7 files changed

+24
-18
lines changed

docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Note that this sink is already recognized by the CodeQL JS analysis, but for thi
5353
pack: codeql/javascript-all
5454
extensible: sinkModel
5555
data:
56-
- ["execa", "Member[shell].Argument[0]", "command-line-injection"]
56+
- ["execa", "Member[shell].Argument[0]", "command-injection"]
5757
5858
5959
- Since we're adding a new sink, we add a tuple to the **sinkModel** extensible predicate.
@@ -64,7 +64,7 @@ Note that this sink is already recognized by the CodeQL JS analysis, but for thi
6464
- **Member[shell]** selects accesses to the **shell** member of the **execa** package.
6565
- **Argument[0]** selects the first argument to calls to that member.
6666

67-
- **command-line-injection** indicates that this is considered a sink for the command injection query.
67+
- **command-injection** indicates that this is considered a sink for the command injection query.
6868

6969
Example: Taint sources from window 'message' events
7070
---------------------------------------------------
@@ -463,7 +463,7 @@ Sink kinds
463463
Unlike sources, sinks tend to be highly query-specific, rarely affecting more than one or two queries. Not every query supports customizable sinks. If the following sinks are not suitable for your use case, you should add a new query.
464464

465465
- **code-injection**: A sink that can be used to inject code, such as in calls to **eval**.
466-
- **command-line-injection**: A sink that can be used to inject shell commands, such as in calls to **child_process.spawn**.
466+
- **command-injection**: A sink that can be used to inject shell commands, such as in calls to **child_process.spawn**.
467467
- **path-injection**: A sink that can be used for path injection in a file system access, such as in calls to **fs.readFile**.
468468
- **sql-injection**: A sink that can be used for SQL injection, such as in a MySQL **query** call.
469469
- **nosql-injection**: A sink that can be used for NoSQL injection, such as in a MongoDB **findOne** call.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Updated the following JavaScript sink kind names. Any custom data extensions that use these sink kinds will need to be updated accordingly in order to continue working.
5+
* `command-line-injection` to `command-injection`
6+
* `credentials[kind]` to `credentials-kind`

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ module CredentialsExpr {
4646
private class CredentialsFromModel extends CredentialsNode {
4747
string kind;
4848

49-
CredentialsFromModel() { this = ModelOutput::getASinkNode("credentials[" + kind + "]").asSink() }
49+
CredentialsFromModel() { this = ModelOutput::getASinkNode("credentials-" + kind).asSink() }
5050

5151
override string getCredentialsKind() { result = CredentialsExpr::normalizeKind(kind) }
5252
}

javascript/ql/lib/semmle/javascript/frameworks/sequelize/model.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
"sequelize.Sequelize;Member[query].Argument[0].Member[query];sql-injection",
2020
"sequelize.Sequelize;Member[query].Argument[0];sql-injection",
2121
"sequelize.SequelizeStaticAndInstance;Member[asIs,literal].Argument[0];sql-injection",
22-
"sequelize;Argument[0..].Member[password];credentials[password]",
23-
"sequelize;Argument[0..].Member[username];credentials[username]",
24-
"sequelize;Argument[1];credentials[username]",
25-
"sequelize;Argument[2];credentials[password]"
22+
"sequelize;Argument[0..].Member[password];credentials-password",
23+
"sequelize;Argument[0..].Member[username];credentials-username",
24+
"sequelize;Argument[1];credentials-username",
25+
"sequelize;Argument[2];credentials-password"
2626
],
2727
"typeDefinitions": [
2828
"sequelize.Sequelize;sequelize-typescript.Sequelize;"

javascript/ql/lib/semmle/javascript/frameworks/sequelize/model.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
extensions:
2-
- addsTo:
2+
- addsTo:
33
pack: codeql/javascript-all
44
extensible: sinkModel
55
data:
66
- [sequelize.Sequelize, "Member[query].Argument[0].Member[query]", "sql-injection"]
77
- [sequelize.Sequelize, "Member[query].Argument[0]", "sql-injection"]
88
- [sequelize.SequelizeStaticAndInstance, "Member[asIs,literal].Argument[0]", "sql-injection"]
9-
- [sequelize, "Argument[0..].Member[password]", "credentials[password]"]
10-
- [sequelize, "Argument[0..].Member[username]", "credentials[username]"]
11-
- [sequelize, "Argument[1]", "credentials[username]"]
12-
- [sequelize, "Argument[2]", "credentials[password]"]
9+
- [sequelize, "Argument[0..].Member[password]", "credentials-password"]
10+
- [sequelize, "Argument[0..].Member[username]", "credentials-username"]
11+
- [sequelize, "Argument[1]", "credentials-username"]
12+
- [sequelize, "Argument[2]", "credentials-password"]
1313

14-
- addsTo:
14+
- addsTo:
1515
pack: codeql/javascript-all
1616
extensible: typeModel
1717
data:
@@ -264,7 +264,7 @@ extensions:
264264
- [sequelize.ThroughOptions, sequelize.AssociationOptionsBelongsToMany, "Member[through]"]
265265
- [sequelize.Utils, sequelize.SequelizeStaticAndInstance, "Member[Utils]"]
266266

267-
- addsTo:
267+
- addsTo:
268268
pack: codeql/javascript-all
269269
extensible: summaryModel
270270
data:
@@ -274,7 +274,7 @@ extensions:
274274
- [sequelize.Model, "", "", "Member[schema,scope,unscoped].ReturnValue", type]
275275
- [sequelize.Model, "", "", "Member[sync].ReturnValue.Awaited", type]
276276

277-
- addsTo:
277+
- addsTo:
278278
pack: codeql/javascript-all
279279
extensible: typeVariableModel
280280
data:

javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionCustomizations.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,6 @@ module CommandInjection {
4949
}
5050

5151
private class SinkFromModel extends Sink {
52-
SinkFromModel() { this = ModelOutput::getASinkNode("command-line-injection").asSink() }
52+
SinkFromModel() { this = ModelOutput::getASinkNode("command-injection").asSink() }
5353
}
5454
}

javascript/ql/test/library-tests/DataExtensions/execa.model.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ extensions:
66
- [
77
"@example/execa",
88
"Member[shell].Argument[0]",
9-
"command-line-injection",
9+
"command-injection",
1010
]

0 commit comments

Comments
 (0)