railroader 4.3.5 → 4.3.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +16 -0
  3. data/README.md +15 -0
  4. data/bin/railroader +1 -1
  5. data/lib/railroader/call_index.rb +11 -11
  6. data/lib/railroader/checks/base_check.rb +43 -43
  7. data/lib/railroader/checks/check_basic_auth.rb +3 -3
  8. data/lib/railroader/checks/check_content_tag.rb +9 -9
  9. data/lib/railroader/checks/check_create_with.rb +2 -2
  10. data/lib/railroader/checks/check_cross_site_scripting.rb +24 -24
  11. data/lib/railroader/checks/check_default_routes.rb +5 -5
  12. data/lib/railroader/checks/check_deserialize.rb +1 -1
  13. data/lib/railroader/checks/check_dynamic_finders.rb +1 -1
  14. data/lib/railroader/checks/check_escape_function.rb +3 -3
  15. data/lib/railroader/checks/check_evaluation.rb +4 -4
  16. data/lib/railroader/checks/check_execute.rb +8 -8
  17. data/lib/railroader/checks/check_file_access.rb +2 -2
  18. data/lib/railroader/checks/check_filter_skipping.rb +2 -2
  19. data/lib/railroader/checks/check_forgery_setting.rb +3 -3
  20. data/lib/railroader/checks/check_jruby_xml.rb +1 -1
  21. data/lib/railroader/checks/check_json_parsing.rb +2 -2
  22. data/lib/railroader/checks/check_link_to.rb +12 -12
  23. data/lib/railroader/checks/check_link_to_href.rb +9 -9
  24. data/lib/railroader/checks/check_mail_to.rb +4 -4
  25. data/lib/railroader/checks/check_mass_assignment.rb +5 -5
  26. data/lib/railroader/checks/check_model_attributes.rb +6 -6
  27. data/lib/railroader/checks/check_model_serialize.rb +2 -2
  28. data/lib/railroader/checks/check_nested_attributes.rb +2 -2
  29. data/lib/railroader/checks/check_nested_attributes_bypass.rb +1 -1
  30. data/lib/railroader/checks/check_quote_table_name.rb +3 -3
  31. data/lib/railroader/checks/check_redirect.rb +19 -19
  32. data/lib/railroader/checks/check_regex_dos.rb +3 -3
  33. data/lib/railroader/checks/check_render.rb +4 -4
  34. data/lib/railroader/checks/check_response_splitting.rb +2 -2
  35. data/lib/railroader/checks/check_safe_buffer_manipulation.rb +4 -4
  36. data/lib/railroader/checks/check_sanitize_methods.rb +2 -2
  37. data/lib/railroader/checks/check_select_tag.rb +4 -4
  38. data/lib/railroader/checks/check_select_vulnerability.rb +3 -3
  39. data/lib/railroader/checks/check_send.rb +1 -1
  40. data/lib/railroader/checks/check_send_file.rb +1 -1
  41. data/lib/railroader/checks/check_session_settings.rb +10 -10
  42. data/lib/railroader/checks/check_single_quotes.rb +8 -8
  43. data/lib/railroader/checks/check_skip_before_filter.rb +5 -5
  44. data/lib/railroader/checks/check_sql.rb +41 -41
  45. data/lib/railroader/checks/check_strip_tags.rb +6 -6
  46. data/lib/railroader/checks/check_symbol_dos_cve.rb +0 -1
  47. data/lib/railroader/checks/check_translate_bug.rb +4 -4
  48. data/lib/railroader/checks/check_unsafe_reflection.rb +1 -1
  49. data/lib/railroader/checks/check_validation_regex.rb +7 -7
  50. data/lib/railroader/checks/check_weak_hash.rb +1 -1
  51. data/lib/railroader/checks/check_without_protection.rb +9 -9
  52. data/lib/railroader/checks/check_yaml_parsing.rb +5 -5
  53. data/lib/railroader/checks.rb +18 -18
  54. data/lib/railroader/commandline.rb +1 -1
  55. data/lib/railroader/differ.rb +2 -2
  56. data/lib/railroader/options.rb +7 -7
  57. data/lib/railroader/parsers/rails2_erubis.rb +1 -1
  58. data/lib/railroader/parsers/rails2_xss_plugin_erubis.rb +4 -4
  59. data/lib/railroader/parsers/template_parser.rb +1 -1
  60. data/lib/railroader/processor.rb +17 -17
  61. data/lib/railroader/processors/alias_processor.rb +72 -72
  62. data/lib/railroader/processors/base_processor.rb +31 -31
  63. data/lib/railroader/processors/controller_alias_processor.rb +31 -31
  64. data/lib/railroader/processors/controller_processor.rb +29 -29
  65. data/lib/railroader/processors/erb_template_processor.rb +8 -8
  66. data/lib/railroader/processors/erubis_template_processor.rb +6 -6
  67. data/lib/railroader/processors/gem_processor.rb +1 -1
  68. data/lib/railroader/processors/haml_template_processor.rb +14 -14
  69. data/lib/railroader/processors/lib/call_conversion_helper.rb +1 -1
  70. data/lib/railroader/processors/lib/find_all_calls.rb +15 -15
  71. data/lib/railroader/processors/lib/find_call.rb +26 -26
  72. data/lib/railroader/processors/lib/find_return_value.rb +11 -11
  73. data/lib/railroader/processors/lib/module_helper.rb +1 -1
  74. data/lib/railroader/processors/lib/processor_helper.rb +4 -4
  75. data/lib/railroader/processors/lib/rails2_config_processor.rb +20 -20
  76. data/lib/railroader/processors/lib/rails2_route_processor.rb +38 -38
  77. data/lib/railroader/processors/lib/rails3_config_processor.rb +14 -14
  78. data/lib/railroader/processors/lib/rails3_route_processor.rb +16 -16
  79. data/lib/railroader/processors/lib/render_helper.rb +32 -32
  80. data/lib/railroader/processors/lib/route_helper.rb +12 -12
  81. data/lib/railroader/processors/library_processor.rb +1 -1
  82. data/lib/railroader/processors/model_processor.rb +9 -9
  83. data/lib/railroader/processors/output_processor.rb +3 -3
  84. data/lib/railroader/processors/slim_template_processor.rb +4 -4
  85. data/lib/railroader/processors/template_alias_processor.rb +10 -10
  86. data/lib/railroader/processors/template_processor.rb +7 -7
  87. data/lib/railroader/report/renderer.rb +1 -1
  88. data/lib/railroader/report/report_base.rb +12 -12
  89. data/lib/railroader/report/report_csv.rb +2 -2
  90. data/lib/railroader/report/report_html.rb +5 -5
  91. data/lib/railroader/report/report_markdown.rb +2 -2
  92. data/lib/railroader/report/report_table.rb +3 -3
  93. data/lib/railroader/report/report_tabs.rb +2 -2
  94. data/lib/railroader/report/report_text.rb +3 -4
  95. data/lib/railroader/report.rb +3 -3
  96. data/lib/railroader/rescanner.rb +36 -36
  97. data/lib/railroader/scanner.rb +23 -23
  98. data/lib/railroader/tracker/config.rb +3 -3
  99. data/lib/railroader/tracker/controller.rb +2 -2
  100. data/lib/railroader/tracker.rb +42 -42
  101. data/lib/railroader/util.rb +47 -47
  102. data/lib/railroader/version.rb +1 -1
  103. data/lib/railroader/warning.rb +9 -10
  104. data/lib/railroader.rb +32 -32
  105. data/lib/ruby_parser/bm_sexp.rb +63 -63
  106. data/lib/ruby_parser/bm_sexp_processor.rb +3 -3
  107. metadata +4 -4
