Skip to content

Commit f4f2578

Browse files
authored
Merge pull request github#5932 from zbazztian/spring-improvements
Add method invocations of Spring's SavedRequest as remote sources
2 parents 0292ca6 + ffcca4d commit f4f2578

File tree

6 files changed

+207
-0
lines changed

6 files changed

+207
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
lgtm,codescanning
2+
* Invocations of methods from `org.springframework.security.web.savedrequest.SavedRequest`
3+
have been added as sources of tainted data for all security queries.

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@ private module Frameworks {
8787
private predicate sourceModelCsv(string row) {
8888
row =
8989
[
90+
// org.springframework.security.web.savedrequest.SavedRequest
91+
"org.springframework.security.web.savedrequest;SavedRequest;true;getRedirectUrl;;;ReturnValue;remote",
92+
"org.springframework.security.web.savedrequest;SavedRequest;true;getCookies;;;ReturnValue;remote",
93+
"org.springframework.security.web.savedrequest;SavedRequest;true;getHeaderValues;;;ReturnValue;remote",
94+
"org.springframework.security.web.savedrequest;SavedRequest;true;getHeaderNames;;;ReturnValue;remote",
95+
"org.springframework.security.web.savedrequest;SavedRequest;true;getParameterValues;;;ReturnValue;remote",
96+
"org.springframework.security.web.savedrequest;SavedRequest;true;getParameterMap;;;ReturnValue;remote",
9097
// ServletRequestGetParameterMethod
9198
"javax.servlet;ServletRequest;false;getParameter;(String);;ReturnValue;remote",
9299
"javax.servlet;ServletRequest;false;getParameterValues;(String);;ReturnValue;remote",
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import org.springframework.security.web.savedrequest.SavedRequest;
2+
import org.springframework.security.web.savedrequest.SimpleSavedRequest;
3+
4+
public class SpringSavedRequest {
5+
SavedRequest sr;
6+
7+
public void test() {
8+
sr.getRedirectUrl();
9+
sr.getCookies();
10+
sr.getHeaderValues("name");
11+
sr.getHeaderNames();
12+
sr.getParameterValues("name");
13+
sr.getParameterMap();
14+
}
15+
16+
SimpleSavedRequest ssr;
17+
18+
public void test2() {
19+
ssr.getRedirectUrl();
20+
ssr.getCookies();
21+
ssr.getHeaderValues("name");
22+
ssr.getHeaderNames();
23+
ssr.getParameterValues("name");
24+
ssr.getParameterMap();
25+
}
26+
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,15 @@
4747
| SpringMultiPart.java:21:3:21:26 | getFiles(...) | SpringMultiPart.java:21:3:21:26 | getFiles(...) |
4848
| SpringMultiPart.java:22:3:22:27 | getMultiFileMap(...) | SpringMultiPart.java:22:3:22:27 | getMultiFileMap(...) |
4949
| SpringMultiPart.java:23:3:23:41 | getMultipartContentType(...) | SpringMultiPart.java:23:3:23:41 | getMultipartContentType(...) |
50+
| SpringSavedRequest.java:8:3:8:21 | getRedirectUrl(...) | SpringSavedRequest.java:8:3:8:21 | getRedirectUrl(...) |
51+
| SpringSavedRequest.java:9:3:9:17 | getCookies(...) | SpringSavedRequest.java:9:3:9:17 | getCookies(...) |
52+
| SpringSavedRequest.java:10:3:10:28 | getHeaderValues(...) | SpringSavedRequest.java:10:3:10:28 | getHeaderValues(...) |
53+
| SpringSavedRequest.java:11:3:11:21 | getHeaderNames(...) | SpringSavedRequest.java:11:3:11:21 | getHeaderNames(...) |
54+
| SpringSavedRequest.java:12:3:12:31 | getParameterValues(...) | SpringSavedRequest.java:12:3:12:31 | getParameterValues(...) |
55+
| SpringSavedRequest.java:13:3:13:22 | getParameterMap(...) | SpringSavedRequest.java:13:3:13:22 | getParameterMap(...) |
56+
| SpringSavedRequest.java:19:3:19:22 | getRedirectUrl(...) | SpringSavedRequest.java:19:3:19:22 | getRedirectUrl(...) |
57+
| SpringSavedRequest.java:20:3:20:18 | getCookies(...) | SpringSavedRequest.java:20:3:20:18 | getCookies(...) |
58+
| SpringSavedRequest.java:21:3:21:29 | getHeaderValues(...) | SpringSavedRequest.java:21:3:21:29 | getHeaderValues(...) |
59+
| SpringSavedRequest.java:22:3:22:22 | getHeaderNames(...) | SpringSavedRequest.java:22:3:22:22 | getHeaderNames(...) |
60+
| SpringSavedRequest.java:23:3:23:32 | getParameterValues(...) | SpringSavedRequest.java:23:3:23:32 | getParameterValues(...) |
61+
| SpringSavedRequest.java:24:3:24:23 | getParameterMap(...) | SpringSavedRequest.java:24:3:24:23 | getParameterMap(...) |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright 2002-2016 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.security.web.savedrequest;
18+
19+
import java.util.Collection;
20+
import java.util.List;
21+
import java.util.Locale;
22+
import java.util.Map;
23+
24+
import javax.servlet.http.Cookie;
25+
26+
/**
27+
* Encapsulates the functionality required of a cached request for both an authentication
28+
* mechanism (typically form-based login) to redirect to the original URL and for a
29+
* <tt>RequestCache</tt> to build a wrapped request, reproducing the original request
30+
* data.
31+
*
32+
* @author Luke Taylor
33+
* @since 3.0
34+
*/
35+
public interface SavedRequest extends java.io.Serializable {
36+
37+
/**
38+
* @return the URL for the saved request, allowing a redirect to be performed.
39+
*/
40+
String getRedirectUrl();
41+
42+
List<Cookie> getCookies();
43+
44+
String getMethod();
45+
46+
List<String> getHeaderValues(String name);
47+
48+
Collection<String> getHeaderNames();
49+
50+
List<Locale> getLocales();
51+
52+
String[] getParameterValues(String name);
53+
54+
Map<String, String[]> getParameterMap();
55+
56+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.security.web.savedrequest;
18+
19+
import java.util.ArrayList;
20+
import java.util.Collection;
21+
import java.util.HashMap;
22+
import java.util.List;
23+
import java.util.Locale;
24+
import java.util.Map;
25+
26+
import javax.servlet.http.Cookie;
27+
28+
/**
29+
* A Bean implementation of SavedRequest
30+
*
31+
* @author Rob Winch
32+
* @since 5.1
33+
*/
34+
public class SimpleSavedRequest implements SavedRequest {
35+
36+
public SimpleSavedRequest() {
37+
}
38+
39+
public SimpleSavedRequest(String redirectUrl) {
40+
}
41+
42+
public SimpleSavedRequest(SavedRequest request) {
43+
}
44+
45+
@Override
46+
public String getRedirectUrl() {
47+
return null;
48+
}
49+
50+
@Override
51+
public List<Cookie> getCookies() {
52+
return null;
53+
}
54+
55+
@Override
56+
public String getMethod() {
57+
return null;
58+
}
59+
60+
@Override
61+
public List<String> getHeaderValues(String name) {
62+
return null;
63+
}
64+
65+
@Override
66+
public Collection<String> getHeaderNames() {
67+
return null;
68+
}
69+
70+
@Override
71+
public List<Locale> getLocales() {
72+
return null;
73+
}
74+
75+
@Override
76+
public String[] getParameterValues(String name) {
77+
return null;
78+
}
79+
80+
@Override
81+
public Map<String, String[]> getParameterMap() {
82+
return null;
83+
}
84+
85+
public void setRedirectUrl(String redirectUrl) {
86+
}
87+
88+
public void setCookies(List<Cookie> cookies) {
89+
}
90+
91+
public void setMethod(String method) {
92+
}
93+
94+
public void setHeaders(Map<String, List<String>> headers) {
95+
}
96+
97+
public void setLocales(List<Locale> locales) {
98+
}
99+
100+
public void setParameters(Map<String, String[]> parameters) {
101+
}
102+
103+
}

0 commit comments

Comments
 (0)