File tree Expand file tree Collapse file tree
ruby/ql/lib/codeql/ruby/security Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ private import codeql.ruby.Concepts
44private import codeql.ruby.Frameworks
55private import codeql.ruby.dataflow.RemoteFlowSources
66private import codeql.ruby.dataflow.BarrierGuards
7+ private import codeql.ruby.frameworks.data.internal.ApiGraphModels
78
89/**
910 * Provides default sources, sinks and sanitizers for detecting
@@ -156,4 +157,8 @@ module CodeInjection {
156157
157158 override FlowState:: State getAState ( ) { result instanceof FlowState:: Full }
158159 }
160+
161+ private class ExternalCodeInjectionSink extends Sink {
162+ ExternalCodeInjectionSink ( ) { this = ModelOutput:: getASinkNode ( "code-injection" ) .asSink ( ) }
163+ }
159164}
Original file line number Diff line number Diff line change @@ -9,6 +9,7 @@ private import codeql.ruby.dataflow.RemoteFlowSources
99private import codeql.ruby.Concepts
1010private import codeql.ruby.Frameworks
1111private import codeql.ruby.ApiGraphs
12+ private import codeql.ruby.frameworks.data.internal.ApiGraphModels
1213
1314module CommandInjection {
1415 /**
@@ -52,4 +53,10 @@ module CommandInjection {
5253 this .( DataFlow:: CallNode ) .getMethodName ( ) = "shellescape"
5354 }
5455 }
56+
57+ private class ExternalCommandInjectionSink extends Sink {
58+ ExternalCommandInjectionSink ( ) {
59+ this = ModelOutput:: getASinkNode ( "command-injection" ) .asSink ( )
60+ }
61+ }
5562}
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ import codeql.ruby.DataFlow
88import codeql.ruby.TaintTracking
99import codeql.ruby.dataflow.RemoteFlowSources
1010import codeql.ruby.frameworks.Core
11+ private import codeql.ruby.frameworks.data.internal.ApiGraphModels
1112
1213/**
1314 * A data flow source for user input used in log entries.
@@ -50,6 +51,10 @@ class LoggingSink extends Sink {
5051 LoggingSink ( ) { this = any ( Logging logging ) .getAnInput ( ) }
5152}
5253
54+ private class ExternalLogInjectionSink extends Sink {
55+ ExternalLogInjectionSink ( ) { this = ModelOutput:: getASinkNode ( "log-injection" ) .asSink ( ) }
56+ }
57+
5358/**
5459 * A call to `String#replace` that replaces `\n` is considered to sanitize the replaced string (reduce false positive).
5560 */
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ private import codeql.ruby.Concepts
1111private import codeql.ruby.DataFlow
1212private import codeql.ruby.dataflow.BarrierGuards
1313private import codeql.ruby.dataflow.RemoteFlowSources
14+ private import codeql.ruby.frameworks.data.internal.ApiGraphModels
1415
1516module PathInjection {
1617 /**
@@ -52,4 +53,8 @@ module PathInjection {
5253 class StringConstArrayInclusionCallAsSanitizer extends Sanitizer ,
5354 StringConstArrayInclusionCallBarrier
5455 { }
56+
57+ private class ExternalPathInjectionSink extends Sink {
58+ ExternalPathInjectionSink ( ) { this = ModelOutput:: getASinkNode ( "path-injection" ) .asSink ( ) }
59+ }
5560}
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ private import codeql.ruby.dataflow.RemoteFlowSources
1111private import codeql.ruby.dataflow.BarrierGuards
1212private import codeql.ruby.dataflow.Sanitizers
1313private import codeql.ruby.frameworks.ActionController
14+ private import codeql.ruby.frameworks.data.internal.ApiGraphModels
1415
1516/**
1617 * Provides default sources, sinks and sanitizers for detecting
@@ -73,6 +74,10 @@ module UrlRedirect {
7374 }
7475 }
7576
77+ private class ExternalUrlRedirectSink extends Sink {
78+ ExternalUrlRedirectSink ( ) { this = ModelOutput:: getASinkNode ( "url-redirect" ) .asSink ( ) }
79+ }
80+
7681 /**
7782 * A comparison with a constant string, considered as a sanitizer-guard.
7883 */
You can’t perform that action at this time.
0 commit comments