@@ -1,14 +1,14 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Check for versions with vulnerable html escape method
4
- #http://groups.google.com/group/rubyonrails-security/browse_thread/thread/56bffb5923ab1195
3
+ # Check for versions with vulnerable html escape method
4
+ # http://groups.google.com/group/rubyonrails-security/browse_thread/thread/56bffb5923ab1195
5
5
  class Railroader::CheckEscapeFunction < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
8
8
  @description = "Checks for versions before 2.3.14 which have a vulnerable escape method"
9
9
 
10
10
  def run_check
11
- if version_between?('2.0.0', '2.3.13') and RUBY_VERSION < '1.9.0'
11
+ if version_between?('2.0.0', '2.3.13') and RUBY_VERSION < '1.9.0'
12
12
 
13
13
  warn :warning_type => 'Cross-Site Scripting',
14
14
  :warning_code => :CVE_2011_2932,
@@ -1,13 +1,13 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #This check looks for calls to +eval+, +instance_eval+, etc. which include
4
- #user input.
3
+ # This check looks for calls to +eval+, +instance_eval+, etc. which include
4
+ # user input.
5
5
  class Railroader::CheckEvaluation < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
8
8
  @description = "Searches for evaluation of user input"
9
9
 
10
- #Process calls
10
+ # Process calls
11
11
  def run_check
12
12
  Railroader.debug "Finding eval-like calls"
