Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f2448cc

Browse files
committed
Java: Convert SpringMultipartFileSource to CSV based flow source
1 parent 80b4d63 commit f2448cc

3 files changed

Lines changed: 11 additions & 16 deletions

File tree

java/ql/src/semmle/code/java/dataflow/ExternalFlow.qll

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,16 @@ private predicate sourceModelCsv(string row) {
102102
"org.springframework.web.multipart;MultipartRequest;true;getFileNames;();;ReturnValue;remote",
103103
"org.springframework.web.multipart;MultipartRequest;true;getFiles;(String);;ReturnValue;remote",
104104
"org.springframework.web.multipart;MultipartRequest;true;getMultiFileMap;();;ReturnValue;remote",
105-
"org.springframework.web.multipart;MultipartRequest;true;getMultipartContentType;(String);;ReturnValue;remote"
105+
"org.springframework.web.multipart;MultipartRequest;true;getMultipartContentType;(String);;ReturnValue;remote",
106+
// SpringMultipartFileSource
107+
"org.springframework.web.multipart;MultipartFile;true;getBytes;();;ReturnValue;remote",
108+
"org.springframework.web.multipart;MultipartFile;true;getContentType;();;ReturnValue;remote",
109+
"org.springframework.web.multipart;MultipartFile;true;getInputStream;();;ReturnValue;remote",
110+
"org.springframework.web.multipart;MultipartFile;true;getName;();;ReturnValue;remote",
111+
"org.springframework.web.multipart;MultipartFile;true;getOriginalFilename;();;ReturnValue;remote",
112+
"org.springframework.web.multipart;MultipartFile;true;getResource;();;ReturnValue;remote",
113+
"org.springframework.web.multipart;MultipartFile;true;getSize;();;ReturnValue;remote",
114+
"org.springframework.web.multipart;MultipartFile;true;isEmpty;();;ReturnValue;remote"
106115
]
107116
}
108117

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

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -121,21 +121,6 @@ private class PlayParameterSource extends RemoteFlowSource {
121121
override string getSourceType() { result = "Play Query Parameters" }
122122
}
123123

124-
private class SpringMultipartFileSource extends RemoteFlowSource {
125-
SpringMultipartFileSource() {
126-
exists(MethodAccess ma, Method m |
127-
ma = this.asExpr() and
128-
m = ma.getMethod() and
129-
m.getDeclaringType()
130-
.getASourceSupertype*()
131-
.hasQualifiedName("org.springframework.web.multipart", "MultipartFile") and
132-
m.getName().matches("get%")
133-
)
134-
}
135-
136-
override string getSourceType() { result = "Spring MultipartFile getter" }
137-
}
138-
139124
private class SpringServletInputParameterSource extends RemoteFlowSource {
140125
SpringServletInputParameterSource() {
141126
this.asParameter() = any(SpringRequestMappingParameter srmp | srmp.isTaintedInput())

java/ql/test/library-tests/dataflow/taintsources/remote.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
| RmiFlowImpl.java:4:30:4:40 | path | RmiFlowImpl.java:5:28:5:31 | path |
3737
| RmiFlowImpl.java:4:30:4:40 | path | RmiFlowImpl.java:6:29:6:35 | command |
3838
| SpringMultiPart.java:8:3:8:17 | getBytes(...) | SpringMultiPart.java:8:3:8:17 | getBytes(...) |
39+
| SpringMultiPart.java:9:3:9:16 | isEmpty(...) | SpringMultiPart.java:9:3:9:16 | isEmpty(...) |
3940
| SpringMultiPart.java:10:3:10:23 | getInputStream(...) | SpringMultiPart.java:10:3:10:23 | getInputStream(...) |
4041
| SpringMultiPart.java:11:3:11:20 | getResource(...) | SpringMultiPart.java:11:3:11:20 | getResource(...) |
4142
| SpringMultiPart.java:12:3:12:16 | getName(...) | SpringMultiPart.java:12:3:12:16 | getName(...) |

0 commit comments

Comments
 (0)