Skip to content

Commit 2391fe7

Browse files
Jami CogswellJami Cogswell
authored andcommitted
Java: use InlineFlowTest instead of InlineExpectationsTest
1 parent 121b24e commit 2391fe7

File tree

3 files changed

+23
-39
lines changed

3 files changed

+23
-39
lines changed
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +0,0 @@
1-
testFailures
2-
failures

java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,25 @@ public class UrlForwardTest extends HttpServlet implements Filter {
2626
// Spring `ModelAndView` test cases
2727
@GetMapping("/bad1")
2828
public ModelAndView bad1(String url) {
29-
return new ModelAndView(url); // $ hasUrlForward
29+
return new ModelAndView(url); // $ hasTaintFlow
3030
}
3131

3232
@GetMapping("/bad2")
3333
public ModelAndView bad2(String url) {
3434
ModelAndView modelAndView = new ModelAndView();
35-
modelAndView.setViewName(url); // $ hasUrlForward
35+
modelAndView.setViewName(url); // $ hasTaintFlow
3636
return modelAndView;
3737
}
3838

3939
// Spring `"forward:"` prefix test cases
4040
@GetMapping("/bad3")
4141
public String bad3(String url) {
42-
return "forward:" + url + "/swagger-ui/index.html"; // $ hasUrlForward
42+
return "forward:" + url + "/swagger-ui/index.html"; // $ hasTaintFlow
4343
}
4444

4545
@GetMapping("/bad4")
4646
public ModelAndView bad4(String url) {
47-
ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasUrlForward
47+
ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasTaintFlow
4848
return modelAndView;
4949
}
5050

@@ -60,7 +60,7 @@ public ModelAndView redirect(String url) {
6060
@GetMapping("/bad5")
6161
public void bad5(String url, HttpServletRequest request, HttpServletResponse response) {
6262
try {
63-
request.getRequestDispatcher(url).include(request, response); // $ hasUrlForward
63+
request.getRequestDispatcher(url).include(request, response); // $ hasTaintFlow
6464
} catch (ServletException e) {
6565
e.printStackTrace();
6666
} catch (IOException e) {
@@ -71,7 +71,7 @@ public void bad5(String url, HttpServletRequest request, HttpServletResponse res
7171
@GetMapping("/bad6")
7272
public void bad6(String url, HttpServletRequest request, HttpServletResponse response) {
7373
try {
74-
request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasUrlForward
74+
request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasTaintFlow
7575
} catch (ServletException e) {
7676
e.printStackTrace();
7777
} catch (IOException e) {
@@ -82,7 +82,7 @@ public void bad6(String url, HttpServletRequest request, HttpServletResponse res
8282
@GetMapping("/bad7")
8383
public void bad7(String url, HttpServletRequest request, HttpServletResponse response) {
8484
try {
85-
request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasUrlForward
85+
request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasTaintFlow
8686
} catch (ServletException e) {
8787
e.printStackTrace();
8888
} catch (IOException e) {
@@ -106,7 +106,7 @@ public void good1(String url, HttpServletRequest request, HttpServletResponse re
106106
public void bad8(String urlPath, HttpServletRequest request, HttpServletResponse response) {
107107
try {
108108
String url = "/pages" + urlPath;
109-
request.getRequestDispatcher(url).forward(request, response); // $ hasUrlForward
109+
request.getRequestDispatcher(url).forward(request, response); // $ hasTaintFlow
110110
} catch (ServletException e) {
111111
e.printStackTrace();
112112
} catch (IOException e) {
@@ -145,7 +145,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
145145
String path = ((HttpServletRequest) request).getServletPath();
146146
// A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check
147147
if (path != null && !path.startsWith("/WEB-INF")) {
148-
request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward
148+
request.getRequestDispatcher(path).forward(request, response); // $ hasTaintFlow
149149
} else {
150150
chain.doFilter(request, response);
151151
}
@@ -158,7 +158,7 @@ public void doFilter2(ServletRequest request, ServletResponse response, FilterCh
158158
String path = ((HttpServletRequest) request).getServletPath();
159159

160160
if (path.startsWith(BASE_PATH) && !path.contains("..")) {
161-
request.getRequestDispatcher(path).forward(request, response); // $ hasUrlForward
161+
request.getRequestDispatcher(path).forward(request, response); // $ hasTaintFlow
162162
} else {
163163
chain.doFilter(request, response);
164164
}
@@ -190,7 +190,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
190190
rd.forward(request, response);
191191
} else {
192192
ServletContext sc = cfg.getServletContext();
193-
RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasUrlForward
193+
RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasTaintFlow
194194
rd.forward(request, response);
195195
}
196196
}
@@ -206,7 +206,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
206206
RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp");
207207
rd.forward(request, response);
208208
} else {
209-
RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasUrlForward
209+
RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasTaintFlow
210210
rd.forward(request, response);
211211
}
212212
}
@@ -233,7 +233,7 @@ protected void doHead1(HttpServletRequest request, HttpServletResponse response)
233233

234234
// A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check
235235
if (path.startsWith(BASE_PATH)) {
236-
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward
236+
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow
237237
}
238238
}
239239

@@ -244,7 +244,7 @@ protected void doHead2(HttpServletRequest request, HttpServletResponse response)
244244
String path = request.getParameter("path");
245245

246246
if (path.startsWith(BASE_PATH) && !path.contains("..")) {
247-
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward
247+
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow
248248
}
249249
}
250250

@@ -258,7 +258,7 @@ protected void doHead3(HttpServletRequest request, HttpServletResponse response)
258258
Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize();
259259

260260
if (requestedPath.startsWith(BASE_PATH)) {
261-
request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasUrlForward
261+
request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasTaintFlow
262262
}
263263
}
264264

@@ -270,7 +270,7 @@ protected void doHead4(HttpServletRequest request, HttpServletResponse response)
270270
Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize();
271271

272272
if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) {
273-
request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasUrlForward
273+
request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasTaintFlow
274274
}
275275
}
276276

@@ -281,7 +281,7 @@ protected void doHead5(HttpServletRequest request, HttpServletResponse response)
281281
path = URLDecoder.decode(path, "UTF-8");
282282

283283
if (!path.startsWith("/WEB-INF/") && !path.contains("..")) {
284-
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward
284+
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow
285285
}
286286
}
287287

@@ -319,7 +319,7 @@ protected void doHead8(HttpServletRequest request, HttpServletResponse response)
319319
String path = request.getParameter("path");
320320
if (path.contains("%")){ // incorrect check
321321
if (!path.startsWith("/WEB-INF/") && !path.contains("..")) {
322-
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasUrlForward
322+
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow
323323
}
324324
}
325325
}
@@ -362,14 +362,14 @@ protected void doHead11(HttpServletRequest request, HttpServletResponse response
362362
}
363363

364364
if (!path.startsWith("/WEB-INF/") && !path.contains("..")) {
365-
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ SPURIOUS: hasUrlForward
365+
request.getServletContext().getRequestDispatcher(path).include(request, response); // $ SPURIOUS: hasTaintFlow
366366
}
367367
}
368368

369369
// BAD: `StaplerResponse.forward` without any checks
370370
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object obj) throws IOException, ServletException {
371371
String url = req.getParameter("target");
372-
rsp.forward(obj, url, req); // $ hasUrlForward
372+
rsp.forward(obj, url, req); // $ hasTaintFlow
373373
}
374374

375375
// QHelp example
@@ -381,7 +381,7 @@ protected void doGet2(HttpServletRequest request, HttpServletResponse response)
381381
ServletContext sc = cfg.getServletContext();
382382

383383
// BAD: a request parameter is incorporated without validation into a URL forward
384-
sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); // $ hasUrlForward
384+
sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); // $ hasTaintFlow
385385

386386
// GOOD: the request parameter is validated against a known fixed string
387387
if (VALID_FORWARD.equals(request.getParameter("target"))) {
Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,4 @@
11
import java
2-
import TestUtilities.InlineExpectationsTest
2+
import TestUtilities.InlineFlowTest
33
import semmle.code.java.security.UrlForwardQuery
4-
5-
module UrlForwardTest implements TestSig {
6-
string getARelevantTag() { result = "hasUrlForward" }
7-
8-
predicate hasActualResult(Location location, string element, string tag, string value) {
9-
tag = "hasUrlForward" and
10-
exists(UrlForwardFlow::PathNode sink | UrlForwardFlow::flowPath(_, sink) |
11-
location = sink.getNode().getLocation() and
12-
element = sink.getNode().toString() and
13-
value = ""
14-
)
15-
}
16-
}
17-
18-
import MakeTest<UrlForwardTest>
4+
import TaintFlowTest<UrlForwardFlowConfig>

0 commit comments

Comments
 (0)