Skip to content

Commit 8e653d0

Browse files
authored
Merge pull request #14127 from egregius313/egregius313/java/mad/localuserinput
Java: Convert implementations of `LocalUserInput` to Models-as-Data
2 parents f7ca8e5 + e2a14c7 commit 8e653d0

File tree

9 files changed

+57
-27
lines changed

9 files changed

+57
-27
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Modified the `EnvInput` class in `semmle.code.java.dataflow.FlowSources` to include `environment` and `file` source nodes.
5+
There are no changes to results unless you add source models using the `environment` or `file` source kinds.
6+
* Added `environment` source models for the following methods:
7+
* `java.lang.System#getenv`
8+
* `java.lang.System#getProperties`
9+
* `java.lang.System#getProperty`
10+
* `java.util.Properties#get`
11+
* `java.util.Properties#getProperty`
12+
* Added `file` source models for the following methods:
13+
* the `java.io.FileInputStream` constructor
14+
* `hudson.FilePath#newInputStreamDenyingSymlinkAsNeeded`
15+
* `hudson.FilePath#openInputStream`
16+
* `hudson.FilePath#read`
17+
* `hudson.FilePath#readFromOffset`
18+
* `hudson.FilePath#readToString`
19+
* Modified the `DatabaseInput` class in `semmle.code.java.dataflow.FlowSources` to include `database` source nodes.
20+
There are no changes to results unless you add source models using the `database` source kind.
21+
* Added `database` source models for the following method:
22+
* `java.sql.ResultSet#getString`

java/ql/lib/ext/hudson.model.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ extensions:
3636
pack: codeql/java-all
3737
extensible: sourceModel
3838
data:
39+
- ["hudson", "FilePath", False, "newInputStreamDenyingSymlinkAsNeeded", "", "", "ReturnValue", "file", "manual"]
40+
- ["hudson", "FilePath", False, "openInputStream", "", "", "ReturnValue", "file", "manual"]
41+
- ["hudson", "FilePath", False, "read", "", "", "ReturnValue", "file", "manual"]
42+
- ["hudson", "FilePath", False, "readFromOffset", "", "", "ReturnValue", "file", "manual"]
43+
- ["hudson", "FilePath", False, "readToString", "", "", "ReturnValue", "file", "manual"]
3944
- ["hudson", "Plugin", True, "configure", "", "", "Parameter", "remote", "manual"]
4045
- ["hudson", "Plugin", True, "newInstance", "", "", "Parameter", "remote", "manual"]
4146
- addsTo:

java/ql/lib/ext/java.io.model.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,8 @@ extensions:
128128
# sink neutrals
129129
- ["java.io", "File", "compareTo", "", "sink", "hq-manual"]
130130
- ["java.io", "File", "exists", "()", "sink", "hq-manual"]
131+
- addsTo:
132+
pack: codeql/java-all
133+
extensible: sourceModel
134+
data:
135+
- ["java.io", "FileInputStream", True, "FileInputStream", "", "", "Argument[this]", "file", "manual"]

java/ql/lib/ext/java.lang.model.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@ extensions:
4040
- ["java.lang", "System$Logger", True, "log", "(System$Logger$Level,String,Supplier)", "", "Argument[1..2]", "log-injection", "manual"]
4141
- ["java.lang", "System$Logger", True, "log", "(System$Logger$Level,String,Supplier,Throwable)", "", "Argument[1..2]", "log-injection", "manual"]
4242
- ["java.lang", "System$Logger", True, "log", "(System$Logger$Level,String,Throwable)", "", "Argument[1]", "log-injection", "manual"]
43+
- addsTo:
44+
pack: codeql/java-all
45+
extensible: sourceModel
46+
data:
47+
- ["java.lang", "System", False, "getenv", "", "", "ReturnValue", "environment", "manual"]
48+
- ["java.lang", "System", False, "getProperties", "", "", "ReturnValue", "environment", "manual"]
49+
- ["java.lang", "System", False, "getProperty", "", "", "ReturnValue", "environment", "manual"]
4350
- addsTo:
4451
pack: codeql/java-all
4552
extensible: summaryModel