13
13
  calls = tracker.find_call :method => [:eval, :instance_eval, :class_eval, :module_eval]
@@ -18,7 +18,7 @@ class Railroader::CheckEvaluation < Railroader::BaseCheck
18
18
  end
19
19
  end
20
20
 
21
- #Warns if eval includes user input
21
+ # Warns if eval includes user input
22
22
  def process_result result
23
23
  return unless original? result
24
24
 
@@ -1,9 +1,9 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Checks for string interpolation and parameters in calls to
4
- #Kernel#system, Kernel#exec, Kernel#syscall, and inside backticks.
3
+ # Checks for string interpolation and parameters in calls to
4
+ # Kernel#system, Kernel#exec, Kernel#syscall, and inside backticks.
5
5
  #
6
- #Examples of command injection vulnerabilities:
6
+ # Examples of command injection vulnerabilities:
7
7
  #
8
8
  # system("rf -rf #{params[:file]}")
9
9
  # exec(params[:command])
@@ -22,7 +22,7 @@ class Railroader::CheckExecute < Railroader::BaseCheck
22
22
 
23
23
  SHELLWORDS = s(:const, :Shellwords)
24
24
 
25
- #Check models, controllers, and views for command injection.
25
+ # Check models, controllers, and views for command injection.
26
26
  def run_check
27
27
  Railroader.debug "Finding system calls using ``"
28
28
  check_for_backticks tracker
@@ -41,7 +41,7 @@ class Railroader::CheckExecute < Railroader::BaseCheck
41
41
  end
42
42
  end
43
43
 
44
- #Processes results from Tracker#find_call.
44
+ # Processes results from Tracker#find_call.
45
45
  def process_result result
46
46
  call = result[:call]
47
47
  args = call.arglist
@@ -60,7 +60,7 @@ class Railroader::CheckExecute < Railroader::BaseCheck
60
60
 
61
61
  if failure and original? result
62
62
 
63
- if failure.type == :interp #Not from user input
63
+ if failure.type == :interp # Not from user input
64
64
  confidence = :medium
65
65
  else
66
66
  confidence = :high
@@ -100,7 +100,7 @@ class Railroader::CheckExecute < Railroader::BaseCheck
100
100
  end
101
101
  end
102
102
 
103
- #Looks for calls using backticks such as
103
+ # Looks for calls using backticks such as
104
104
  #
105
105
  # `rm -rf #{params[:file]}`
106
106
  def check_for_backticks tracker
@@ -109,7 +109,7 @@ class Railroader::CheckExecute < Railroader::BaseCheck
109
109
  end
110
110
  end
111
111
 
112
- #Processes backticks.
112
+ # Processes backticks.
113
113
  def process_backticks result
114
114
  return unless original? result
115
115
 
@@ -1,7 +1,7 @@
1
1
  require 'railroader/checks/base_check'
2
2
  require 'railroader/processors/lib/processor_helper'
3
3
 
4
- #Checks for user input in methods which open or manipulate files
4
+ # Checks for user input in methods which open or manipulate files
5
5
  class Railroader::CheckFileAccess < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
@@ -39,7 +39,7 @@ class Railroader::CheckFileAccess < Railroader::BaseCheck
39
39
  elsif tracker.options[:check_arguments] and
40
40
  match = include_user_input?(file_name)
41
41
 
42
- #Check for string building in file name
42
+ # Check for string building in file name
43
43
  if call?(file_name) and (file_name.method == :+ or file_name.method == :<<)
44
44
  confidence = :high
45
45
  else
@@ -1,7 +1,7 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Check for filter skipping vulnerability
4
- #http://groups.google.com/group/rubyonrails-security/browse_thread/thread/3420ac71aed312d6
3
+ # Check for filter skipping vulnerability
4
+ # http://groups.google.com/group/rubyonrails-security/browse_thread/thread/3420ac71aed312d6
5
5
  class Railroader::CheckFilterSkipping < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
@@ -1,9 +1,9 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Checks that +protect_from_forgery+ is set in the ApplicationController.
3
+ # Checks that +protect_from_forgery+ is set in the ApplicationController.
4
4
  #
5
- #Also warns for CSRF weakness in certain versions of Rails:
6
- #http://groups.google.com/group/rubyonrails-security/browse_thread/thread/2d95a3cc23e03665
5
+ # Also warns for CSRF weakness in certain versions of Rails:
6
+ # http://groups.google.com/group/rubyonrails-security/browse_thread/thread/2d95a3cc23e03665
7
7
  class Railroader::CheckForgerySetting < Railroader::BaseCheck
8
8
  Railroader::Checks.add self
9
9
 
