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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +19 -0
  3. data/README.md +3 -13
  4. data/lib/brakeman.rb +3 -0
  5. data/lib/brakeman/checks/base_check.rb +19 -47
  6. data/lib/brakeman/checks/check_basic_auth.rb +3 -3
  7. data/lib/brakeman/checks/check_cross_site_scripting.rb +26 -12
  8. data/lib/brakeman/checks/check_default_routes.rb +1 -1
  9. data/lib/brakeman/checks/check_detailed_exceptions.rb +2 -2
  10. data/lib/brakeman/checks/check_evaluation.rb +3 -0
  11. data/lib/brakeman/checks/check_execute.rb +3 -3
  12. data/lib/brakeman/checks/check_file_disclosure.rb +2 -2
  13. data/lib/brakeman/checks/check_forgery_setting.rb +9 -12
  14. data/lib/brakeman/checks/check_header_dos.rb +1 -1
  15. data/lib/brakeman/checks/check_i18n_xss.rb +2 -2
  16. data/lib/brakeman/checks/check_jruby_xml.rb +1 -1
  17. data/lib/brakeman/checks/check_json_encoding.rb +1 -1
  18. data/lib/brakeman/checks/check_json_parsing.rb +3 -3
  19. data/lib/brakeman/checks/check_link_to.rb +1 -1
  20. data/lib/brakeman/checks/check_link_to_href.rb +9 -2
  21. data/lib/brakeman/checks/check_mass_assignment.rb +5 -2
  22. data/lib/brakeman/checks/check_model_attr_accessible.rb +4 -4
  23. data/lib/brakeman/checks/check_model_attributes.rb +7 -7
  24. data/lib/brakeman/checks/check_model_serialize.rb +6 -6
  25. data/lib/brakeman/checks/check_nested_attributes.rb +2 -2
  26. data/lib/brakeman/checks/check_number_to_currency.rb +2 -2
  27. data/lib/brakeman/checks/check_quote_table_name.rb +1 -1
  28. data/lib/brakeman/checks/check_redirect.rb +2 -10
  29. data/lib/brakeman/checks/check_render.rb +1 -1
  30. data/lib/brakeman/checks/check_render_dos.rb +1 -1
  31. data/lib/brakeman/checks/check_safe_buffer_manipulation.rb +1 -1
  32. data/lib/brakeman/checks/check_sanitize_methods.rb +1 -1
  33. data/lib/brakeman/checks/check_select_tag.rb +1 -1
  34. data/lib/brakeman/checks/check_select_vulnerability.rb +2 -2
  35. data/lib/brakeman/checks/check_session_settings.rb +1 -2
  36. data/lib/brakeman/checks/check_simple_format.rb +2 -2
  37. data/lib/brakeman/checks/check_single_quotes.rb +3 -3
  38. data/lib/brakeman/checks/check_skip_before_filter.rb +5 -7
  39. data/lib/brakeman/checks/check_sql.rb +10 -14
  40. data/lib/brakeman/checks/check_sql_cves.rb +4 -4
  41. data/lib/brakeman/checks/check_ssl_verify.rb +27 -9
  42. data/lib/brakeman/checks/check_strip_tags.rb +5 -5
  43. data/lib/brakeman/checks/check_symbol_dos_cve.rb +1 -1
  44. data/lib/brakeman/checks/check_translate_bug.rb +3 -4
  45. data/lib/brakeman/checks/check_unscoped_find.rb +1 -1
  46. data/lib/brakeman/checks/check_validation_regex.rb +2 -2
  47. data/lib/brakeman/checks/check_xml_dos.rb +1 -1
  48. data/lib/brakeman/checks/check_yaml_parsing.rb +1 -1
  49. data/lib/brakeman/file_parser.rb +1 -0
  50. data/lib/brakeman/parsers/template_parser.rb +6 -5
  51. data/lib/brakeman/processor.rb +7 -7
  52. data/lib/brakeman/processors/alias_processor.rb +30 -12
  53. data/lib/brakeman/processors/base_processor.rb +4 -8
  54. data/lib/brakeman/processors/controller_alias_processor.rb +33 -132
  55. data/lib/brakeman/processors/controller_processor.rb +29 -53
  56. data/lib/brakeman/processors/erb_template_processor.rb +4 -6
  57. data/lib/brakeman/processors/erubis_template_processor.rb +8 -11
  58. data/lib/brakeman/processors/gem_processor.rb +19 -35
  59. data/lib/brakeman/processors/haml_template_processor.rb +10 -12
  60. data/lib/brakeman/processors/lib/find_all_calls.rb +3 -5
  61. data/lib/brakeman/processors/lib/find_call.rb +2 -2
  62. data/lib/brakeman/processors/lib/find_return_value.rb +1 -1
  63. data/lib/brakeman/processors/lib/rails2_config_processor.rb +7 -8
  64. data/lib/brakeman/processors/lib/rails3_config_processor.rb +6 -7
  65. data/lib/brakeman/processors/lib/render_helper.rb +15 -14
  66. data/lib/brakeman/processors/lib/render_path.rb +11 -5
  67. data/lib/brakeman/processors/library_processor.rb +13 -35
  68. data/lib/brakeman/processors/model_processor.rb +22 -64
  69. data/lib/brakeman/processors/output_processor.rb +1 -37
  70. data/lib/brakeman/processors/slim_template_processor.rb +6 -8
  71. data/lib/brakeman/processors/template_alias_processor.rb +9 -9
  72. data/lib/brakeman/processors/template_processor.rb +5 -9
  73. data/lib/brakeman/report/report_base.rb +7 -7
  74. data/lib/brakeman/report/report_html.rb +5 -7
  75. data/lib/brakeman/report/report_markdown.rb +4 -6
  76. data/lib/brakeman/report/report_table.rb +4 -6
  77. data/lib/brakeman/rescanner.rb +29 -31
  78. data/lib/brakeman/scanner.rb +17 -8
  79. data/lib/brakeman/tracker.rb +24 -34
  80. data/lib/brakeman/tracker/collection.rb +77 -0
  81. data/lib/brakeman/tracker/config.rb +93 -0
  82. data/lib/brakeman/tracker/controller.rb +161 -0
  83. data/lib/brakeman/tracker/library.rb +17 -0
  84. data/lib/brakeman/tracker/model.rb +90 -0
  85. data/lib/brakeman/tracker/template.rb +33 -0
  86. data/lib/brakeman/util.rb +17 -9
  87. data/lib/brakeman/version.rb +1 -1
  88. data/lib/brakeman/warning.rb +8 -9
  89. data/lib/ruby_parser/bm_sexp.rb +16 -16
  90. data/lib/ruby_parser/bm_sexp_processor.rb +1 -120
  91. metadata +42 -31
  92. checksums.yaml.gz.sig +0 -1
  93. data.tar.gz.sig +0 -0
  94. 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 #{tracker.config[:rails_version]} has a denial of service vulnerability (CVE-2013-6414). Upgrade to Rails version "
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 #{tracker.config[:rails_version]} has an XSS vulnerability in i18n (CVE-2013-4491). Upgrade to Rails version "
11
- i18n_gem = tracker.config[:gems][:i18n][:version] if tracker.config[:gems][:i18n]
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 #{tracker.config[:rails_version]} with JRuby has a vulnerability in XML parser: upgrade to #{fix_version} or patch",
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 #{tracker.config[:rails_version]} does not encode JSON keys (CVE-2015-3226). Upgrade to Rails version "
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 #{tracker.config[:rails_version]} has a serious JSON parsing vulnerability: upgrade to #{new_version} or patch"
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[:gems][:yajl]
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[:gems][name] if tracker.config[:gems]
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[:escape_html]
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 node_type?(url_arg, :string_interp) && !url_arg[1].chomp.empty?
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 unprotected_model? m
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[:options][:attr_protected])
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[:attr_accessible].each do |attribute|
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[:files].first,
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[:options][:role_accessible]
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[:attr_accessible].nil?
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[:options][:attr_protected].nil?
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[:options][:attr_protected].nil?
56
+ if model.attr_protected.nil?
57
57
  warn :model => name,
