Harry Maclean
4686718630
Ruby: Add kind to Http::Server::RequestInputAccess
...
Like in JS, this describes whether the input came from the request URL,
body, parameters, headers or cookie. Only some of these are relevant for
UrlRedirect and ReflectedXSS queries.
2022-10-13 13:24:16 +13:00
Harry Maclean
9eff4936cf
Ruby: Restrict request methods to user-controlled
2022-10-13 13:24:16 +13:00
Harry Maclean
ad464abde2
Ruby: Model more params accesses
2022-10-13 13:24:16 +13:00
Erik Krogh Kristensen
10aab81f42
Merge pull request #10799 from jsoref/spelling-nfautils
...
ReDoS: Spelling nfautils
2022-10-12 23:09:06 +02:00
Josh Soref
09c8a98761
spelling: representation
...
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com >
2022-10-12 15:20:26 -04:00
Josh Soref
bb1ce8973a
spelling: repeatable
...
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com >
2022-10-12 15:20:24 -04:00
Josh Soref
adb8860b9b
spelling: pattern
...
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com >
2022-10-12 15:20:24 -04:00
Asger F
d28b9af8bd
Merge pull request #10791 from asgerf/rb/rails-render-file
...
Ruby: treat render 'file:' argument as a file system access
2022-10-12 21:18:32 +02:00
Josh Soref
98b317d1a5
spelling: escape
...
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com >
2022-10-12 15:02:00 -04:00
Josh Soref
370da943dc
spelling: abcdefghijklmnopqrstuvwxyz
...
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com >
2022-10-12 15:02:00 -04:00
Asger F
83464d48a9
Merge pull request #10773 from asgerf/rb/bugfix-singleton-class-resolution
...
Ruby: bugfix in type-tracking singleton class resolution
2022-10-12 13:45:16 +02:00
Tom Hvitved
9bd25220d4
Merge pull request #10760 from hvitved/ruby/regex-taint-flow-restrict
...
Ruby: Restrict regexp taint flow to `String` summaries
2022-10-12 11:59:08 +02:00
Nick Rolfe
39107047bf
Merge pull request #10735 from github/nickrolfe/actionmailer
...
Ruby: add `ActionMailer#params` as a `RemoteFlowSource`
2022-10-12 10:21:11 +01:00
Asger F
e55be83645
Ruby: add 'render file:' as file system access
2022-10-12 09:47:04 +02:00
Asger F
ed165c6194
Ruby: bugfix in self-resolution in type-tracking
2022-10-11 18:53:20 +02:00
Nick Rolfe
078c3e9d28
Ruby: create top-level module for ActionMailer
2022-10-11 15:22:42 +01:00
Tom Hvitved
2e8f46ddd9
Type tracking: Split up levelStep into levelStepNoCall and levelStepCall
...
To reduce non-linear recursion during call graph construction.
2022-10-11 13:58:46 +02:00
Asger F
02656b16c3
Merge pull request #10685 from asgerf/rb/splat-and-local-field-step
...
Ruby: summarize unary splat operators and add local field step
2022-10-11 13:28:58 +02:00
Tom Hvitved
878654e0ff
Merge pull request #10763 from hvitved/ruby/move-summarized-callable-from-model
...
Ruby: Move `SummarizedCallableFromModel` into `ModelsAsData.qll`
2022-10-11 11:47:38 +02:00
Tom Hvitved
2b75562037
Ruby: Use DataFlow::Configuration in RegExpConfiguration.qll
2022-10-11 11:39:45 +02:00
Tom Hvitved
53abdb3fb5
Ruby: Move SummarizedCallableFromModel into ModelsAsData.qll
2022-10-11 11:06:35 +02:00
Asger F
b6e07c0cd5
Ruby: block API graph nodes from tracking through self-argument passing
2022-10-11 09:03:52 +02:00
Asger F
125761755a
Ruby: do not generate API graph edges from Attribute contents
...
Models should use Method[x] edges, not attribute edges
2022-10-11 09:03:52 +02:00
Asger F
38a3476d37
Ruby: add local field step to type tracking
...
fixup local field steps
2022-10-11 09:03:51 +02:00
Asger F
d55925d8d4
Ruby: support splat type-tracking step
2022-10-11 09:03:51 +02:00
Tom Hvitved
6c2eee3eb8
Ruby: Restrict regexp taint flow to String summaries
2022-10-10 20:58:41 +02:00
Tom Hvitved
ffb2b1c15e
Data flow: Sync files
2022-10-10 15:39:13 +02:00
Tom Hvitved
60fe370f2a
Merge pull request #10744 from hvitved/dataflow/has-flow-to-no-fast-tc
...
Data flow: Avoid call to `pathSuccPlus` in `Configuration::hasFlowTo(Expr)`
2022-10-10 14:02:39 +02:00
Tom Hvitved
099251a30a
Merge pull request #10741 from hvitved/ruby/no-full-fast-tc
...
Ruby: Avoid computing full `fastTC` for `AstNode::getParent`
2022-10-10 14:01:56 +02:00
Nick Rolfe
e38cfd5f7d
Ruby: add changenote for ActionMailer params
2022-10-10 10:25:19 +01:00
Nick Rolfe
d61f0559a0
Ruby: add ActionMailer#params as a RemoteFlowSource
2022-10-10 10:23:48 +01:00
Tom Hvitved
efa6b3c0c6
Ruby: Cache uses of DataFlowImplForHttpClientLibraries
2022-10-09 19:59:56 +02:00
Tom Hvitved
9f34bf80fd
Ruby: Cache use of DataFlowImplForPathname
2022-10-09 19:59:05 +02:00
Tom Hvitved
296ec94a2a
Data flow: Sync files
2022-10-09 19:48:45 +02:00
Tom Hvitved
d1c8c40c17
Data flow: Avoid call to pathSuccPlus in Configuration::hasFlowTo(Expr)
2022-10-09 19:48:44 +02:00
Tom Hvitved
02192acd5f
Ruby: Avoid computing full fastTC for AstNode::getParent
...
DIL before
```
/* AST::AstNode */ AST#87953007::Cached::TAstNode result) =
fastTC(AST#a6718388::AstNode::getAChild#0#dispred#ff/2)
.
Synthesis#d9ff06b1::Desugared::getADescendant#0#dispred#ff(/* Synthesis::Desugared */ AST#87953007::Cached::TAstNode this,
/* AST::AstNode */ AST#87953007::Cached::TAstNode result)
:-
(
exists(int arg1,
/* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this)
),
result = this
);
(
exists(int arg1,
/* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this)
),
#AST#a6718388::AstNode::getAChild#0#dispredPlus#ff(this, result)
)
.
```
DIL after
```
incremental
Synthesis#d9ff06b1::Desugared::getADescendant#ff(/* Synthesis::Desugared */ AST#87953007::Cached::TAstNode this,
/* AST::AstNode */ AST#87953007::Cached::TAstNode result)
:-
(
exists(int arg1,
/* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this)
),
result = this
);
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 |
exists(int arg1,
/* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this)
),
rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this, call_result#2),
exists(cached dontcare string _ |
AST#a6718388::AstNode::getAChild#1#dispred(call_result#2, _, result)
)
)
| [base_case]
exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this)
),
result = this
| [delta_order]
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 |
exists(int arg1,
/* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this)
),
delta previous rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this,
call_result#2),
project#AST#a6718388::AstNode::getAChild#1#dispred(call_result#2, result)
),
not(
previous rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this, result)
)
| [delta_order_up_to_500000]
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 |
delta previous rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this,
call_result#2),
exists(int arg1,
/* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this)
),
project#AST#a6718388::AstNode::getAChild#1#dispred(call_result#2, result)
),
not(
previous rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this, result)
)
.
```
2022-10-09 11:12:24 +02:00
Tom Hvitved
d39b0fd3f4
Ruby: Avoid computing full fastTC for AstNode::getParent
...
DIL before
```
/* AST::AstNode */ AST#87953007::Cached::TAstNode result) =
fastTC(AST#a6718388::AstNode::getAChild#0#dispred#ff/2)
.
Synthesis#d9ff06b1::isInDesugaredContext#1#f(/* AST::AstNode */ unique AST#87953007::Cached::TAstNode n)
:-
exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, n)
);
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 |
exists(int arg1,
/* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, call_result#2)
),
#AST#a6718388::AstNode::getAChild#0#dispredPlus#ff(call_result#2, n)
)
.
```
DIL after
```
incremental
Synthesis#d9ff06b1::isInDesugaredContext#1#f(/* AST::AstNode */ unique AST#87953007::Cached::TAstNode n)
:-
exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, n)
);
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode any#expr##2 |
rec Synthesis#d9ff06b1::isInDesugaredContext#1#f(any#expr##2),
exists(cached dontcare string _ |
AST#a6718388::AstNode::getAChild#1#dispred(any#expr##2, _, n)
)
)
| [base_case]
exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, n)
)
| [delta_order]
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode any#expr##2 |
delta previous rec Synthesis#d9ff06b1::isInDesugaredContext#1#f(any#expr##2),
project#AST#a6718388::AstNode::getAChild#1#dispred(any#expr##2, n)
),
not(previous rec Synthesis#d9ff06b1::isInDesugaredContext#1#f(n))
.
``
2022-10-09 11:11:48 +02:00
Tom Hvitved
262a74d03d
Ruby: Avoid computing full fastTC for AstNode::getParent
...
DIL before
```
/* AST::AstNode */ AST#87953007::Cached::TAstNode result) =
fastTC(AST#a6718388::AstNode::getAChild#0#dispred#ff/2)
.
Completion#445d5844::mayRaise#1#f(/* Call::Call */ unique AST#87953007::Cached::TAstNode c)
:-
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 |
exists(/* ControlFlowGraphImpl::Trees::BodyStmtTree */ AST#87953007::Cached::TAstNode bst |
(
(
project#Expr#6fb2af19::BodyStmt::getRescue#1#dispred#fff(bst),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst)
);
(
exists(/* Expr::StmtSequence */ dontcare AST#87953007::Cached::TAstNode _ |
Expr#6fb2af19::BodyStmt::getEnsure#0#dispred#ff(bst, _)
),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst)
)
),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst),
project#ControlFlowGraphImpl#288ae92e::Trees::StmtSequenceTree::getBodyChild#2#dispred#ffff(bst,
call_result#2)
),
(
(c = call_result#2, Call#841c84e8::Call#f(c));
(
#AST#a6718388::AstNode::getAChild#0#dispredPlus#ff(call_result#2, c),
Call#841c84e8::Call#f(c)
)
)
)
.
```
DIL after
```
incremental
Completion#445d5844::getARescuableBodyChild#0#f(/* AST::AstNode */ unique AST#87953007::Cached::TAstNode result)
:-
exists(/* ControlFlowGraphImpl::Trees::BodyStmtTree */ AST#87953007::Cached::TAstNode bst |
(
(
exists(dontcare int _,
/* Expr::RescueClause */ dontcare AST#87953007::Cached::TAstNode _1 |
Expr#6fb2af19::BodyStmt::getRescue#1#dispred#fff(bst, _, _1)
),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst)
);
(
exists(/* Expr::StmtSequence */ dontcare AST#87953007::Cached::TAstNode _ |
Expr#6fb2af19::BodyStmt::getEnsure#0#dispred#ff(bst, _)
),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst)
)
),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst),
exists(boolean arg2, dontcare int _ |
arg2 = true,
ControlFlowGraphImpl#288ae92e::Trees::StmtSequenceTree::getBodyChild#2#dispred#ffff(bst,
_,
arg2,
result)
)
);
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#5 |
rec Completion#445d5844::getARescuableBodyChild#0#f(call_result#5),
exists(cached dontcare string _ |
AST#a6718388::AstNode::getAChild#1#dispred(call_result#5, _, result)
)
)
| [base_case]
exists(/* ControlFlowGraphImpl::Trees::BodyStmtTree */ AST#87953007::Cached::TAstNode bst |
(
(
project#Expr#6fb2af19::BodyStmt::getRescue#1#dispred#fff(bst),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst)
);
(
exists(/* Expr::StmtSequence */ dontcare AST#87953007::Cached::TAstNode _ |
Expr#6fb2af19::BodyStmt::getEnsure#0#dispred#ff(bst, _)
),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst)
)
),
ControlFlowGraphImpl#288ae92e::Trees::BodyStmtTree#class#f(bst),
project#ControlFlowGraphImpl#288ae92e::Trees::StmtSequenceTree::getBodyChild#2#dispred#ffff(bst,
result)
)
| [delta_order]
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#5 |
delta previous rec Completion#445d5844::getARescuableBodyChild#0#f(call_result#5),
project#AST#a6718388::AstNode::getAChild#1#dispred(call_result#5, result)
),
not(previous rec Completion#445d5844::getARescuableBodyChild#0#f(result))
.
```
2022-10-09 11:10:39 +02:00
Tom Hvitved
d707c526e5
Ruby: Avoid computing full fastTC for AstNode::getParent
...
DIL before
```
/* AST::AstNode */ AST#87953007::Cached::TAstNode result) =
fastTC(Module#fe82a56b::parent#1#ff/2)
.
Module#fe82a56b::enclosingModule#1#ff(/* AST::AstNode */ AST#87953007::Cached::TAstNode node,
/* Module::ModuleBase */ AST#87953007::Cached::TAstNode result)
:-
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 |
Module#2a43f566::ModuleBase#f(result),
project#AST#a6718388::AstNode::getAChild#1#dispred(result, call_result#2),
(
node = call_result#2;
#Module#fe82a56b::parent#1Plus#ff(node, call_result#2)
)
)
.
```
DIL after
```
incremental
Module#fe82a56b::enclosingModule#1#ff(/* AST::AstNode */ AST#87953007::Cached::TAstNode node,
/* Module::ModuleBase */ AST#87953007::Cached::TAstNode result)
:-
(
Module#2a43f566::ModuleBase#f(result),
exists(cached dontcare string _ |
AST#a6718388::AstNode::getAChild#1#dispred(result, _, node)
)
);
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode mid |
Module#2a43f566::ModuleBase#f(result),
rec Module#fe82a56b::enclosingModule#1#ff(mid, result),
not(Module#2a43f566::ModuleBase#f(mid)),
not(Method#8b49e67f::Block#f(mid)),
exists(cached dontcare string _ |
AST#a6718388::AstNode::getAChild#1#dispred(mid, _, node)
)
)
| [base_case]
Module#2a43f566::ModuleBase#f(result),
project#AST#a6718388::AstNode::getAChild#1#dispred(result, node)
| [delta_order]
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode mid |
Module#2a43f566::ModuleBase#f(result),
delta previous rec Module#fe82a56b::enclosingModule#1#ff(mid, result),
not(Module#2a43f566::ModuleBase#f(mid)),
not(Method#8b49e67f::Block#f(mid)),
project#AST#a6718388::AstNode::getAChild#1#dispred(mid, node)
),
not(previous rec Module#fe82a56b::enclosingModule#1#ff(node, result))
| [delta_order_up_to_500000]
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode mid |
delta previous rec Module#fe82a56b::enclosingModule#1#ff(mid, result),
Module#2a43f566::ModuleBase#f(result),
not(Module#2a43f566::ModuleBase#f(mid)),
not(Method#8b49e67f::Block#f(mid)),
project#AST#a6718388::AstNode::getAChild#1#dispred(mid, node)
),
not(previous rec Module#fe82a56b::enclosingModule#1#ff(node, result))
.
```
2022-10-09 11:10:33 +02:00
Dave Bartolomeo
5ee7986649
Merge pull request #10736 from github/post-release-prep/codeql-cli-2.11.1
...
Post-release preparation for codeql-cli-2.11.1
2022-10-07 14:23:31 -04:00
github-actions[bot]
b8ef9e0ddc
Post-release preparation for codeql-cli-2.11.1
2022-10-07 15:59:45 +00:00
Nick Rolfe
a6674a5313
Ruby: fix uses of deprecated class name
2022-10-07 13:17:05 +01:00
Tom Hvitved
b065d2d3ab
Merge pull request #10705 from hvitved/ruby/singleton-overrides
...
Ruby: Take overrides into account for singleton methods defined on modules
2022-10-07 13:33:59 +02:00
Harry Maclean
75cb0efecb
Merge pull request #10538 from hmac/hmac/actioncontroller-parameters
...
Ruby: Model flow through ActionController::Parameters
2022-10-07 22:21:40 +13:00
Tom Hvitved
69fc59930f
Ruby: Add ql doc to lookupSingletonMethod
2022-10-07 10:55:30 +02:00
github-actions[bot]
a02dcdc5e1
Release preparation for version 2.11.1
2022-10-07 02:20:28 +00:00
Tom Hvitved
48bdf13c89
Ruby: Take overrides into account for singleton methods defined on modules
2022-10-06 11:56:26 +02:00
Tom Hvitved
0e6735b804
Merge pull request #10691 from hvitved/dataflow/conjunctive-clears
...
Data flow: Take conjunctive `With(out)Contents` into account in `prohibitsUseUseFlow`
2022-10-06 09:03:30 +02:00
Asger F
387e57546b
Merge pull request #10650 from asgerf/rb/summarize-more
...
Ruby: more type-tracking steps
2022-10-05 19:16:56 +02:00
Tom Hvitved
0beea9fd1a
Fix typos
2022-10-05 15:54:52 +02:00