Mantis - Resin
Viewing Issue Advanced Details
6184 major always 09-11-18 00:59 09-13-18 14:07
marc82ch  
 
normal  
closed 4.0.55  
fixed  
none    
none 4.0.59  
0006184: Path-based XSS in redirects from FileServlet
When a request to a directory is made without a trailing slash, FileServlet redirects to the version WITH a trailing slash with a 301 redirect.

When the original URL contains some evil in the path or query string, this is output unescaped (HTML escape) to the response body of the 301 response like so: "The URL has moved <a href="+encUrl+"</a>", where encUrl is properly URL-encoded, but not HTML escaped, which leads to an XSS vulnerability.
The relevant part of the FileServlet source code is:

res.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
res.setHeader("Location", encUrl);
res.setContentType("text/html; charset=utf-8");

PrintWriter out = res.getWriter();

out.println("The URL has moved <a href=\"" + encUrl + "\">here</a>");

Notes
(0006853)
marc82ch   
09-12-18 02:19   
BTW: In HttpServletResponseImpl.sendRedirect, there's similar code, but there the HTML escaping is performed. However, I'm wondering why only " and < are escaped and not >. While this may suffice to foil XSS attacks, it seems incomplete. Is there a good reason for this behavior?
(0006854)
ferg   
09-13-18 14:07   
server/001w