Harry Maclean
2214caef4b
Ruby: Identify named graphql params as sources
2023-09-22 17:54:55 +01:00
Anders Schack-Mulligen
66da997b7b
Dataflow: Make use of defaults for language-specific hooks.
2023-09-22 14:54:22 +02:00
Tom Hvitved
e417e862a2
Merge pull request #14283 from hvitved/ruby/collapse-stages
...
Ruby: Collapse DIL stages
2023-09-22 10:58:06 +02:00
Alex Ford
67019c6784
Merge pull request #14274 from alexrford/rb/dataflow-tidy
...
Ruby: Minor fixes for dataflow queries
2023-09-21 16:33:34 +01:00
Alex Ford
840b1e0a73
Ruby: delete DataFlowImplForHttpClientLibraries
2023-09-21 14:11:46 +01:00
Alex Ford
a64d37211d
Ruby: use new dataflow api in Typhoeus.qll
2023-09-21 14:11:09 +01:00
Alex Ford
699f752ded
Ruby: use new dataflow api in RestClient.qll
2023-09-21 14:09:41 +01:00
Alex Ford
25203d98c3
Ruby: use new dataflow api in OpenURI.qll
2023-09-21 14:08:22 +01:00
Alex Ford
09782296df
Ruby: use new dataflow api in NetHttp.qll
2023-09-21 14:06:40 +01:00
Alex Ford
fc7e753035
Ruby: use new dataflow api in Httparty.qll
2023-09-21 14:04:46 +01:00
Alex Ford
92941a45f9
Ruby: use new dataflow api in HttpClient.qll
2023-09-21 14:03:09 +01:00
Tom Hvitved
c2306e6713
Ruby: Collapse DIL stages
2023-09-21 14:33:04 +02:00
Alex Ford
1ffcf4b9c4
Ruby: use new dataflow api in Faraday.qll
2023-09-21 13:07:06 +01:00
Alex Ford
1dbba19238
Ruby: use new dataflow api in Excon.qll
2023-09-21 13:00:17 +01:00
Alex Ford
489f598551
Ruby: delete DataFlowImplForPathname
2023-09-21 12:50:12 +01:00
Anders Schack-Mulligen
13f7daf71e
Merge pull request #13982 from aschackmull/dataflow/typeflow-calledge-pruning
...
Dataflow: Add type-based call-edge pruning.
2023-09-21 13:33:08 +02:00
Alex Ford
4cb91e022f
Ruby: deprecate some flow states
2023-09-21 12:24:15 +01:00
Alex Ford
9d421ffa8d
Ruby: configsig rb/improper-ldap-auth
2023-09-21 12:24:15 +01:00
github-actions[bot]
3acf5244b0
Post-release preparation for codeql-cli-2.14.6
2023-09-20 10:25:10 +00:00
Tom Hvitved
1442bddf36
Ruby: Fix bad join
...
Before
```
Evaluated relational algebra for predicate DataFlowPublic#e1781e31::BarrierGuard#PolynomialReDoSCustomizations#32063fa3::PolynomialReDoS::lengthGuard#::getAMaybeGuardedCapturedDef#0#f@3c903abq with tuple counts:
280924 ~0% {2} r1 = SCAN Ssa#da392372::Make#SsaImpl#ff97b16a::SsaInput#::Definition::definesAt#3#dispred#ffff OUTPUT In.2, In.0
280924 ~0% {2} r2 = JOIN r1 WITH BasicBlocks#d5fe3e99::BasicBlock::getScope#0#dispred#ff ON FIRST 1 OUTPUT Lhs.1, Rhs.1
103843 ~1% {2} r3 = JOIN r2 WITH SSA#304893e3::Ssa::CapturedEntryDefinition#f ON FIRST 1 OUTPUT Lhs.0, Lhs.1
103843 ~5% {3} r4 = JOIN r3 WITH Ssa#da392372::Make#SsaImpl#ff97b16a::SsaInput#::Definition::getSourceVariable#0#dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0
19665045 ~0% {3} r5 = JOIN r4 WITH Ssa#da392372::Make#SsaImpl#ff97b16a::SsaInput#::Definition::getSourceVariable#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Rhs.1
19497860 ~0% {3} r6 = JOIN r5 WITH Call#841c84e8::MethodCall::getBlock#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
19496808 ~0% {3} r7 = JOIN r6 WITH CfgNodes#ace8e412::ExprCfgNode::getExpr#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
19496808 ~0% {3} r8 = JOIN r7 WITH CfgNodes#ace8e412::ExprNodes::CallCfgNode#ff ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2
19496808 ~0% {3} r9 = JOIN r8 WITH ControlFlowGraph#46cebcbd::CfgNode::getBasicBlock#0#dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
19496808 ~3% {4} r10 = SCAN r9 OUTPUT In.0, true, In.1, In.2
49434 ~7% {3} r11 = JOIN r10 WITH DataFlowPublic#e1781e31::guardControlsBlock#3#fff_120#join_rhs ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.3
117 ~4% {3} r12 = JOIN r11 WITH PolynomialReDoSCustomizations#32063fa3::PolynomialReDoS::lengthGuard#3#cpe#12#ff ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.1
0 ~0% {1} r13 = JOIN r12 WITH SsaImpl#ff97b16a::Cached::getARead#1#ff ON FIRST 2 OUTPUT Lhs.2
return r13
```
After
```
Evaluated relational algebra for predicate DataFlowPublic#e1781e31::BarrierGuard#PolynomialReDoSCustomizations#32063fa3::PolynomialReDoS::lengthGuard#::getAMaybeGuardedCapturedDef#0#f@137a23jm with tuple counts:
280924 ~0% {2} r1 = SCAN Ssa#da392372::Make#SsaImpl#ff97b16a::SsaInput#::Definition::definesAt#3#dispred#ffff OUTPUT In.2, In.0
280924 ~0% {2} r2 = JOIN r1 WITH BasicBlocks#d5fe3e99::BasicBlock::getScope#0#dispred#ff ON FIRST 1 OUTPUT Lhs.1, Rhs.1
103843 ~1% {2} r3 = JOIN r2 WITH SSA#304893e3::Ssa::CapturedEntryDefinition#f ON FIRST 1 OUTPUT Lhs.1, Lhs.0
102517 ~1% {2} r4 = JOIN r3 WITH Call#841c84e8::MethodCall::getBlock#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
102378 ~2% {2} r5 = JOIN r4 WITH CfgNodes#ace8e412::ExprCfgNode::getExpr#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
102378 ~2% {2} r6 = JOIN r5 WITH CfgNodes#ace8e412::ExprNodes::CallCfgNode#ff ON FIRST 1 OUTPUT Lhs.0, Lhs.1
102378 ~0% {2} r7 = JOIN r6 WITH ControlFlowGraph#46cebcbd::CfgNode::getBasicBlock#0#dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1
102378 ~0% {3} r8 = SCAN r7 OUTPUT In.0, true, In.1
7417 ~5% {2} r9 = JOIN r8 WITH DataFlowPublic#e1781e31::guardControlsBlock#3#fff_120#join_rhs ON FIRST 2 OUTPUT Rhs.2, Lhs.2
22 ~0% {2} r10 = JOIN r9 WITH PolynomialReDoSCustomizations#32063fa3::PolynomialReDoS::lengthGuard#3#cpe#12#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1
12 ~0% {2} r11 = JOIN r10 WITH SsaImpl#ff97b16a::Cached::getARead#1#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1
12 ~0% {2} r12 = JOIN r11 WITH Ssa#da392372::Make#SsaImpl#ff97b16a::SsaInput#::Definition::getSourceVariable#0#dispred#ff ON FIRST 1 OUTPUT Lhs.1, Rhs.1
0 ~0% {1} r13 = JOIN r12 WITH Ssa#da392372::Make#SsaImpl#ff97b16a::SsaInput#::Definition::getSourceVariable#0#dispred#ff ON FIRST 2 OUTPUT Lhs.0
return r13
```
2023-09-20 09:51:15 +02:00
github-actions[bot]
0a3670727f
Release preparation for version 2.14.6
2023-09-19 11:40:30 +00:00
Harry Maclean
2053ee00ab
Ruby: Add change note
2023-09-18 16:02:09 +01:00
Harry Maclean
18dac9ab8a
Ruby: Handle GraphQL array types
2023-09-18 16:00:56 +01:00
Alex Ford
e45edca103
Ruby: remove unused import
2023-09-18 14:55:11 +01:00
Maiky
97c20b181a
Add change note
2023-09-16 14:01:53 +02:00
Maiky
f08eb3cdf4
Doc change
...
Co-authored-by: Alex Ford <alexrford@users.noreply.github.com >
2023-09-15 11:51:53 +02:00
Maiky
15b965bb3b
rename verifies() to verifiesSignature()
2023-09-15 11:45:19 +02:00
Maiky
c43d0866f6
Update ruby/ql/src/experimental/cwe-347/EmptyJWTSecret.ql
...
Co-authored-by: Alex Ford <alexrford@users.noreply.github.com >
2023-09-15 11:42:43 +02:00
Maiky
122881ddf5
Simplify DataFlow::PairNode
...
Co-authored-by: Alex Ford <alexrford@users.noreply.github.com >
2023-09-15 11:41:19 +02:00
Maiky
d4f6111621
Naming change
...
Co-authored-by: Alex Ford <alexrford@users.noreply.github.com >
2023-09-15 11:40:51 +02:00
Maiky
153a435257
Naming change
...
Co-authored-by: Alex Ford <alexrford@users.noreply.github.com >
2023-09-15 11:40:42 +02:00
Maiky
aea6eeda38
Naming change
...
Co-authored-by: Alex Ford <alexrford@users.noreply.github.com >
2023-09-15 11:40:34 +02:00
Maiky
2ebe46bd05
Naming change
...
Co-authored-by: Alex Ford <alexrford@users.noreply.github.com >
2023-09-15 11:40:20 +02:00
Tom Hvitved
14561c414b
Merge pull request #14225 from hvitved/ruby/fix-bad-join
...
Ruby: Fix a bad join
2023-09-15 10:59:24 +02:00
Tom Hvitved
c83a29c27f
Ruby: Fix a bad join
...
Before
```
Evaluated relational algebra for predicate Sinatra#e09174a3::Sinatra::ErbLocalsAccessSummary#fff@22c05bb6 with tuple counts:
212957 ~2195% {1} r1 = JOIN _Constant#54e8b051::ConstantValue::getStringlikeValue#0#dispred#ff_Expr#6fb2af19::Expr::getConstantV__#shared WITH Expr#6fb2af19::Pair::getKey#0#dispred#ff_1#join_rhs ON FIRST 1 OUTPUT Lhs.1
43862468 ~6045% {2} r2 = JOIN r1 WITH Call#841c84e8::MethodCall::getMethodName#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.0
43862468 ~6581% {2} r3 = JOIN r2 WITH AST#a6718388::AstNode::getLocation#0#dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1
43844886 ~40661% {2} r4 = JOIN r3 WITH locations_default ON FIRST 1 OUTPUT Rhs.1, Lhs.1
15004 ~8295% {3} r5 = JOIN r4 WITH project#Sinatra#e09174a3::Sinatra::ErbLocalsHashSyntheticGlobal#ffff_201#join_rhs ON FIRST 1 OUTPUT Rhs.2, Lhs.1, Rhs.1
15004 ~8890% {3} r6 = SCAN r5 OUTPUT ("sinatra_erb_locals_access()" ++ In.0 ++ "#" ++ In.1), In.2, In.1
return r6
```
After
```
Evaluated relational algebra for predicate Sinatra#e09174a3::Sinatra::ErbLocalsAccessSummary#fff@f6249cga with tuple counts:
10237 ~0% {3} r1 = JOIN locations_default_10#join_rhs WITH project#Sinatra#e09174a3::Sinatra::ErbLocalsHashSyntheticGlobal#ffff_201#join_rhs ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Rhs.2
4015 ~5% {3} r2 = JOIN r1 WITH AST#a6718388::AstNode::getLocation#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
825 ~96% {3} r3 = JOIN r2 WITH Call#841c84e8::MethodCall::getMethodName#0#dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2
940 ~0% {4} r4 = JOIN r3 WITH Constant#54e8b051::ConstantValue::getStringlikeValue#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.0
325402 ~0% {4} r5 = JOIN r4 WITH Expr#6fb2af19::Expr::getConstantValue#0#dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3
231819 ~133147% {3} r6 = JOIN r5 WITH Expr#6fb2af19::Pair::getKey#0#dispred#ff_1#join_rhs ON FIRST 1 OUTPUT Lhs.2, Lhs.3, Lhs.1
231819 ~138805% {3} r7 = SCAN r6 OUTPUT ("sinatra_erb_locals_access()" ++ In.0 ++ "#" ++ In.1), In.2, In.1
return r7
```
2023-09-14 21:34:17 +02:00
Harry Maclean
5706bc6205
Ruby: Model GraphQL InputObject arguments
2023-09-14 19:02:39 +01:00
Tom Hvitved
c0e600c515
Merge pull request #12672 from hvitved/ruby/implicit-array-reads-at-sinks
...
Ruby: Allow for implicit array reads at all sinks during taint tracking
2023-09-14 15:39:37 +02:00
Tom Hvitved
61bfc4ec09
Merge pull request #14204 from hvitved/ruby/simplify-viable-callable
...
Ruby: Simplify `viableSourceCallableNonInit`
2023-09-14 15:36:47 +02:00
Harry Maclean
5411123b8a
Ruby: Fix GraphQL test
2023-09-14 14:14:26 +01:00
Erik Krogh Kristensen
7e7852eff6
Merge pull request #13641 from erik-krogh/multi-char
...
JS/RB: write qhelp for `incomplete-multi-character-sanitization`
2023-09-14 14:48:30 +02:00
Harry Maclean
57ae1ee3e9
Ruby: Add test for GraphQL remote flow sources
2023-09-14 13:46:52 +01:00
Harry Maclean
1526fff085
Ruby: Add missing doc comments
2023-09-14 13:46:37 +01:00
Harry Maclean
20f1a74202
Ruby: Restrict GraphQL remote flow sources
...
Previously we considered any splat parameter in a graphql resolver to be
a remote flow source. Now we limit that to reads of the parameter which
yield scalar types (e.g. String), as defined by the GraphQL schema.
This should reduce GraphQL false positives.
2023-09-14 12:14:56 +01:00
Harry Maclean
4168245fc0
Ruby: Fix doc comments
2023-09-14 10:02:27 +01:00
Harry Maclean
29a8a82e92
Ruby: add more docs for splat flow
2023-09-14 09:26:42 +01:00
Tom Hvitved
97ed5b8afb
Ruby: Improvments to splat flow
...
- Only step through a `SynthSplatParameterElementNode` when there is a splat parameter
at index > 0.
- Model read+stores via `SynthSplatArgumentElementNode` as a single read-store
step in type tracking.
2023-09-14 09:26:42 +01:00
Harry Maclean
bf51cbad88
Ruby: Update test fixture
2023-09-14 09:26:38 +01:00
Tom Hvitved
e11a4b63e9
Ruby: Remove SynthSplatArgParameterNode
2023-09-14 09:26:38 +01:00
Harry Maclean
5a6a52b767
Ruby: Use fewer SynthSplatArgumentElementNodes
...
In cases such as
def f(x, *y); end
f(*[1, 2])
we don't need any `SynthSplatArgumentElementNodes`. We get flow from the
splat argument to a `SynthSplatParameterNode` via `parameterMatch`, then
from element 0 of the synth splat to the positional param `x` via a
read step.
We add a read step from element 1 to `SynthSplatParameterElementNode(1)`.
From there we get flow to element 0 of `*y` via an existing store step.
2023-09-14 09:26:38 +01:00
Harry Maclean
4c1beea465
Ruby: Address review comments
2023-09-14 09:26:33 +01:00