Skip to content

Commit 0f125d1

Browse files
authored
Merge pull request #8234 from asgerf/ruby/meta-queries
Approved by nickrolfe
2 parents e1c2f46 + 5390fae commit 0f125d1

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

ruby/ql/src/queries/meta/CallGraph.ql

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @name Call graph
3+
* @description An edge in the call graph.
4+
* @kind problem
5+
* @problem.severity recommendation
6+
* @id rb/meta/call-graph
7+
* @tags meta
8+
* @precision very-low
9+
*/
10+
11+
import codeql.ruby.AST
12+
13+
from Call invoke, Callable f
14+
where invoke.getATarget() = f
15+
select invoke, "Call to $@", f, f.toString()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* @name Taint sinks
3+
* @description Sinks that are sensitive to untrusted data.
4+
* @kind problem
5+
* @problem.severity recommendation
6+
* @id rb/meta/taint-sinks
7+
* @tags meta
8+
* @precision very-low
9+
*/
10+
11+
import internal.TaintMetrics
12+
13+
from string kind
14+
select relevantTaintSink(kind), kind + " sink"
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* @name Taint sources
3+
* @description Sources of untrusted input.
4+
* @kind problem
5+
* @problem.severity recommendation
6+
* @id rb/meta/taint-sources
7+
* @tags meta
8+
* @precision very-low
9+
*/
10+
11+
import internal.TaintMetrics
12+
13+
from string kind
14+
select relevantTaintSource(kind), kind
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
private import codeql.files.FileSystem
2+
private import codeql.ruby.DataFlow
3+
private import codeql.ruby.dataflow.RemoteFlowSources
4+
private import codeql.ruby.security.CodeInjectionCustomizations
5+
private import codeql.ruby.security.CommandInjectionCustomizations
6+
private import codeql.ruby.security.XSS
7+
private import codeql.ruby.security.PathInjectionCustomizations
8+
private import codeql.ruby.security.ServerSideRequestForgeryCustomizations
9+
private import codeql.ruby.security.UnsafeDeserializationCustomizations
10+
private import codeql.ruby.security.UrlRedirectCustomizations
11+
12+
class RelevantFile extends File {
13+
RelevantFile() { not getRelativePath().regexpMatch(".*/test(case)?s?/.*") }
14+
}
15+
16+
RemoteFlowSource relevantTaintSource(string kind) {
17+
result.getLocation().getFile() instanceof RelevantFile and
18+
kind = result.getSourceType()
19+
}
20+
21+
DataFlow::Node relevantTaintSink(string kind) {
22+
result.getLocation().getFile() instanceof RelevantFile and
23+
(
24+
kind = "CodeInjection" and result instanceof CodeInjection::Sink
25+
or
26+
kind = "CommandInjection" and result instanceof CommandInjection::Sink
27+
or
28+
kind = "XSS" and result instanceof ReflectedXSS::Sink
29+
or
30+
kind = "PathInjection" and result instanceof PathInjection::Sink
31+
or
32+
kind = "ServerSideRequestForgery" and result instanceof ServerSideRequestForgery::Sink
33+
or
34+
kind = "UnsafeDeserialization" and result instanceof UnsafeDeserialization::Sink
35+
or
36+
kind = "UrlRedirect" and result instanceof UrlRedirect::Sink
37+
)
38+
}

0 commit comments

Comments
 (0)