Skip to content

Commit f84c2a8

Browse files
committed
Java: Add more File-related sinks for path-injection
1 parent 839171e commit f84c2a8

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,22 @@ extensions:
33
pack: codeql/java-all
44
extensible: sinkModel
55
data:
6+
- ["java.io", "File", True, "canRead", "()", "", "Argument[this]", "path-injection", "manual"]
7+
- ["java.io", "File", True, "canWrite", "()", "", "Argument[this]", "path-injection", "manual"]
68
- ["java.io", "File", True, "createNewFile", "()", "", "Argument[this]", "path-injection", "ai-manual"]
79
- ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[2]", "path-injection", "ai-manual"]
10+
- ["java.io", "File", True, "delete", "()", "", "Argument[this]", "path-injection", "manual"]
11+
- ["java.io", "File", True, "deleteOnExit", "()", "", "Argument[this]", "path-injection", "manual"]
812
- ["java.io", "File", True, "exists", "()", "", "Argument[this]", "path-injection", "manual"]
13+
- ["java.io", "File", True, "mkdir", "()", "", "Argument[this]", "path-injection", "manual"]
14+
- ["java.io", "File", True, "mkdirs", "()", "", "Argument[this]", "path-injection", "manual"]
915
- ["java.io", "File", True, "renameTo", "(File)", "", "Argument[0]", "path-injection", "ai-manual"]
1016
- ["java.io", "File", True, "renameTo", "(File)", "", "Argument[this]", "path-injection", "ai-manual"]
17+
- ["java.io", "File", True, "setExecutable", "", "", "Argument[this]", "path-injection", "manual"]
18+
- ["java.io", "File", True, "setLastModified", "", "", "Argument[this]", "path-injection", "manual"]
19+
- ["java.io", "File", True, "setReadable", "", "", "Argument[this]", "path-injection", "manual"]
20+
- ["java.io", "File", True, "setReadOnly", "", "", "Argument[this]", "path-injection", "manual"]
21+
- ["java.io", "File", True, "setWritable", "", "", "Argument[this]", "path-injection", "manual"]
1122
- ["java.io", "FileInputStream", True, "FileInputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"]
1223
- ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[0]", "path-injection", "manual"]
1324
- ["java.io", "FileInputStream", True, "FileInputStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Added more `File`-related sinks to the path injection query.

java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,38 @@ void test() throws IOException {
3737
getClass().getResource((String) source()); // $ hasTaintFlow
3838
// "java.lang;ClassLoader;true;getSystemResourceAsStream;(String);;Argument[0];read-file;ai-generated"
3939
ClassLoader.getSystemResourceAsStream((String) source()); // $ hasTaintFlow
40+
// "java.io;File;True;canRead;();;Argument[this];path-injection;manual"
41+
((File) source()).canRead(); // $ hasTaintFlow
42+
// "java.io;File;True;canWrite;();;Argument[this];path-injection;manual"
43+
((File) source()).canWrite(); // $ hasTaintFlow
44+
// "java.io;File;True;createNewFile;();;Argument[this];path-injection;ai-manual"
45+
((File) source()).createNewFile(); // $ hasTaintFlow
4046
// "java.io;File;true;createTempFile;(String,String,File);;Argument[2];create-file;ai-generated"
4147
File.createTempFile(";", ";", (File) source()); // $ hasTaintFlow
48+
// "java.io;File;True;delete;();;Argument[this];path-injection;manual"
49+
((File) source()).delete(); // $ hasTaintFlow
50+
// "java.io;File;True;deleteOnExit;();;Argument[this];path-injection;manual"
51+
((File) source()).deleteOnExit(); // $ hasTaintFlow
52+
// "java.io;File;True;exists;();;Argument[this];path-injection;manual"
53+
((File) source()).exists(); // $ hasTaintFlow
54+
// "java.io;File;True;mkdir;();;Argument[this];path-injection;manual"
55+
((File) source()).mkdir(); // $ hasTaintFlow
56+
// "java.io;File;True;mkdirs;();;Argument[this];path-injection;manual"
57+
((File) source()).mkdirs(); // $ hasTaintFlow
58+
// "java.io;File;True;renameTo;(File);;Argument[0];path-injection;ai-manual"
59+
new File("").renameTo((File) source()); // $ hasTaintFlow
60+
// "java.io;File;True;renameTo;(File);;Argument[this];path-injection;ai-manual"
61+
((File) source()).renameTo(null); // $ hasTaintFlow
62+
// "java.io;File;True;setExecutable;;;Argument[this];path-injection;manual"
63+
((File) source()).setExecutable(true); // $ hasTaintFlow
64+
// "java.io;File;True;setLastModified;;;Argument[this];path-injection;manual"
65+
((File) source()).setLastModified(0); // $ hasTaintFlow
66+
// "java.io;File;True;setReadable;;;Argument[this];path-injection;manual"
67+
((File) source()).setReadable(true); // $ hasTaintFlow
68+
// "java.io;File;True;setReadOnly;;;Argument[this];path-injection;manual"
69+
((File) source()).setReadOnly(); // $ hasTaintFlow
70+
// "java.io;File;True;setWritable;;;Argument[this];path-injection;manual"
71+
((File) source()).setWritable(true); // $ hasTaintFlow
4272
// "java.io;File;true;renameTo;(File);;Argument[0];create-file;ai-generated"
4373
new File("").renameTo((File) source()); // $ hasTaintFlow
4474
// "java.io;FileInputStream;true;FileInputStream;(File);;Argument[0];read-file;ai-generated"

0 commit comments

Comments
 (0)