Skip to content

Commit c2f5bac

Browse files
committed
Ruby: consider more calls to e.g. ActionDispatch::Request#params as remote input sources
1 parent 27729af commit c2f5bac

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

ruby/ql/lib/codeql/ruby/frameworks/ActionController.qll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ class ActionControllerClass extends DataFlow::ClassNode {
8383
}
8484
}
8585

86-
// TODO: private
87-
DataFlow::LocalSourceNode actionControllerInstance() {
86+
private DataFlow::LocalSourceNode actionControllerInstance() {
8887
result = any(ActionControllerClass cls).getSelf()
8988
}
9089

ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/Request.qll

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,26 @@
22

33
private import codeql.ruby.Concepts
44
private import codeql.ruby.DataFlow
5+
private import codeql.ruby.ApiGraphs
56
private import codeql.ruby.frameworks.ActionController
67

78
/** Modeling for `ActionDispatch::Request`. */
89
module Request {
910
/**
10-
* An instance of `ActionDispatch::Request`.
11-
*/
12-
private class RequestNode extends DataFlow::CallNode {
13-
RequestNode() { this = actionControllerInstance().getAMethodCall("request") }
14-
}
15-
16-
/**
17-
* A method call on `request`.
11+
* A method call against an `ActionDispatch::Request` instance.
1812
*/
1913
private class RequestMethodCall extends DataFlow::CallNode {
2014
RequestMethodCall() {
21-
any(RequestNode r).(DataFlow::LocalSourceNode).flowsTo(this.getReceiver())
15+
any(ActionControllerClass cls)
16+
.getSelf()
17+
.getAMethodCall("request")
18+
.(DataFlow::LocalSourceNode)
19+
.flowsTo(this.getReceiver()) or
20+
this =
21+
API::getTopLevelMember("ActionDispatch")
22+
.getMember("Request")
23+
.getInstance()
24+
.getAMethodCall(_)
2225
}
2326
}
2427

0 commit comments

Comments
 (0)