java/ql/lib/ext/java.sql.model.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,8 @@ extensions:
4545
- ["java.sql", "ResultSet", "getTimestamp", "(String)", "summary", "manual"] # taint-numeric
4646
- ["java.sql", "Timestamp", "Timestamp", "(long)", "summary", "manual"] # taint-numeric
4747
- ["java.sql", "Timestamp", "getTime", "()", "summary", "manual"] # taint-numeric
48+
- addsTo:
49+
pack: codeql/java-all
50+
extensible: sourceModel
51+
data:
52+
- ["java.sql", "ResultSet", True, "getString", "", "", "ReturnValue", "database", "manual"]

java/ql/lib/ext/java.util.model.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
extensions:
2+
- addsTo:
3+
pack: codeql/java-all
4+
extensible: sourceModel
5+
data:
6+
- ["java.util", "Properties", True, "get", "", "", "ReturnValue", "environment", "manual"]
7+
- ["java.util", "Properties", True, "getProperty", "", "", "ReturnValue", "environment", "manual"]
8+
29
- addsTo:
310
pack: codeql/java-all
411
extensible: summaryModel

java/ql/lib/semmle/code/java/dataflow/FlowSources.qll

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,7 @@ deprecated class EnvInput extends DataFlow::Node {
233233
* environment variables.
234234
*/
235235
private class EnvironmentInput extends LocalUserInput {
236-
EnvironmentInput() {
237-
// Results from various specific methods.
238-
this.asExpr().(MethodAccess).getMethod() instanceof EnvReadMethod
239-
}
236+
EnvironmentInput() { sourceNode(this, "environment") }
240237

241238
override string getThreatModel() { result = "environment" }
242239
}
@@ -268,10 +265,7 @@ private class CliInput extends LocalUserInput {
268265
private class FileInput extends LocalUserInput {
269266
FileInput() {
270267
// Access to files.
271-
this.asExpr()
272-
.(ConstructorCall)
273-
.getConstructedType()
274-
.hasQualifiedName("java.io", "FileInputStream")
268+
sourceNode(this, "file")
275269
}
276270

277271
override string getThreatModel() { result = "file" }
@@ -292,7 +286,7 @@ deprecated class DatabaseInput = DbInput;
292286
* A node with input from a database.
293287
*/
294288
private class DbInput extends LocalUserInput {
295-
DbInput() { this.asExpr().(MethodAccess).getMethod() instanceof ResultSetGetStringMethod }
289+
DbInput() { sourceNode(this, "database") }
296290

297291
override string getThreatModel() { result = "database" }
298292
}

java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,6 @@ class HudsonWebMethod extends Method {
1313
}
1414
}
1515

16-
private class FilePathRead extends LocalUserInput {
17-
FilePathRead() {
18-
this.asExpr()
19-
.(MethodAccess)
20-
.getMethod()
21-
.hasQualifiedName("hudson", "FilePath",
22-
[
23-
"newInputStreamDenyingSymlinkAsNeeded", "openInputStream", "read", "readFromOffset",
24-
"readToString"
25-
])
26-
}
27-
28-
override string getThreatModel() { result = "file" }
29-
}
30-
3116
private class HudsonUtilXssSanitizer extends XssSanitizer {
3217
HudsonUtilXssSanitizer() {
3318
this.asExpr()

shared/mad/codeql/mad/ModelValidation.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,11 @@ module KindValidation<KindValidationConfigSig Config> {
115115
this =
116116
[
117117
// shared
118-
"local", "remote",
118+
"local", "remote", "file",
119119
// Java
120-
"android-external-storage-dir", "contentprovider",
120+
"android-external-storage-dir", "contentprovider", "database", "environment",
121121
// C#
122-
"file", "file-write",
122+
"file-write",
123123
// JavaScript
124124
"database-access-result"
125125
]

0 commit comments

Comments
 (0)