@@ -19,7 +19,7 @@ class Railroader::CheckJRubyXML < Railroader::BaseCheck
19
19
  return
20
20
  end
21
21
 
22
- #Check for workaround
22
+ # Check for workaround
23
23
  tracker.check_initializers(:"ActiveSupport::XmlMini", :backend=).each do |result|
24
24
  arg = result.call.first_arg
25
25
 
@@ -36,12 +36,12 @@ class Railroader::CheckJSONParsing < Railroader::BaseCheck
36
36
  end
37
37
  end
38
38
 
39
- #Check if `yajl` is included in Gemfile
39
+ # Check if `yajl` is included in Gemfile
40
40
  def uses_yajl?
41
41
  tracker.config.has_gem? :yajl
42
42
  end
43
43
 
44
- #Check for `ActiveSupport::JSON.backend = "JSONGem"`
44
+ # Check for `ActiveSupport::JSON.backend = "JSONGem"`
45
45
  def uses_gem_backend?
46
46
  matches = tracker.check_initializers(:'ActiveSupport::JSON', :backend=)
47
47
 
@@ -1,9 +1,9 @@
1
1
  require 'railroader/checks/check_cross_site_scripting'
2
2
 
3
- #Checks for calls to link_to in versions of Ruby where link_to did not
4
- #escape the first argument.
3
+ # Checks for calls to link_to in versions of Ruby where link_to did not
4
+ # escape the first argument.
5
5
  #
6
- #See https://rails.lighthouseapp.com/projects/8994/tickets/3518-link_to-doesnt-escape-its-input
6
+ # See https://rails.lighthouseapp.com/projects/8994/tickets/3518-link_to-doesnt-escape-its-input
7
7
  class Railroader::CheckLinkTo < Railroader::CheckCrossSiteScripting
8
8
  Railroader::Checks.add self
9
9
 
@@ -21,7 +21,7 @@ class Railroader::CheckLinkTo < Railroader::CheckCrossSiteScripting
21
21
  :will_paginate].merge tracker.options[:safe_methods]
22
22
 
23
23
  @known_dangerous = []
24
- #Ideally, I think this should also check to see if people are setting
24
+ # Ideally, I think this should also check to see if people are setting
25
25
  #:escape => false
26
26
  @models = tracker.models.keys
27
27
  @inspect_arguments = tracker.options[:check_arguments]
@@ -32,8 +32,8 @@ class Railroader::CheckLinkTo < Railroader::CheckCrossSiteScripting
32
32
  def process_result result
33
33
  return if duplicate? result
34
34
 
35
- #Have to make a copy of this, otherwise it will be changed to
36
- #an ignored method call by the code above.
35
+ # Have to make a copy of this, otherwise it will be changed to
36
+ # an ignored method call by the code above.
37
37
  call = result[:call] = result[:call].dup
38
38
 
39
39
  first_arg = call.first_arg
@@ -41,7 +41,7 @@ class Railroader::CheckLinkTo < Railroader::CheckCrossSiteScripting
41
41
 
42
42
  @matched = false
43
43
 
44
- #Skip if no arguments(?) or first argument is a hash
44
+ # Skip if no arguments(?) or first argument is a hash
45
45
  return if first_arg.nil? or hash? first_arg
46
46
 
47
47
  if version_between? "2.0.0", "2.2.99"
@@ -51,8 +51,8 @@ class Railroader::CheckLinkTo < Railroader::CheckCrossSiteScripting
51
51
  check_argument result, second_arg
52
52
  end
53
53
  elsif second_arg
54
- #Only check first argument if there is a second argument
55
- #in Rails 2.3.x
54
+ # Only check first argument if there is a second argument
55
+ # in Rails 2.3.x
56
56
  check_argument result, first_arg
57
57
  end
58
58
  end
@@ -122,9 +122,9 @@ class Railroader::CheckLinkTo < Railroader::CheckCrossSiteScripting
122
122
  target = exp.target
123
123
  target = process target.dup if sexp? target
124
124
 
125
- #Bare records create links to the model resource,
126
- #not a string that could have injection
127
- #TODO: Needs test? I think this is broken?
125
+ # Bare records create links to the model resource,
126
+ # not a string that could have injection
127
+ # TODO: Needs test? I think this is broken?
128
128
  return exp if model_name? target and context == [:call, :arglist]
129
129
 
130
130
  super
@@ -1,11 +1,11 @@
1
1
  require 'railroader/checks/check_cross_site_scripting'
2
2
 
