Skip to content

Commit c577f6d

Browse files
authored
Merge pull request #365 from aschackmull/java/response-splitting-whitelist-cookiename
Java: Whitelist Cookie::getName for HTTP response splitting.
2 parents cfe0b88 + 8fe1634 commit c577f6d

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

java/ql/src/Security/CWE/CWE-113/ResponseSplitting.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class HeaderSplittingSink extends DataFlow::ExprNode {
3232

3333
class WhitelistedSource extends RemoteUserInput {
3434
WhitelistedSource() {
35-
this.asExpr().(MethodAccess).getMethod() instanceof HttpServletRequestGetHeaderMethod
35+
this.asExpr().(MethodAccess).getMethod() instanceof HttpServletRequestGetHeaderMethod or
36+
this.asExpr().(MethodAccess).getMethod() instanceof CookieGetNameMethod
3637
}
3738
}

java/ql/test/query-tests/security/CWE-113/semmle/tests/ResponseSplitting.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
2424
}
2525

2626
// BAD: setting a header with an unvalidated parameter
27-
// can lead to hTTP splitting
27+
// can lead to HTTP splitting
2828
response.addHeader("Content-type", request.getParameter("contentType"));
2929
response.setHeader("Content-type", request.getParameter("contentType"));
3030

@@ -42,4 +42,10 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
4242
private static String removeSpecial(String str) {
4343
return str.replaceAll("[^a-zA-Z ]", "");
4444
}
45+
46+
public void addCookieName(HttpServletResponse response, Cookie cookie) {
47+
// GOOD: cookie.getName() cannot lead to HTTP splitting
48+
Cookie cookie2 = new Cookie("name", cookie.getName());
49+
response.addCookie(cookie2);
50+
}
4551
}

0 commit comments

Comments
 (0)