mirror of
https://github.com/github/codeql.git
synced 2026-04-20 22:44:52 +02:00
Consider File.exists() et al a path-injection sink
This commit is contained in:
@@ -5,6 +5,7 @@ extensions:
|
||||
data:
|
||||
- ["java.io", "File", True, "createNewFile", "()", "", "Argument[this]", "path-injection", "ai-manual"]
|
||||
- ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[2]", "path-injection", "ai-manual"]
|
||||
- ["java.io", "File", True, "exists", "()", "", "Argument[this]", "path-injection", "manual"]
|
||||
- ["java.io", "File", True, "renameTo", "(File)", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
- ["java.io", "FileInputStream", True, "FileInputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
- ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[0]", "path-injection", "manual"]
|
||||
@@ -126,7 +127,6 @@ extensions:
|
||||
- ["java.io", "DataOutput", "writeLong", "(long)", "summary", "manual"] # taint-numeric
|
||||
# sink neutrals
|
||||
- ["java.io", "File", "compareTo", "", "sink", "hq-manual"]
|
||||
- ["java.io", "File", "exists", "()", "sink", "hq-manual"]
|
||||
- addsTo:
|
||||
pack: codeql/java-all
|
||||
extensible: sourceModel
|
||||
|
||||
@@ -18,6 +18,7 @@ extensions:
|
||||
- ["java.nio.file", "Files", False, "delete", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
- ["java.nio.file", "Files", False, "deleteIfExists", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
- ["java.nio.file", "Files", False, "getFileStore", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] # the FileStore class is unlikely to be used for later sanitization
|
||||
- ["java.nio.file", "Files", False, "exists", "(Path,LinkOption[])", "", "Argument[0]", "path-injection", "manual"]
|
||||
- ["java.nio.file", "Files", False, "lines", "(Path,Charset)", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
- ["java.nio.file", "Files", False, "lines", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
- ["java.nio.file", "Files", False, "move", "", "", "Argument[1]", "path-injection", "manual"]
|
||||
@@ -27,6 +28,7 @@ extensions:
|
||||
- ["java.nio.file", "Files", False, "newBufferedWriter", "", "", "Argument[0]", "path-injection", "manual"]
|
||||
- ["java.nio.file", "Files", False, "newInputStream", "(Path,OpenOption[])", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
- ["java.nio.file", "Files", False, "newOutputStream", "", "", "Argument[0]", "path-injection", "manual"]
|
||||
- ["java.nio.file", "Files", False, "notExists", "(Path,LinkOption[])", "", "Argument[0]", "path-injection", "manual"]
|
||||
- ["java.nio.file", "Files", False, "probeContentType", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] # accesses the file based on user input, but only reads its content type from it
|
||||
- ["java.nio.file", "Files", False, "readAllBytes", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
- ["java.nio.file", "Files", False, "readAllLines", "(Path,Charset)", "", "Argument[0]", "path-injection", "ai-manual"]
|
||||
@@ -89,7 +91,6 @@ extensions:
|
||||
# summary neutrals
|
||||
- ["java.nio.file", "Files", "exists", "(Path,LinkOption[])", "summary", "manual"]
|
||||
# sink neutrals
|
||||
- ["java.nio.file", "Files", "exists", "", "sink", "hq-manual"]
|
||||
- ["java.nio.file", "Files", "getLastModifiedTime", "", "sink", "hq-manual"]
|
||||
- ["java.nio.file", "Files", "getOwner", "", "sink", "hq-manual"]
|
||||
- ["java.nio.file", "Files", "getPosixFilePermissions", "", "sink", "hq-manual"]
|
||||
@@ -101,6 +102,5 @@ extensions:
|
||||
- ["java.nio.file", "Files", "isSameFile", "", "sink", "hq-manual"]
|
||||
- ["java.nio.file", "Files", "isSymbolicLink", "", "sink", "hq-manual"]
|
||||
- ["java.nio.file", "Files", "isWritable", "", "sink", "hq-manual"]
|
||||
- ["java.nio.file", "Files", "notExists", "", "sink", "hq-manual"]
|
||||
- ["java.nio.file", "Files", "setLastModifiedTime", "", "sink", "hq-manual"]
|
||||
- ["java.nio.file", "Files", "size", "", "sink", "hq-manual"]
|
||||
|
||||
@@ -4,6 +4,7 @@ edges
|
||||
| FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath |
|
||||
| FilePathInjection.java:177:50:177:58 | file : File | FilePathInjection.java:182:30:182:33 | file |
|
||||
| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath : String |
|
||||
| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:210:23:210:26 | file |
|
||||
| FilePathInjection.java:209:15:209:32 | new File(...) : File | FilePathInjection.java:217:19:217:22 | file : File |
|
||||
| FilePathInjection.java:209:24:209:31 | filePath : String | FilePathInjection.java:209:15:209:32 | new File(...) : File |
|
||||
| FilePathInjection.java:217:19:217:22 | file : File | FilePathInjection.java:177:50:177:58 | file : File |
|
||||
@@ -19,6 +20,7 @@ nodes
|
||||
| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
|
||||
| FilePathInjection.java:209:15:209:32 | new File(...) : File | semmle.label | new File(...) : File |
|
||||
| FilePathInjection.java:209:24:209:31 | filePath : String | semmle.label | filePath : String |
|
||||
| FilePathInjection.java:210:23:210:26 | file | semmle.label | file |
|
||||
| FilePathInjection.java:217:19:217:22 | file : File | semmle.label | file : File |
|
||||
subpaths
|
||||
#select
|
||||
@@ -26,3 +28,4 @@ subpaths
|
||||
| FilePathInjection.java:72:47:72:59 | finalFilePath | FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:64:21:64:34 | getPara(...) | user-provided value |
|
||||
| FilePathInjection.java:95:47:95:59 | finalFilePath | FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:87:21:87:34 | getPara(...) | user-provided value |
|
||||
| FilePathInjection.java:182:30:182:33 | file | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:182:30:182:33 | file | External control of file name or path due to $@. | FilePathInjection.java:205:17:205:44 | getParameter(...) | user-provided value |
|
||||
| FilePathInjection.java:210:23:210:26 | file | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:210:23:210:26 | file | External control of file name or path due to $@. | FilePathInjection.java:205:17:205:44 | getParameter(...) | user-provided value |
|
||||
|
||||
@@ -14,11 +14,9 @@ public class Test {
|
||||
|
||||
// java.io
|
||||
File file = null;
|
||||
file.exists(); // $ isNeutralSink
|
||||
file.compareTo(null); // $ isNeutralSink
|
||||
|
||||
// java.nio.file
|
||||
Files.exists(null, (LinkOption[])null); // $ isNeutralSink
|
||||
Files.getLastModifiedTime(null, (LinkOption[])null); // $ isNeutralSink
|
||||
Files.getOwner(null, (LinkOption[])null); // $ isNeutralSink
|
||||
Files.getPosixFilePermissions(null, (LinkOption[])null); // $ isNeutralSink
|
||||
@@ -30,7 +28,6 @@ public class Test {
|
||||
Files.isSameFile(null, null); // $ isNeutralSink
|
||||
Files.isSymbolicLink(null); // $ isNeutralSink
|
||||
Files.isWritable(null); // $ isNeutralSink
|
||||
Files.notExists(null, (LinkOption[])null); // $ isNeutralSink
|
||||
Files.setLastModifiedTime(null, null); // $ isNeutralSink
|
||||
Files.size(null); // $ isNeutralSink
|
||||
|
||||
|
||||
Reference in New Issue
Block a user