3
- #Checks for calls to link_to which pass in potentially hazardous data
4
- #to the second argument. While this argument must be html_safe to not break
5
- #the html, it must also be url safe as determined by calling a
3
+ # Checks for calls to link_to which pass in potentially hazardous data
4
+ # to the second argument. While this argument must be html_safe to not break
5
+ # the html, it must also be url safe as determined by calling a
6
6
  #:url_safe_method. This prevents attacks such as javascript:evil() or
7
- #data:<encoded XSS> which is html_safe, but not safe as an href
8
- #Props to Nick Green for the idea.
7
+ # data:<encoded XSS> which is html_safe, but not safe as an href
8
+ # Props to Nick Green for the idea.
9
9
  class Railroader::CheckLinkToHref < Railroader::CheckLinkTo
10
10
  Railroader::Checks.add self
11
11
 
@@ -30,8 +30,8 @@ class Railroader::CheckLinkToHref < Railroader::CheckLinkTo
30
30
  end
31
31
 
32
32
  def process_result result
33
- #Have to make a copy of this, otherwise it will be changed to
34
- #an ignored method call by the code above.
33
+ # Have to make a copy of this, otherwise it will be changed to
34
+ # an ignored method call by the code above.
35
35
  call = result[:call] = result[:call].dup
36
36
  @matched = false
37
37
  url_arg = process call.second_arg
@@ -98,8 +98,8 @@ class Railroader::CheckLinkToHref < Railroader::CheckLinkTo
98
98
  ignore_interpolation? url_arg, exp
99
99
  end
100
100
 
101
- #Ignore situations where the href is an interpolated string
102
- #with something before the user input
101
+ # Ignore situations where the href is an interpolated string
102
+ # with something before the user input
103
103
  def ignore_interpolation? arg, suspect
104
104
  return unless string_interp? arg
105
105
  return true unless arg[1].chomp.empty? # plain string before interpolation
@@ -1,9 +1,9 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Check for cross-site scripting vulnerability in mail_to :encode => :javascript
4
- #with certain versions of Rails (< 2.3.11 or < 3.0.4).
3
+ # Check for cross-site scripting vulnerability in mail_to :encode => :javascript
4
+ # with certain versions of Rails (< 2.3.11 or < 3.0.4).
5
5
  #
6
- #http://groups.google.com/group/rubyonrails-security/browse_thread/thread/f02a48ede8315f81
6
+ # http://groups.google.com/group/rubyonrails-security/browse_thread/thread/f02a48ede8315f81
7
7
  class Railroader::CheckMailTo < Railroader::BaseCheck
8
8
  Railroader::Checks.add self
9
9
 
@@ -29,7 +29,7 @@ class Railroader::CheckMailTo < Railroader::BaseCheck
29
29
  end
30
30
  end
31
31
 
32
- #Check for javascript encoding of mail_to address
32
+ # Check for javascript encoding of mail_to address
33
33
  # mail_to email, name, :encode => :javascript
34
34
  def mail_to_javascript?
35
35
  Railroader.debug "Checking calls to mail_to for javascript encoding"
@@ -1,9 +1,9 @@
1
1
  require 'railroader/checks/base_check'
2
2
  require 'set'
3
3
 
4
- #Checks for mass assignments to models.
4
+ # Checks for mass assignments to models.
5
5
  #
6
- #See http://guides.rubyonrails.org/security.html#mass-assignment for details
6
+ # See http://guides.rubyonrails.org/security.html#mass-assignment for details
7
7
  class Railroader::CheckMassAssignment < Railroader::BaseCheck
8
8
  Railroader::Checks.add self
9
9
 
@@ -59,7 +59,7 @@ class Railroader::CheckMassAssignment < Railroader::BaseCheck
59
59
  end
60
60
  end
61
61
 
62
- #All results should be Model.new(...) or Model.attributes=() calls
62
+ # All results should be Model.new(...) or Model.attributes=() calls
63
63
  def process_result res
64
64
  call = res[:call]
65
65
 
@@ -106,7 +106,7 @@ class Railroader::CheckMassAssignment < Railroader::BaseCheck
106
106
  res
107
107
  end
108
108
 
109
- #Want to ignore calls to Model.new that have no arguments
109
+ # Want to ignore calls to Model.new that have no arguments
110
110
  def check_call call
111
111
  process_call_args call
112
112
 
@@ -116,7 +116,7 @@ class Railroader::CheckMassAssignment < Railroader::BaseCheck
116
116
  arg = call.first_arg
117
117
  end
118
118
 
119
- if arg.nil? #empty new()
119
+ if arg.nil? # empty new()
120
120
  false
121
121
  elsif hash? arg and not include_user_input? arg