58
- :file => model[:files].first,
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[:files].first,
74
- :line => model[:options][:attr_protected].first.line,
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? 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 #{tracker.config[:rails_version]}, use attr_accessible or upgrade to #{upgrade_version}"
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[:options] && model[:options][:serialize]
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[:attr_accessible]
37
+ if unsafe_attrs = model.attr_accessible
38
38
  attrs.delete_if { |attr| not unsafe_attrs.include? attr.value }
39
- elsif protected_attrs = model[:options][:attr_protected]
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[:name],
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 #{tracker.config[:rails_version]}, upgrade to #{@upgrade_version} or patch.",
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[:files].first
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 = tracker.config[:rails_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[:options][:accepts_nested_attributes_for]
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 #{tracker.config[:rails_version]} has a vulnerability in number helpers (CVE-2014-0081). Upgrade to Rails version "
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 #{@tracker.config[:rails_version]}",
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 tracker.config[:rails_version] =~ /^3/
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[:gems][:draper] and
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[:associations].each do |name, args|
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
@@ -36,7 +36,7 @@ class Brakeman::CheckRender < Brakeman::BaseCheck
36
36
 
37
37
 
38
38
  if input = has_immediate_user_input?(view)
39
- if node_type? view, :string_interp, :dstr
39
+ if string_interp? view
40
40
  confidence = CONFIDENCE[:med]
41
41
  else
42
42
  confidence = CONFIDENCE[:high]
@@ -25,7 +25,7 @@ class Brakeman::CheckRenderDoS < Brakeman::BaseCheck
25
25
  end
26
26
 
27
27
  def warn_about_text_render
28
- message = "Rails #{tracker.config[:rails_version]} has a denial of service vulnerability (CVE-2014-0082). Upgrade to Rails version 3.2.17"
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 #{tracker.config[:rails_version]} has a vulnerabilty in SafeBuffer. Upgrade to #{suggested_version} or apply patches."
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 #{tracker.config[:rails_version]} has a vulnerability in #{method}: upgrade to #{@fix_version} or patch"
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}, #{tracker.config[:rails_version]} select_tag is vulnerable (CVE-2012-3463)"
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}, #{tracker.config[:rails_version]} select() helper is vulnerable"
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 node_type? third_arg, :string_interp, :dstr
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[:rails][:action_controller] &&
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 #{tracker.config[:rails_version]} has a vulnerability in simple_format (CVE-2013-6416). Upgrade to Rails version 4.0.2"
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 #{@tracker.config[:rails_version]}",
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 #{tracker.config[:rails_version]} does not escape single quotes (CVE-2012-3464). Upgrade to 3.0.17"
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 #{tracker.config[:rails_version]} does not escape single quotes (CVE-2012-3464). Upgrade to 3.1.8"
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 #{tracker.config[:rails_version]} does not escape single quotes (CVE-2012-3464). Upgrade to 3.2.8"
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
- filter_skips = controller[:options][:skip_filters]
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[:name], #ugh this should be a controller warning, too
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[:files].first
32
+ :file => controller.file
35
33
 
36
34
  when :login_required, :authenticate_user!, :require_user
37
- warn :controller => controller[:name],
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[:files].first
42
+ :file => controller.file
45
43
  end
46
44
  end
47
45