Skip to content

Commit 42e3825

Browse files
Jami CogswellJami Cogswell
authored andcommitted
Java: convert RequestDispatcherSink to MaD
1 parent 4ff884e commit 42e3825

File tree

4 files changed

+21
-8
lines changed

4 files changed

+21
-8
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/java-all
4+
extensible: sinkModel
5+
data:
6+
# TODO: potentially switch to using Argument[this] of `RequestDispatcher.forward|include` as sink instead of the below.
7+
- ["jakarta.servlet", "ServletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"]
8+
- ["jakarta.servlet", "ServletRequest", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
extensions:
2+
- addsTo:
3+
pack: codeql/java-all
4+
extensible: sinkModel
5+
data:
6+
# TODO: potentially switch to using Argument[this] of `PortletRequestDispatcher.forward|include` as sink instead of the below.
7+
- ["javax.portlet", "PortletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"]

java/ql/lib/ext/javax.servlet.model.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ extensions:
1414
extensible: sinkModel
1515
data:
1616
- ["javax.servlet", "ServletContext", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"]
17+
# TODO: potentially switch to using Argument[this] of `RequestDispatcher.forward|include` as sink instead of the below.
18+
- ["javax.servlet", "ServletContext", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"]
19+
- ["javax.servlet", "ServletRequest", True, "getRequestDispatcher", "(String)", "", "Argument[0]", "url-forward", "manual"]
1720
- addsTo:
1821
pack: codeql/java-all
1922
extensible: summaryModel

java/ql/lib/semmle/code/java/security/UnsafeUrlForward.qll

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,9 @@ abstract class UnsafeUrlForwardSink extends DataFlow::Node { }
1010
/** A sanitizer for unsafe URL forward vulnerabilities. */
1111
abstract class UnsafeUrlForwardSanitizer extends DataFlow::Node { }
1212

13-
/** An argument to `getRequestDispatcher`. */
14-
private class RequestDispatcherSink extends UnsafeUrlForwardSink {
15-
RequestDispatcherSink() {
16-
exists(MethodCall ma |
17-
ma.getMethod() instanceof GetRequestDispatcherMethod and
18-
ma.getArgument(0) = this.asExpr()
19-
)
20-
}
13+
/** A default sink representing methods susceptible to unsafe URL forwarding. */
14+
private class DefaultUnsafeUrlForwardSink extends UnsafeUrlForwardSink {
15+
DefaultUnsafeUrlForwardSink() { sinkNode(this, "url-forward") }
2116
}
2217

2318
// TODO: look into `StaplerResponse.forward`, etc., and think about re-adding the MaD "request-forgery" sinks as a result

0 commit comments

Comments
 (0)