122
122
  false
@@ -1,10 +1,10 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Check if mass assignment is used with models
4
- #which inherit from ActiveRecord::Base.
3
+ # Check if mass assignment is used with models
4
+ # which inherit from ActiveRecord::Base.
5
5
  #
6
- #If tracker.options[:collapse_mass_assignment] is +true+ (default), all models
7
- #which do not use attr_accessible will be reported in a single warning
6
+ # If tracker.options[:collapse_mass_assignment] is +true+ (default), all models
7
+ # which do not use attr_accessible will be reported in a single warning
8
8
  class Railroader::CheckModelAttributes < Railroader::BaseCheck
9
9
  Railroader::Checks.add self
10
10
 
@@ -13,7 +13,7 @@ class Railroader::CheckModelAttributes < Railroader::BaseCheck
13
13
  def run_check
14
14
  return if mass_assign_disabled?
15
15
 
16
- #Roll warnings into one warning for all models
16
+ # Roll warnings into one warning for all models
17
17
  if tracker.options[:collapse_mass_assignment]
18
18
  no_accessible_names = []
19
19
  protected_names = []
@@ -50,7 +50,7 @@ class Railroader::CheckModelAttributes < Railroader::BaseCheck
50
50
  :confidence => confidence,
51
51
  :link => link
52
52
  end
53
- else #Output one warning per model
53
+ else # Output one warning per model
54
54
 
55
55
  check_models do |name, model|
56
56
  if model.attr_protected.nil?
@@ -22,8 +22,8 @@ class Railroader::CheckModelSerialize < Railroader::BaseCheck
22
22
  end
23
23
  end
24
24
 
25
- #High confidence warning on serialized, unprotected attributes.
26
- #Medium confidence warning for serialized, protected attributes.
25
+ # High confidence warning on serialized, unprotected attributes.
26
+ # Medium confidence warning for serialized, protected attributes.
27
27
  def check_for_serialize model
28
28
  if serialized_attrs = model.options[:serialize]
29
29
  attrs = Set.new
@@ -1,7 +1,7 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Check for vulnerability in nested attributes in Rails 2.3.9 and 3.0.0
4
- #http://groups.google.com/group/rubyonrails-security/browse_thread/thread/f9f913d328dafe0c
3
+ # Check for vulnerability in nested attributes in Rails 2.3.9 and 3.0.0
4
+ # http://groups.google.com/group/rubyonrails-security/browse_thread/thread/f9f913d328dafe0c
5
5
  class Railroader::CheckNestedAttributes < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
@@ -1,6 +1,6 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #https://groups.google.com/d/msg/rubyonrails-security/cawsWcQ6c8g/tegZtYdbFQAJ
3
+ # https://groups.google.com/d/msg/rubyonrails-security/cawsWcQ6c8g/tegZtYdbFQAJ
4
4
  class Railroader::CheckNestedAttributesBypass < Railroader::BaseCheck
5
5
  Railroader::Checks.add self
6
6
 
@@ -1,14 +1,14 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Check for uses of quote_table_name in Rails versions before 2.3.13 and 3.0.10
4
- #http://groups.google.com/group/rubyonrails-security/browse_thread/thread/6a1e473744bc389b
3
+ # Check for uses of quote_table_name in Rails versions before 2.3.13 and 3.0.10
4
+ # http://groups.google.com/group/rubyonrails-security/browse_thread/thread/6a1e473744bc389b
5
5
  class Railroader::CheckQuoteTableName < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
8
8
  @description = "Checks for quote_table_name vulnerability in versions before 2.3.14 and 3.0.10"
9
9
 
10
10
  def run_check
