brakeman 3.0.5 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES +19 -0
- data/README.md +3 -13
- data/lib/brakeman.rb +3 -0
- data/lib/brakeman/checks/base_check.rb +19 -47
- data/lib/brakeman/checks/check_basic_auth.rb +3 -3
- data/lib/brakeman/checks/check_cross_site_scripting.rb +26 -12
- data/lib/brakeman/checks/check_default_routes.rb +1 -1
- data/lib/brakeman/checks/check_detailed_exceptions.rb +2 -2
- data/lib/brakeman/checks/check_evaluation.rb +3 -0
- data/lib/brakeman/checks/check_execute.rb +3 -3
- data/lib/brakeman/checks/check_file_disclosure.rb +2 -2
- data/lib/brakeman/checks/check_forgery_setting.rb +9 -12
- data/lib/brakeman/checks/check_header_dos.rb +1 -1
- data/lib/brakeman/checks/check_i18n_xss.rb +2 -2
- data/lib/brakeman/checks/check_jruby_xml.rb +1 -1
- data/lib/brakeman/checks/check_json_encoding.rb +1 -1
- data/lib/brakeman/checks/check_json_parsing.rb +3 -3
- data/lib/brakeman/checks/check_link_to.rb +1 -1
- data/lib/brakeman/checks/check_link_to_href.rb +9 -2
- data/lib/brakeman/checks/check_mass_assignment.rb +5 -2
- data/lib/brakeman/checks/check_model_attr_accessible.rb +4 -4
- data/lib/brakeman/checks/check_model_attributes.rb +7 -7
- data/lib/brakeman/checks/check_model_serialize.rb +6 -6
- data/lib/brakeman/checks/check_nested_attributes.rb +2 -2
- data/lib/brakeman/checks/check_number_to_currency.rb +2 -2
- data/lib/brakeman/checks/check_quote_table_name.rb +1 -1
- data/lib/brakeman/checks/check_redirect.rb +2 -10
- data/lib/brakeman/checks/check_render.rb +1 -1
- data/lib/brakeman/checks/check_render_dos.rb +1 -1
- data/lib/brakeman/checks/check_safe_buffer_manipulation.rb +1 -1
- data/lib/brakeman/checks/check_sanitize_methods.rb +1 -1
- data/lib/brakeman/checks/check_select_tag.rb +1 -1
- data/lib/brakeman/checks/check_select_vulnerability.rb +2 -2
- data/lib/brakeman/checks/check_session_settings.rb +1 -2
- data/lib/brakeman/checks/check_simple_format.rb +2 -2
- data/lib/brakeman/checks/check_single_quotes.rb +3 -3
- data/lib/brakeman/checks/check_skip_before_filter.rb +5 -7
- data/lib/brakeman/checks/check_sql.rb +10 -14
- data/lib/brakeman/checks/check_sql_cves.rb +4 -4
- data/lib/brakeman/checks/check_ssl_verify.rb +27 -9
- data/lib/brakeman/checks/check_strip_tags.rb +5 -5
- data/lib/brakeman/checks/check_symbol_dos_cve.rb +1 -1
- data/lib/brakeman/checks/check_translate_bug.rb +3 -4
- data/lib/brakeman/checks/check_unscoped_find.rb +1 -1
- data/lib/brakeman/checks/check_validation_regex.rb +2 -2
- data/lib/brakeman/checks/check_xml_dos.rb +1 -1
- data/lib/brakeman/checks/check_yaml_parsing.rb +1 -1
- data/lib/brakeman/file_parser.rb +1 -0
- data/lib/brakeman/parsers/template_parser.rb +6 -5
- data/lib/brakeman/processor.rb +7 -7
- data/lib/brakeman/processors/alias_processor.rb +30 -12
- data/lib/brakeman/processors/base_processor.rb +4 -8
- data/lib/brakeman/processors/controller_alias_processor.rb +33 -132
- data/lib/brakeman/processors/controller_processor.rb +29 -53
- data/lib/brakeman/processors/erb_template_processor.rb +4 -6
- data/lib/brakeman/processors/erubis_template_processor.rb +8 -11
- data/lib/brakeman/processors/gem_processor.rb +19 -35
- data/lib/brakeman/processors/haml_template_processor.rb +10 -12
- data/lib/brakeman/processors/lib/find_all_calls.rb +3 -5
- data/lib/brakeman/processors/lib/find_call.rb +2 -2
- data/lib/brakeman/processors/lib/find_return_value.rb +1 -1
- data/lib/brakeman/processors/lib/rails2_config_processor.rb +7 -8
- data/lib/brakeman/processors/lib/rails3_config_processor.rb +6 -7
- data/lib/brakeman/processors/lib/render_helper.rb +15 -14
- data/lib/brakeman/processors/lib/render_path.rb +11 -5
- data/lib/brakeman/processors/library_processor.rb +13 -35
- data/lib/brakeman/processors/model_processor.rb +22 -64
- data/lib/brakeman/processors/output_processor.rb +1 -37
- data/lib/brakeman/processors/slim_template_processor.rb +6 -8
- data/lib/brakeman/processors/template_alias_processor.rb +9 -9
- data/lib/brakeman/processors/template_processor.rb +5 -9
- data/lib/brakeman/report/report_base.rb +7 -7
- data/lib/brakeman/report/report_html.rb +5 -7
- data/lib/brakeman/report/report_markdown.rb +4 -6
- data/lib/brakeman/report/report_table.rb +4 -6
- data/lib/brakeman/rescanner.rb +29 -31
- data/lib/brakeman/scanner.rb +17 -8
- data/lib/brakeman/tracker.rb +24 -34
- data/lib/brakeman/tracker/collection.rb +77 -0
- data/lib/brakeman/tracker/config.rb +93 -0
- data/lib/brakeman/tracker/controller.rb +161 -0
- data/lib/brakeman/tracker/library.rb +17 -0
- data/lib/brakeman/tracker/model.rb +90 -0
- data/lib/brakeman/tracker/template.rb +33 -0
- data/lib/brakeman/util.rb +17 -9
- data/lib/brakeman/version.rb +1 -1
- data/lib/brakeman/warning.rb +8 -9
- data/lib/ruby_parser/bm_sexp.rb +16 -16
- data/lib/ruby_parser/bm_sexp_processor.rb +1 -120
- metadata +42 -31
- checksums.yaml.gz.sig +0 -1
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -0
@@ -7,7 +7,7 @@ class Brakeman::CheckHeaderDoS < Brakeman::BaseCheck
|
|
7
7
|
|
8
8
|
def run_check
|
9
9
|
if (version_between? "3.0.0", "3.2.15" or version_between? "4.0.0", "4.0.1") and not has_workaround?
|
10
|
-
message = "Rails #{
|
10
|
+
message = "Rails #{rails_version} has a denial of service vulnerability (CVE-2013-6414). Upgrade to Rails version "
|
11
11
|
|
12
12
|
if version_between? "3.0.0", "3.2.15"
|
13
13
|
message << "3.2.16"
|
@@ -7,8 +7,8 @@ class Brakeman::CheckI18nXSS < Brakeman::BaseCheck
|
|
7
7
|
|
8
8
|
def run_check
|
9
9
|
if (version_between? "3.0.6", "3.2.15" or version_between? "4.0.0", "4.0.1") and not has_workaround?
|
10
|
-
message = "Rails #{
|
11
|
-
i18n_gem = tracker.config
|
10
|
+
message = "Rails #{rails_version} has an XSS vulnerability in i18n (CVE-2013-4491). Upgrade to Rails version "
|
11
|
+
i18n_gem = tracker.config.gem_version :i18n
|
12
12
|
|
13
13
|
if version_between? "3.0.6", "3.1.99" and version_before i18n_gem, "0.5.1"
|
14
14
|
message << "3.2.16 or i18n 0.5.1"
|
@@ -30,7 +30,7 @@ class Brakeman::CheckJRubyXML < Brakeman::BaseCheck
|
|
30
30
|
|
31
31
|
warn :warning_type => "File Access",
|
32
32
|
:warning_code => :CVE_2013_1856,
|
33
|
-
:message => "Rails #{
|
33
|
+
:message => "Rails #{rails_version} with JRuby has a vulnerability in XML parser: upgrade to #{fix_version} or patch",
|
34
34
|
:confidence => CONFIDENCE[:high],
|
35
35
|
:gem_info => gemfile_or_environment,
|
36
36
|
:link => "https://groups.google.com/d/msg/rubyonrails-security/KZwsQbYsOiI/5kUV7dSCJGwJ"
|
@@ -7,7 +7,7 @@ class Brakeman::CheckJSONEncoding < Brakeman::BaseCheck
|
|
7
7
|
|
8
8
|
def run_check
|
9
9
|
if (version_between? "4.1.0", "4.1.10" or version_between? "4.2.0", "4.2.1") and not has_workaround?
|
10
|
-
message = "Rails #{
|
10
|
+
message = "Rails #{rails_version} does not encode JSON keys (CVE-2015-3226). Upgrade to Rails version "
|
11
11
|
|
12
12
|
if version_between? "4.1.0", "4.1.10"
|
13
13
|
message << "4.1.11"
|
@@ -20,7 +20,7 @@ class Brakeman::CheckJSONParsing < Brakeman::BaseCheck
|
|
20
20
|
"3.0.20"
|
21
21
|
end
|
22
22
|
|
23
|
-
message = "Rails #{
|
23
|
+
message = "Rails #{rails_version} has a serious JSON parsing vulnerability: upgrade to #{new_version} or patch"
|
24
24
|
if uses_yajl?
|
25
25
|
gem_info = gemfile_or_environment(:yajl)
|
26
26
|
else
|
@@ -38,7 +38,7 @@ class Brakeman::CheckJSONParsing < Brakeman::BaseCheck
|
|
38
38
|
|
39
39
|
#Check if `yajl` is included in Gemfile
|
40
40
|
def uses_yajl?
|
41
|
-
tracker.config
|
41
|
+
tracker.config.has_gem? :yajl
|
42
42
|
end
|
43
43
|
|
44
44
|
#Check for `ActiveSupport::JSON.backend = "JSONGem"`
|
@@ -60,7 +60,7 @@ class Brakeman::CheckJSONParsing < Brakeman::BaseCheck
|
|
60
60
|
|
61
61
|
def check_cve_2013_0269
|
62
62
|
[:json, :json_pure].each do |name|
|
63
|
-
gem_hash = tracker.config
|
63
|
+
gem_hash = tracker.config.get_gem name
|
64
64
|
check_json_version name, gem_hash[:version] if gem_hash and gem_hash[:version]
|
65
65
|
end
|
66
66
|
end
|
@@ -10,7 +10,7 @@ class Brakeman::CheckLinkTo < Brakeman::CheckCrossSiteScripting
|
|
10
10
|
@description = "Checks for XSS in link_to in versions before 3.0"
|
11
11
|
|
12
12
|
def run_check
|
13
|
-
return unless version_between?("2.0.0", "2.9.9") and not tracker.config
|
13
|
+
return unless version_between?("2.0.0", "2.9.9") and not tracker.config.escape_html?
|
14
14
|
|
15
15
|
@ignore_methods = Set[:button_to, :check_box, :escapeHTML, :escape_once,
|
16
16
|
:field_field, :fields_for, :h, :hidden_field,
|
@@ -15,7 +15,7 @@ class Brakeman::CheckLinkToHref < Brakeman::CheckLinkTo
|
|
15
15
|
@ignore_methods = Set[:button_to, :check_box,
|
16
16
|
:field_field, :fields_for, :hidden_field,
|
17
17
|
:hidden_field, :hidden_field_tag, :image_tag, :label,
|
18
|
-
:mail_to, :radio_button, :select,
|
18
|
+
:mail_to, :polymorphic_url, :radio_button, :select,
|
19
19
|
:submit_tag, :text_area, :text_field,
|
20
20
|
:text_field_tag, :url_encode, :url_for,
|
21
21
|
:will_paginate].merge(tracker.options[:url_safe_methods] || [])
|
@@ -38,8 +38,9 @@ class Brakeman::CheckLinkToHref < Brakeman::CheckLinkTo
|
|
38
38
|
|
39
39
|
#Ignore situations where the href is an interpolated string
|
40
40
|
#with something before the user input
|
41
|
-
return if
|
41
|
+
return if string_interp?(url_arg) && !url_arg[1].chomp.empty?
|
42
42
|
|
43
|
+
return if call? url_arg and ignore_call? url_arg.target, url_arg.method
|
43
44
|
|
44
45
|
if input = has_immediate_user_input?(url_arg)
|
45
46
|
message = "Unsafe #{friendly_type_of input} in link_to href"
|
@@ -89,4 +90,10 @@ class Brakeman::CheckLinkToHref < Brakeman::CheckLinkTo
|
|
89
90
|
end
|
90
91
|
end
|
91
92
|
end
|
93
|
+
|
94
|
+
def ignored_method? target, method
|
95
|
+
@ignore_methods.include? method or
|
96
|
+
method.to_s =~ /_path$/ or
|
97
|
+
(target.nil? and method.to_s =~ /_url$/)
|
98
|
+
end
|
92
99
|
end
|
@@ -19,7 +19,10 @@ class Brakeman::CheckMassAssignment < Brakeman::BaseCheck
|
|
19
19
|
|
20
20
|
models = []
|
21
21
|
tracker.models.each do |name, m|
|
22
|
-
if
|
22
|
+
if m.is_a? Hash
|
23
|
+
p m
|
24
|
+
end
|
25
|
+
if m.unprotected_model?
|
23
26
|
models << name
|
24
27
|
end
|
25
28
|
end
|
@@ -62,7 +65,7 @@ class Brakeman::CheckMassAssignment < Brakeman::BaseCheck
|
|
62
65
|
|
63
66
|
model = tracker.models[res[:chain].first]
|
64
67
|
|
65
|
-
attr_protected = (model and model
|
68
|
+
attr_protected = (model and model.attr_protected)
|
66
69
|
|
67
70
|
if attr_protected and tracker.options[:ignore_attr_protected]
|
68
71
|
return
|
@@ -20,13 +20,13 @@ class Brakeman::CheckModelAttrAccessible < Brakeman::BaseCheck
|
|
20
20
|
|
21
21
|
def run_check
|
22
22
|
check_models do |name, model|
|
23
|
-
model
|
23
|
+
model.attr_accessible.each do |attribute|
|
24
24
|
next if role_limited? model, attribute
|
25
25
|
|
26
26
|
SUSP_ATTRS.each do |susp_attr, confidence|
|
27
27
|
if susp_attr.is_a?(Regexp) and susp_attr =~ attribute.to_s or susp_attr == attribute
|
28
28
|
warn :model => name,
|
29
|
-
:file => model
|
29
|
+
:file => model.file,
|
30
30
|
:warning_type => "Mass Assignment",
|
31
31
|
:warning_code => :dangerous_attr_accessible,
|
32
32
|
:message => "Potentially dangerous attribute available for mass assignment",
|
@@ -40,14 +40,14 @@ class Brakeman::CheckModelAttrAccessible < Brakeman::BaseCheck
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def role_limited? model, attribute
|
43
|
-
role_accessible = model
|
43
|
+
role_accessible = model.role_accessible
|
44
44
|
return if role_accessible.nil?
|
45
45
|
role_accessible.include? attribute
|
46
46
|
end
|
47
47
|
|
48
48
|
def check_models
|
49
49
|
tracker.models.each do |name, model|
|
50
|
-
if !model
|
50
|
+
if !model.attr_accessible.nil?
|
51
51
|
yield name, model
|
52
52
|
end
|
53
53
|
end
|
@@ -19,7 +19,7 @@ class Brakeman::CheckModelAttributes < Brakeman::BaseCheck
|
|
19
19
|
protected_names = []
|
20
20
|
|
21
21
|
check_models do |name, model|
|
22
|
-
if model
|
22
|
+
if model.attr_protected.nil?
|
23
23
|
no_accessible_names << name.to_s
|
24
24
|
elsif not tracker.options[:ignore_attr_protected]
|
25
25
|
protected_names << name.to_s
|
@@ -53,9 +53,9 @@ class Brakeman::CheckModelAttributes < Brakeman::BaseCheck
|
|
53
53
|
else #Output one warning per model
|
54
54
|
|
55
55
|
check_models do |name, model|
|
56
|
-
if model
|
56
|
+
if model.attr_protected.nil?
|
57
57
|
warn :model => name,
|
58
|
-
:file => model
|
58
|
+
:file => model.file,
|
59
59
|
:warning_type => "Attribute Restriction",
|
60
60
|
:warning_code => :no_attr_accessible,
|
61
61
|
:message => "Mass assignment is not restricted using attr_accessible",
|
@@ -70,8 +70,8 @@ class Brakeman::CheckModelAttributes < Brakeman::BaseCheck
|
|
70
70
|
end
|
71
71
|
|
72
72
|
warn :model => name,
|
73
|
-
:file => model
|
74
|
-
:line => model
|
73
|
+
:file => model.file,
|
74
|
+
:line => model.attr_protected.first.line,
|
75
75
|
:warning_type => "Attribute Restriction",
|
76
76
|
:warning_code => warning_code,
|
77
77
|
:message => message,
|
@@ -83,7 +83,7 @@ class Brakeman::CheckModelAttributes < Brakeman::BaseCheck
|
|
83
83
|
|
84
84
|
def check_models
|
85
85
|
tracker.models.each do |name, model|
|
86
|
-
if unprotected_model?
|
86
|
+
if model.unprotected_model?
|
87
87
|
yield name, model
|
88
88
|
end
|
89
89
|
end
|
@@ -104,7 +104,7 @@ class Brakeman::CheckModelAttributes < Brakeman::BaseCheck
|
|
104
104
|
end
|
105
105
|
|
106
106
|
if upgrade_version
|
107
|
-
message = "attr_protected is bypassable in #{
|
107
|
+
message = "attr_protected is bypassable in #{rails_version}, use attr_accessible or upgrade to #{upgrade_version}"
|
108
108
|
confidence = CONFIDENCE[:high]
|
109
109
|
link = "https://groups.google.com/d/topic/rubyonrails-security/AFBKNY7VSH8/discussion"
|
110
110
|
else
|
@@ -25,7 +25,7 @@ class Brakeman::CheckModelSerialize < Brakeman::BaseCheck
|
|
25
25
|
#High confidence warning on serialized, unprotected attributes.
|
26
26
|
#Medium confidence warning for serialized, protected attributes.
|
27
27
|
def check_for_serialize model
|
28
|
-
if serialized_attrs = model
|
28
|
+
if serialized_attrs = model.options[:serialize]
|
29
29
|
attrs = Set.new
|
30
30
|
|
31
31
|
serialized_attrs.each do |arglist|
|
@@ -34,9 +34,9 @@ class Brakeman::CheckModelSerialize < Brakeman::BaseCheck
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
if unsafe_attrs = model
|
37
|
+
if unsafe_attrs = model.attr_accessible
|
38
38
|
attrs.delete_if { |attr| not unsafe_attrs.include? attr.value }
|
39
|
-
elsif protected_attrs = model
|
39
|
+
elsif protected_attrs = model.attr_protected
|
40
40
|
safe_attrs = Set.new
|
41
41
|
|
42
42
|
protected_attrs.each do |arglist|
|
@@ -54,13 +54,13 @@ class Brakeman::CheckModelSerialize < Brakeman::BaseCheck
|
|
54
54
|
confidence = CONFIDENCE[:high]
|
55
55
|
end
|
56
56
|
|
57
|
-
warn :model => model
|
57
|
+
warn :model => model.name,
|
58
58
|
:warning_type => "Remote Code Execution",
|
59
59
|
:warning_code => :CVE_2013_0277,
|
60
|
-
:message => "Serialized attributes are vulnerable in Rails #{
|
60
|
+
:message => "Serialized attributes are vulnerable in Rails #{rails_version}, upgrade to #{@upgrade_version} or patch.",
|
61
61
|
:confidence => confidence,
|
62
62
|
:link => "https://groups.google.com/d/topic/rubyonrails-security/KtmwSbEpzrU/discussion",
|
63
|
-
:file => model
|
63
|
+
:file => model.file
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
@@ -8,7 +8,7 @@ class Brakeman::CheckNestedAttributes < Brakeman::BaseCheck
|
|
8
8
|
@description = "Checks for nested attributes vulnerability in Rails 2.3.9 and 3.0.0"
|
9
9
|
|
10
10
|
def run_check
|
11
|
-
version =
|
11
|
+
version = rails_version
|
12
12
|
|
13
13
|
if (version == "2.3.9" or version == "3.0.0") and uses_nested_attributes?
|
14
14
|
message = "Vulnerability in nested attributes (CVE-2010-3933). Upgrade to Rails version "
|
@@ -30,7 +30,7 @@ class Brakeman::CheckNestedAttributes < Brakeman::BaseCheck
|
|
30
30
|
|
31
31
|
def uses_nested_attributes?
|
32
32
|
active_record_models.each do |name, model|
|
33
|
-
return true if model
|
33
|
+
return true if model.options[:accepts_nested_attributes_for]
|
34
34
|
end
|
35
35
|
|
36
36
|
false
|
@@ -18,7 +18,7 @@ class Brakeman::CheckNumberToCurrency < Brakeman::BaseCheck
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def generic_warning
|
21
|
-
message = "Rails #{
|
21
|
+
message = "Rails #{rails_version} has a vulnerability in number helpers (CVE-2014-0081). Upgrade to Rails version "
|
22
22
|
|
23
23
|
if version_between? "2.3.0", "3.2.16"
|
24
24
|
message << "3.2.17"
|
@@ -62,7 +62,7 @@ class Brakeman::CheckNumberToCurrency < Brakeman::BaseCheck
|
|
62
62
|
warn :result => result,
|
63
63
|
:warning_type => "Cross Site Scripting",
|
64
64
|
:warning_code => :CVE_2014_0081_call,
|
65
|
-
:message => "Format options in #{result[:call].method} are not safe in Rails #{
|
65
|
+
:message => "Format options in #{result[:call].method} are not safe in Rails #{rails_version}",
|
66
66
|
:confidence => CONFIDENCE[:high],
|
67
67
|
:link_path => "https://groups.google.com/d/msg/ruby-security-ann/9WiRn2nhfq0/2K2KRB4LwCMJ",
|
68
68
|
:user_input => match
|
@@ -17,7 +17,7 @@ class Brakeman::CheckQuoteTableName < Brakeman::BaseCheck
|
|
17
17
|
confidence = CONFIDENCE[:med]
|
18
18
|
end
|
19
19
|
|
20
|
-
if
|
20
|
+
if rails_version =~ /^3/
|
21
21
|
message = "Versions before 3.0.10 have a vulnerability in quote_table_name: CVE-2011-2930"
|
22
22
|
else
|
23
23
|
message = "Versions before 2.3.14 have a vulnerability in quote_table_name: CVE-2011-2930"
|
@@ -184,7 +184,7 @@ class Brakeman::CheckRedirect < Brakeman::BaseCheck
|
|
184
184
|
if node_type? exp, :or
|
185
185
|
decorated_model? exp.lhs or decorated_model? exp.rhs
|
186
186
|
else
|
187
|
-
tracker.config
|
187
|
+
tracker.config.has_gem? :draper and
|
188
188
|
call? exp and
|
189
189
|
node_type?(exp.target, :const) and
|
190
190
|
exp.target.value.to_s.match(/Decorator$/) and
|
@@ -204,14 +204,6 @@ class Brakeman::CheckRedirect < Brakeman::BaseCheck
|
|
204
204
|
|
205
205
|
return false unless model
|
206
206
|
|
207
|
-
model
|
208
|
-
args.each do |arg|
|
209
|
-
if symbol? arg and arg.value == meth
|
210
|
-
return true
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
false
|
207
|
+
model.association? meth
|
216
208
|
end
|
217
209
|
end
|
@@ -25,7 +25,7 @@ class Brakeman::CheckRenderDoS < Brakeman::BaseCheck
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def warn_about_text_render
|
28
|
-
message = "Rails #{
|
28
|
+
message = "Rails #{rails_version} has a denial of service vulnerability (CVE-2014-0082). Upgrade to Rails version 3.2.17"
|
29
29
|
|
30
30
|
warn :warning_type => "Denial of Service",
|
31
31
|
:warning_code => :CVE_2014_0082,
|
@@ -20,7 +20,7 @@ class Brakeman::CheckSafeBufferManipulation < Brakeman::BaseCheck
|
|
20
20
|
return
|
21
21
|
end
|
22
22
|
|
23
|
-
message = "Rails #{
|
23
|
+
message = "Rails #{rails_version} has a vulnerabilty in SafeBuffer. Upgrade to #{suggested_version} or apply patches."
|
24
24
|
|
25
25
|
warn :warning_type => "Cross Site Scripting",
|
26
26
|
:warning_code => :safe_buffer_vuln,
|
@@ -38,7 +38,7 @@ class Brakeman::CheckSanitizeMethods < Brakeman::BaseCheck
|
|
38
38
|
next if duplicate? result
|
39
39
|
add_result result
|
40
40
|
|
41
|
-
message = "Rails #{
|
41
|
+
message = "Rails #{rails_version} has a vulnerability in #{method}: upgrade to #{@fix_version} or patch"
|
42
42
|
|
43
43
|
if include_user_input? result[:call]
|
44
44
|
confidence = CONFIDENCE[:high]
|
@@ -21,7 +21,7 @@ class Brakeman::CheckSelectTag < Brakeman::BaseCheck
|
|
21
21
|
|
22
22
|
@ignore_methods = Set[:escapeHTML, :escape_once, :h].merge tracker.options[:safe_methods]
|
23
23
|
|
24
|
-
@message = "Upgrade to Rails #{suggested_version}, #{
|
24
|
+
@message = "Upgrade to Rails #{suggested_version}, #{rails_version} select_tag is vulnerable (CVE-2012-3463)"
|
25
25
|
|
26
26
|
calls = tracker.find_call(:target => nil, :method => :select_tag).select do |result|
|
27
27
|
result[:location][:type] == :template
|
@@ -23,7 +23,7 @@ class Brakeman::CheckSelectVulnerability < Brakeman::BaseCheck
|
|
23
23
|
return
|
24
24
|
end
|
25
25
|
|
26
|
-
@message = "Upgrade to Rails #{suggested_version}, #{
|
26
|
+
@message = "Upgrade to Rails #{suggested_version}, #{rails_version} select() helper is vulnerable"
|
27
27
|
|
28
28
|
calls = tracker.find_call(:target => nil, :method => :select).select do |result|
|
29
29
|
result[:location][:type] == :template
|
@@ -43,7 +43,7 @@ class Brakeman::CheckSelectVulnerability < Brakeman::BaseCheck
|
|
43
43
|
if sexp? third_arg and include_user_input? third_arg
|
44
44
|
add_result result
|
45
45
|
|
46
|
-
if
|
46
|
+
if string_interp? third_arg
|
47
47
|
confidence = CONFIDENCE[:med]
|
48
48
|
else
|
49
49
|
confidence = CONFIDENCE[:low]
|
@@ -17,8 +17,7 @@ class Brakeman::CheckSessionSettings < Brakeman::BaseCheck
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def run_check
|
20
|
-
settings = tracker.config
|
21
|
-
tracker.config[:rails][:action_controller][:session]
|
20
|
+
settings = tracker.config.session_settings
|
22
21
|
|
23
22
|
check_for_issues settings, "#{tracker.app_path}/config/environment.rb"
|
24
23
|
|
@@ -16,7 +16,7 @@ class Brakeman::CheckSimpleFormat < Brakeman::CheckCrossSiteScripting
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def generic_warning
|
19
|
-
message = "Rails #{
|
19
|
+
message = "Rails #{rails_version} has a vulnerability in simple_format (CVE-2013-6416). Upgrade to Rails version 4.0.2"
|
20
20
|
|
21
21
|
warn :warning_type => "Cross Site Scripting",
|
22
22
|
:warning_code => :CVE_2013_6416,
|
@@ -51,7 +51,7 @@ class Brakeman::CheckSimpleFormat < Brakeman::CheckCrossSiteScripting
|
|
51
51
|
warn :result => result,
|
52
52
|
:warning_type => "Cross Site Scripting",
|
53
53
|
:warning_code => :CVE_2013_6416_call,
|
54
|
-
:message => "Values passed to simple_format are not safe in Rails #{
|
54
|
+
:message => "Values passed to simple_format are not safe in Rails #{rails_version}",
|
55
55
|
:confidence => CONFIDENCE[:high],
|
56
56
|
:link_path => "https://groups.google.com/d/msg/ruby-security-ann/5ZI1-H5OoIM/ZNq4FoR2GnIJ",
|
57
57
|
:user_input => match.match
|
@@ -20,11 +20,11 @@ class Brakeman::CheckSingleQuotes < Brakeman::BaseCheck
|
|
20
20
|
when version_between?('2.0.0', '2.3.14')
|
21
21
|
message = "All Rails 2.x versions do not escape single quotes (CVE-2012-3464)"
|
22
22
|
when version_between?('3.0.0', '3.0.16')
|
23
|
-
message = "Rails #{
|
23
|
+
message = "Rails #{rails_version} does not escape single quotes (CVE-2012-3464). Upgrade to 3.0.17"
|
24
24
|
when version_between?('3.1.0', '3.1.7')
|
25
|
-
message = "Rails #{
|
25
|
+
message = "Rails #{rails_version} does not escape single quotes (CVE-2012-3464). Upgrade to 3.1.8"
|
26
26
|
when version_between?('3.2.0', '3.2.7')
|
27
|
-
message = "Rails #{
|
27
|
+
message = "Rails #{rails_version} does not escape single quotes (CVE-2012-3464). Upgrade to 3.2.8"
|
28
28
|
else
|
29
29
|
return
|
30
30
|
end
|
@@ -14,9 +14,7 @@ class Brakeman::CheckSkipBeforeFilter < Brakeman::BaseCheck
|
|
14
14
|
|
15
15
|
def run_check
|
16
16
|
tracker.controllers.each do |name, controller|
|
17
|
-
|
18
|
-
|
19
|
-
filter_skips.each do |filter|
|
17
|
+
controller.skip_filters.each do |filter|
|
20
18
|
process_skip_filter filter, controller
|
21
19
|
end
|
22
20
|
end
|
@@ -25,23 +23,23 @@ class Brakeman::CheckSkipBeforeFilter < Brakeman::BaseCheck
|
|
25
23
|
def process_skip_filter filter, controller
|
26
24
|
case skip_except_value filter
|
27
25
|
when :verify_authenticity_token
|
28
|
-
warn :class => controller
|
26
|
+
warn :class => controller.name, #ugh this should be a controller warning, too
|
29
27
|
:warning_type => "Cross-Site Request Forgery",
|
30
28
|
:warning_code => :csrf_blacklist,
|
31
29
|
:message => "Use whitelist (:only => [..]) when skipping CSRF check",
|
32
30
|
:code => filter,
|
33
31
|
:confidence => CONFIDENCE[:med],
|
34
|
-
:file => controller
|
32
|
+
:file => controller.file
|
35
33
|
|
36
34
|
when :login_required, :authenticate_user!, :require_user
|
37
|
-
warn :controller => controller
|
35
|
+
warn :controller => controller.name,
|
38
36
|
:warning_code => :auth_blacklist,
|
39
37
|
:warning_type => "Authentication",
|
40
38
|
:message => "Use whitelist (:only => [..]) when skipping authentication",
|
41
39
|
:code => filter,
|
42
40
|
:confidence => CONFIDENCE[:med],
|
43
41
|
:link => "authentication_whitelist",
|
44
|
-
:file => controller
|
42
|
+
:file => controller.file
|
45
43
|
end
|
46
44
|
end
|
47
45
|
|