File tree Expand file tree Collapse file tree 3 files changed +31
-21
lines changed Expand file tree Collapse file tree 3 files changed +31
-21
lines changed Original file line number Diff line number Diff line change @@ -33,3 +33,4 @@ private import codeql.ruby.frameworks.Sinatra
33
33
private import codeql.ruby.frameworks.Twirp
34
34
private import codeql.ruby.frameworks.Sqlite3
35
35
private import codeql.ruby.frameworks.Pg
36
+ private import codeql.ruby.frameworks.Yaml
Original file line number Diff line number Diff line change
1
+ /**
2
+ * add additional steps for to_ruby method of YAML/Psych library
3
+ */
4
+
5
+ private import codeql.ruby.dataflow.FlowSteps
6
+ private import codeql.ruby.DataFlow
7
+ private import codeql.ruby.ApiGraphs
8
+
9
+ private class YamlParseStep extends AdditionalTaintStep {
10
+ override predicate step ( DataFlow:: Node pred , DataFlow:: Node succ ) {
11
+ exists ( DataFlow:: CallNode yaml_parser_methods |
12
+ yaml_parser_methods =
13
+ API:: getTopLevelMember ( [ "YAML" , "Psych" ] ) .getAMethodCall ( [ "parse" , "parse_stream" ] ) and
14
+ (
15
+ pred = yaml_parser_methods .getArgument ( 0 ) or
16
+ pred = yaml_parser_methods .getKeywordArgument ( "yaml" )
17
+ ) and
18
+ succ = yaml_parser_methods .getAMethodCall ( "to_ruby" )
19
+ )
20
+ or
21
+ exists ( DataFlow:: CallNode yaml_parser_methods |
22
+ yaml_parser_methods = API:: getTopLevelMember ( [ "YAML" , "Psych" ] ) .getAMethodCall ( "parse_file" ) and
23
+ (
24
+ pred = yaml_parser_methods .getArgument ( 0 ) or
25
+ pred = yaml_parser_methods .getKeywordArgument ( "filename" )
26
+ ) and
27
+ succ = yaml_parser_methods .getAMethodCall ( "to_ruby" )
28
+ )
29
+ }
30
+ }
Original file line number Diff line number Diff line change @@ -24,27 +24,6 @@ class Configuration extends TaintTracking::Configuration {
24
24
25
25
override predicate isSink ( DataFlow:: Node sink ) { sink instanceof UnsafeDeserialization:: Sink }
26
26
27
- override predicate isAdditionalTaintStep ( DataFlow:: Node nodeFrom , DataFlow:: Node nodeTo ) {
28
- exists ( DataFlow:: CallNode yaml_parser_methods |
29
- yaml_parser_methods =
30
- API:: getTopLevelMember ( [ "YAML" , "Psych" ] ) .getAMethodCall ( [ "parse" , "parse_stream" ] ) and
31
- (
32
- nodeFrom = yaml_parser_methods .getArgument ( 0 ) or
33
- nodeFrom = yaml_parser_methods .getKeywordArgument ( "yaml" )
34
- ) and
35
- nodeTo = yaml_parser_methods .getAMethodCall ( "to_ruby" )
36
- )
37
- or
38
- exists ( DataFlow:: CallNode yaml_parser_methods |
39
- yaml_parser_methods = API:: getTopLevelMember ( [ "YAML" , "Psych" ] ) .getAMethodCall ( "parse_file" ) and
40
- (
41
- nodeFrom = yaml_parser_methods .getArgument ( 0 ) or
42
- nodeFrom = yaml_parser_methods .getKeywordArgument ( "filename" )
43
- ) and
44
- nodeTo = yaml_parser_methods .getAMethodCall ( "to_ruby" )
45
- )
46
- }
47
-
48
27
override predicate isSanitizer ( DataFlow:: Node node ) {
49
28
super .isSanitizer ( node ) or
50
29
node instanceof UnsafeDeserialization:: Sanitizer
You can’t perform that action at this time.
0 commit comments