Skip to content

Commit d918cb1

Browse files
authored
Merge pull request #2550 from JLLeitschuh/task/JLL/improve_netty_response_splitting_detection
Add io.netty.handler.codec.http.DefaultHttpResponse to Netty Response Splitting Detection
2 parents 0e16969 + 0e2c5db commit d918cb1

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,11 @@ public class ResponseSplitting {
55
private final DefaultHttpHeaders badHeaders = new DefaultHttpHeaders(false);
66

77
// GOOD: Verifies headers passed don't contain CRLF characters
8-
private final DefaultHttpHeaders badHeaders = new DefaultHttpHeaders();
8+
private final DefaultHttpHeaders goodHeaders = new DefaultHttpHeaders();
9+
10+
// BAD: Disables the internal response splitting verification
11+
private final DefaultHttpResponse badResponse = new DefaultHttpResponse(version, httpResponseStatus, false);
12+
13+
// GOOD: Verifies headers passed don't contain CRLF characters
14+
private final DefaultHttpResponse goodResponse = new DefaultHttpResponse(version, httpResponseStatus);
915
}

java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.ql

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,21 @@
1313

1414
import java
1515

16-
from ClassInstanceExpr new
17-
where
18-
new.getConstructedType().hasQualifiedName("io.netty.handler.codec.http", "DefaultHttpHeaders") and
19-
new.getArgument(0).getProperExpr().(BooleanLiteral).getBooleanValue() = false
20-
select new, "Response-splitting vulnerability due to verification being disabled."
16+
abstract private class InsecureNettyObjectCreation extends ClassInstanceExpr { }
17+
18+
private class InsecureDefaultHttpHeadersClassInstantiation extends InsecureNettyObjectCreation {
19+
InsecureDefaultHttpHeadersClassInstantiation() {
20+
getConstructedType().hasQualifiedName("io.netty.handler.codec.http", "DefaultHttpHeaders") and
21+
getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = false
22+
}
23+
}
24+
25+
private class InsecureDefaultHttpResponseClassInstantiation extends InsecureNettyObjectCreation {
26+
InsecureDefaultHttpResponseClassInstantiation() {
27+
getConstructedType().hasQualifiedName("io.netty.handler.codec.http", "DefaultHttpResponse") and
28+
getArgument(2).(CompileTimeConstantExpr).getBooleanValue() = false
29+
}
30+
}
31+
32+
from InsecureNettyObjectCreation new
33+
select new, "Response-splitting vulnerability due to header value verification being disabled."

0 commit comments

Comments
 (0)