11
- if (version_between?('2.0.0', '2.3.13') or
11
+ if (version_between?('2.0.0', '2.3.13') or
12
12
  version_between?('3.0.0', '3.0.9'))
13
13
 
14
14
  if uses_quote_table_name?
@@ -1,8 +1,8 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Reports any calls to +redirect_to+ which include parameters in the arguments.
3
+ # Reports any calls to +redirect_to+ which include parameters in the arguments.
4
4
  #
5
- #For example:
5
+ # For example:
6
6
  #
7
7
  # redirect_to params.merge(:action => :elsewhere)
8
8
  class Railroader::CheckRedirect < Railroader::BaseCheck
@@ -59,10 +59,10 @@ class Railroader::CheckRedirect < Railroader::BaseCheck
59
59
  end
60
60
  end
61
61
 
62
- #Custom check for user input. First looks to see if the user input
63
- #is being output directly. This is necessary because of tracker.options[:check_arguments]
64
- #which can be used to enable/disable reporting output of method calls which use
65
- #user input as arguments.
62
+ # Custom check for user input. First looks to see if the user input
63
+ # is being output directly. This is necessary because of tracker.options[:check_arguments]
64
+ # which can be used to enable/disable reporting output of method calls which use
65
+ # user input as arguments.
66
66
  def include_user_input? call, immediate = :immediate
67
67
  Railroader.debug "Checking if call includes user input"
68
68
 
@@ -89,7 +89,7 @@ class Railroader::CheckRedirect < Railroader::BaseCheck
89
89
  return Match.new(immediate, arg.target)
90
90
  elsif arg.method == :url_for and include_user_input? arg
91
91
  return Match.new(immediate, arg)
92
- #Ignore helpers like some_model_url?
92
+ # Ignore helpers like some_model_url?
93
93
  elsif arg.method.to_s =~ /_(url|path)\z/
94
94
  return false
95
95
  end
@@ -98,14 +98,14 @@ class Railroader::CheckRedirect < Railroader::BaseCheck
98
98
  end
99
99
 
100
100
  if tracker.options[:check_arguments] and call? arg
101
- include_user_input? arg, false #I'm doubting if this is really necessary...
101
+ include_user_input? arg, false # I'm doubting if this is really necessary...
102
102
  else
103
103
  false
104
104
  end
105
105
  end
106
106
 
107
- #Checks +redirect_to+ arguments for +only_path => true+ which essentially
108
- #nullifies the danger posed by redirecting with user input
107
+ # Checks +redirect_to+ arguments for +only_path => true+ which essentially
108
+ # nullifies the danger posed by redirecting with user input
109
109
  def only_path? call
110
110
  arg = call.first_arg
111
111
 
@@ -164,7 +164,7 @@ class Railroader::CheckRedirect < Railroader::BaseCheck
164
164
  end
165
165
 
166
166
  #+url_for+ is only_path => true by default. This checks to see if it is
167
- #set to false for some reason.
167
+ # set to false for some reason.
168
168
  def check_url_for call
169
169
  arg = call.first_arg
170
170
 
@@ -177,7 +177,7 @@ class Railroader::CheckRedirect < Railroader::BaseCheck
177
177
  true
178
178
  end
179
179
 
180
- #Returns true if exp is (probably) a model instance
180
+ # Returns true if exp is (probably) a model instance
181
181
  def model_instance? exp
182
182
  if node_type? exp, :or
183
183
  model_instance? exp.lhs or model_instance? exp.rhs
@@ -198,14 +198,14 @@ class Railroader::CheckRedirect < Railroader::BaseCheck
198
198
  model_target? exp.target
199
199
  end
200
200
 
201
- #Returns true if exp is (probably) a friendly model instance
202
- #using the FriendlyId gem
201
+ # Returns true if exp is (probably) a friendly model instance
202
+ # using the FriendlyId gem
203
203
  def friendly_model? exp
204
204
  call? exp and model_name? exp.target and exp.method == :friendly
205
205
  end
206
-
207
- #Returns true if exp is (probably) a decorated model instance
208
- #using the Draper gem
206
+
207
+ # Returns true if exp is (probably) a decorated model instance
208
+ # using the Draper gem
209
209
  def decorated_model? exp
210
210
  if node_type? exp, :or
211
211
  decorated_model? exp.lhs or decorated_model? exp.rhs
@@ -218,7 +218,7 @@ class Railroader::CheckRedirect < Railroader::BaseCheck
218
218
  end
219
219
  end
220
220
 
221
- #Check if method is actually an association in a Model
221
+ # Check if method is actually an association in a Model
222
222
  def association? model_name, meth
223
223
  if call? model_name
224
224
  return association? model_name.target, meth
@@ -244,7 +244,7 @@ class Railroader::CheckRedirect < Railroader::BaseCheck
244
244
  if call? exp and params? exp.target and exp.method == :permit
245
245
  exp.each_arg do |opt|
246
246
  if symbol? opt and DANGEROUS_KEYS.include? opt.value
247
- return false
247
+ return false
248
248
  end
249
249
  end
250
250
 
@@ -1,6 +1,6 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #This check looks for regexes that include user input.
3
+ # This check looks for regexes that include user input.
4
4
  class Railroader::CheckRegexDoS < Railroader::BaseCheck
5
5
  Railroader::Checks.add self
6
6
 
@@ -13,7 +13,7 @@ class Railroader::CheckRegexDoS < Railroader::BaseCheck
13
13
 
14
14
  @description = "Searches regexes including user input"
15
15
 
16
- #Process calls
16
+ # Process calls
17
17
  def run_check
18
18
  Railroader.debug "Finding dynamic regexes"
19
19
  calls = tracker.find_call :method => [:railroader_regex_interp]
@@ -24,7 +24,7 @@ class Railroader::CheckRegexDoS < Railroader::BaseCheck
24
24
  end
25
25
  end
26
26
 
27
- #Warns if regex includes user input
27
+ # Warns if regex includes user input
28
28
  def process_result result
29
29
  return unless original? result
30
30
 
@@ -1,6 +1,6 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Check calls to +render()+ for dangerous values
3
+ # Check calls to +render()+ for dangerous values
4
4
  class Railroader::CheckRender < Railroader::BaseCheck
5
5
  Railroader::Checks.add self
6
6
 
@@ -28,7 +28,7 @@ class Railroader::CheckRender < Railroader::BaseCheck
28
28
  end
29
29
  end
30
30
 
31
- #Check if path to action or file is determined dynamically
31
+ # Check if path to action or file is determined dynamically
32
32
  def check_for_dynamic_path result
33
33
  view = result[:call][2]
34
34
 
@@ -46,7 +46,7 @@ class Railroader::CheckRender < Railroader::BaseCheck
46
46
  return
47
47
  end
48
48
 
49
- return if input.type == :model #skip models
49
+ return if input.type == :model # skip models
50
50
  return if safe_param? input.match
51
51
 
52
52
  message = "Render path contains #{friendly_type_of input}"
@@ -94,4 +94,4 @@ class Railroader::CheckRender < Railroader::BaseCheck
94
94
  end
95
95
  end
96
96
  end
97
- end
97
+ end
@@ -1,7 +1,7 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Warn about response splitting in Rails versions before 2.3.13
4
- #http://groups.google.com/group/rubyonrails-security/browse_thread/thread/6ffc93bde0298768
3
+ # Warn about response splitting in Rails versions before 2.3.13
4
+ # http://groups.google.com/group/rubyonrails-security/browse_thread/thread/6ffc93bde0298768
5
5
  class Railroader::CheckResponseSplitting < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
@@ -1,8 +1,8 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Check for unsafe manipulation of strings
4
- #Right now this is just a version check for
5
- #https://groups.google.com/group/rubyonrails-security/browse_thread/thread/edd28f1e3d04e913?pli=1
3
+ # Check for unsafe manipulation of strings
4
+ # Right now this is just a version check for
5
+ # https://groups.google.com/group/rubyonrails-security/browse_thread/thread/edd28f1e3d04e913?pli=1
6
6
  class Railroader::CheckSafeBufferManipulation < Railroader::BaseCheck
7
7
  Railroader::Checks.add self
8
8
 
@@ -23,7 +23,7 @@ class Railroader::CheckSafeBufferManipulation < Railroader::BaseCheck
23
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
- :warning_code => :safe_buffer_vuln,
26
+ :warning_code => :safe_buffer_vuln,
27
27
  :message => message,
28
28
  :confidence => :medium,
29
29
  :gem_info => gemfile_or_environment
@@ -1,7 +1,7 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #sanitize and sanitize_css are vulnerable:
4
- #CVE-2013-1855 and CVE-2013-1857
3
+ # sanitize and sanitize_css are vulnerable:
4
+ # CVE-2013-1855 and CVE-2013-1857
5
5
  class Railroader::CheckSanitizeMethods < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
@@ -1,7 +1,7 @@
1
1
  require 'railroader/checks/base_check'
2
2
 
3
- #Checks for CVE-2012-3463, unescaped input in :prompt option of select_tag:
4
- #https://groups.google.com/d/topic/rubyonrails-security/fV3QUToSMSw/discussion
3
+ # Checks for CVE-2012-3463, unescaped input in :prompt option of select_tag:
4
+ # https://groups.google.com/d/topic/rubyonrails-security/fV3QUToSMSw/discussion
5
5
  class Railroader::CheckSelectTag < Railroader::BaseCheck
6
6
  Railroader::Checks.add self
7
7
 
@@ -32,11 +32,11 @@ class Railroader::CheckSelectTag < Railroader::BaseCheck
32
32
  end
33
33
  end
34
34
 
35
- #Check if select_tag is called with user input in :prompt option
35
+ # Check if select_tag is called with user input in :prompt option
36
36
  def process_result result
37
37
  return unless original? result
38
38
 
39
- #Only concerned if user input is supplied for :prompt option
39
+ # Only concerned if user input is supplied for :prompt option
40
40
  last_arg = result[:call].last_arg
41
41
 
42
42
  if hash? last_arg