railroader 4.3.4

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 (165) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES.md +1091 -0
  3. data/FEATURES +16 -0
  4. data/README.md +174 -0
  5. data/bin/railroader +8 -0
  6. data/lib/railroader/app_tree.rb +191 -0
  7. data/lib/railroader/call_index.rb +219 -0
  8. data/lib/railroader/checks/base_check.rb +505 -0
  9. data/lib/railroader/checks/check_basic_auth.rb +88 -0
  10. data/lib/railroader/checks/check_basic_auth_timing_attack.rb +33 -0
  11. data/lib/railroader/checks/check_content_tag.rb +200 -0
  12. data/lib/railroader/checks/check_create_with.rb +74 -0
  13. data/lib/railroader/checks/check_cross_site_scripting.rb +381 -0
  14. data/lib/railroader/checks/check_default_routes.rb +86 -0
  15. data/lib/railroader/checks/check_deserialize.rb +56 -0
  16. data/lib/railroader/checks/check_detailed_exceptions.rb +55 -0
  17. data/lib/railroader/checks/check_digest_dos.rb +38 -0
  18. data/lib/railroader/checks/check_divide_by_zero.rb +42 -0
  19. data/lib/railroader/checks/check_dynamic_finders.rb +48 -0
  20. data/lib/railroader/checks/check_escape_function.rb +21 -0
  21. data/lib/railroader/checks/check_evaluation.rb +35 -0
  22. data/lib/railroader/checks/check_execute.rb +189 -0
  23. data/lib/railroader/checks/check_file_access.rb +71 -0
  24. data/lib/railroader/checks/check_file_disclosure.rb +35 -0
  25. data/lib/railroader/checks/check_filter_skipping.rb +31 -0
  26. data/lib/railroader/checks/check_forgery_setting.rb +81 -0
  27. data/lib/railroader/checks/check_header_dos.rb +31 -0
  28. data/lib/railroader/checks/check_i18n_xss.rb +48 -0
  29. data/lib/railroader/checks/check_jruby_xml.rb +36 -0
  30. data/lib/railroader/checks/check_json_encoding.rb +47 -0
  31. data/lib/railroader/checks/check_json_parsing.rb +107 -0
  32. data/lib/railroader/checks/check_link_to.rb +132 -0
  33. data/lib/railroader/checks/check_link_to_href.rb +146 -0
  34. data/lib/railroader/checks/check_mail_to.rb +49 -0
  35. data/lib/railroader/checks/check_mass_assignment.rb +196 -0
  36. data/lib/railroader/checks/check_mime_type_dos.rb +39 -0
  37. data/lib/railroader/checks/check_model_attr_accessible.rb +55 -0
  38. data/lib/railroader/checks/check_model_attributes.rb +119 -0
  39. data/lib/railroader/checks/check_model_serialize.rb +67 -0
  40. data/lib/railroader/checks/check_nested_attributes.rb +38 -0
  41. data/lib/railroader/checks/check_nested_attributes_bypass.rb +58 -0
  42. data/lib/railroader/checks/check_number_to_currency.rb +74 -0
  43. data/lib/railroader/checks/check_permit_attributes.rb +43 -0
  44. data/lib/railroader/checks/check_quote_table_name.rb +40 -0
  45. data/lib/railroader/checks/check_redirect.rb +256 -0
  46. data/lib/railroader/checks/check_regex_dos.rb +68 -0
  47. data/lib/railroader/checks/check_render.rb +97 -0
  48. data/lib/railroader/checks/check_render_dos.rb +37 -0
  49. data/lib/railroader/checks/check_render_inline.rb +53 -0
  50. data/lib/railroader/checks/check_response_splitting.rb +21 -0
  51. data/lib/railroader/checks/check_route_dos.rb +42 -0
  52. data/lib/railroader/checks/check_safe_buffer_manipulation.rb +31 -0
  53. data/lib/railroader/checks/check_sanitize_methods.rb +112 -0
  54. data/lib/railroader/checks/check_secrets.rb +40 -0
  55. data/lib/railroader/checks/check_select_tag.rb +59 -0
  56. data/lib/railroader/checks/check_select_vulnerability.rb +60 -0
  57. data/lib/railroader/checks/check_send.rb +47 -0
  58. data/lib/railroader/checks/check_send_file.rb +19 -0
  59. data/lib/railroader/checks/check_session_manipulation.rb +35 -0
  60. data/lib/railroader/checks/check_session_settings.rb +176 -0
  61. data/lib/railroader/checks/check_simple_format.rb +58 -0
  62. data/lib/railroader/checks/check_single_quotes.rb +101 -0
  63. data/lib/railroader/checks/check_skip_before_filter.rb +60 -0
  64. data/lib/railroader/checks/check_sql.rb +700 -0
  65. data/lib/railroader/checks/check_sql_cves.rb +106 -0
  66. data/lib/railroader/checks/check_ssl_verify.rb +48 -0
  67. data/lib/railroader/checks/check_strip_tags.rb +89 -0
  68. data/lib/railroader/checks/check_symbol_dos.rb +71 -0
  69. data/lib/railroader/checks/check_symbol_dos_cve.rb +30 -0
  70. data/lib/railroader/checks/check_translate_bug.rb +45 -0
  71. data/lib/railroader/checks/check_unsafe_reflection.rb +50 -0
  72. data/lib/railroader/checks/check_unscoped_find.rb +57 -0
  73. data/lib/railroader/checks/check_validation_regex.rb +116 -0
  74. data/lib/railroader/checks/check_weak_hash.rb +148 -0
  75. data/lib/railroader/checks/check_without_protection.rb +80 -0
  76. data/lib/railroader/checks/check_xml_dos.rb +45 -0
  77. data/lib/railroader/checks/check_yaml_parsing.rb +121 -0
  78. data/lib/railroader/checks.rb +209 -0
  79. data/lib/railroader/codeclimate/engine_configuration.rb +97 -0
  80. data/lib/railroader/commandline.rb +179 -0
  81. data/lib/railroader/differ.rb +66 -0
  82. data/lib/railroader/file_parser.rb +54 -0
  83. data/lib/railroader/format/style.css +133 -0
  84. data/lib/railroader/options.rb +339 -0
  85. data/lib/railroader/parsers/rails2_erubis.rb +6 -0
  86. data/lib/railroader/parsers/rails2_xss_plugin_erubis.rb +48 -0
  87. data/lib/railroader/parsers/rails3_erubis.rb +81 -0
  88. data/lib/railroader/parsers/template_parser.rb +108 -0
  89. data/lib/railroader/processor.rb +102 -0
  90. data/lib/railroader/processors/alias_processor.rb +1229 -0
  91. data/lib/railroader/processors/base_processor.rb +295 -0
  92. data/lib/railroader/processors/config_processor.rb +14 -0
  93. data/lib/railroader/processors/controller_alias_processor.rb +278 -0
  94. data/lib/railroader/processors/controller_processor.rb +249 -0
  95. data/lib/railroader/processors/erb_template_processor.rb +77 -0
  96. data/lib/railroader/processors/erubis_template_processor.rb +92 -0
  97. data/lib/railroader/processors/gem_processor.rb +64 -0
  98. data/lib/railroader/processors/haml_template_processor.rb +191 -0
  99. data/lib/railroader/processors/lib/basic_processor.rb +37 -0
  100. data/lib/railroader/processors/lib/call_conversion_helper.rb +90 -0
  101. data/lib/railroader/processors/lib/find_all_calls.rb +224 -0
  102. data/lib/railroader/processors/lib/find_call.rb +183 -0
  103. data/lib/railroader/processors/lib/find_return_value.rb +166 -0
  104. data/lib/railroader/processors/lib/module_helper.rb +111 -0
  105. data/lib/railroader/processors/lib/processor_helper.rb +88 -0
  106. data/lib/railroader/processors/lib/rails2_config_processor.rb +145 -0
  107. data/lib/railroader/processors/lib/rails2_route_processor.rb +313 -0
  108. data/lib/railroader/processors/lib/rails3_config_processor.rb +132 -0
  109. data/lib/railroader/processors/lib/rails3_route_processor.rb +308 -0
  110. data/lib/railroader/processors/lib/render_helper.rb +181 -0
  111. data/lib/railroader/processors/lib/render_path.rb +107 -0
  112. data/lib/railroader/processors/lib/route_helper.rb +68 -0
  113. data/lib/railroader/processors/lib/safe_call_helper.rb +16 -0
  114. data/lib/railroader/processors/library_processor.rb +74 -0
  115. data/lib/railroader/processors/model_processor.rb +91 -0
  116. data/lib/railroader/processors/output_processor.rb +144 -0
  117. data/lib/railroader/processors/route_processor.rb +17 -0
  118. data/lib/railroader/processors/slim_template_processor.rb +111 -0
  119. data/lib/railroader/processors/template_alias_processor.rb +118 -0
  120. data/lib/railroader/processors/template_processor.rb +85 -0
  121. data/lib/railroader/report/config/remediation.yml +71 -0
  122. data/lib/railroader/report/ignore/config.rb +153 -0
  123. data/lib/railroader/report/ignore/interactive.rb +362 -0
  124. data/lib/railroader/report/pager.rb +112 -0
  125. data/lib/railroader/report/renderer.rb +24 -0
  126. data/lib/railroader/report/report_base.rb +292 -0
  127. data/lib/railroader/report/report_codeclimate.rb +79 -0
  128. data/lib/railroader/report/report_csv.rb +55 -0
  129. data/lib/railroader/report/report_hash.rb +23 -0
  130. data/lib/railroader/report/report_html.rb +216 -0
  131. data/lib/railroader/report/report_json.rb +45 -0
  132. data/lib/railroader/report/report_markdown.rb +107 -0
  133. data/lib/railroader/report/report_table.rb +117 -0
  134. data/lib/railroader/report/report_tabs.rb +17 -0
  135. data/lib/railroader/report/report_text.rb +198 -0
  136. data/lib/railroader/report/templates/controller_overview.html.erb +22 -0
  137. data/lib/railroader/report/templates/controller_warnings.html.erb +21 -0
  138. data/lib/railroader/report/templates/error_overview.html.erb +29 -0
  139. data/lib/railroader/report/templates/header.html.erb +58 -0
  140. data/lib/railroader/report/templates/ignored_warnings.html.erb +25 -0
  141. data/lib/railroader/report/templates/model_warnings.html.erb +21 -0
  142. data/lib/railroader/report/templates/overview.html.erb +38 -0
  143. data/lib/railroader/report/templates/security_warnings.html.erb +23 -0
  144. data/lib/railroader/report/templates/template_overview.html.erb +21 -0
  145. data/lib/railroader/report/templates/view_warnings.html.erb +34 -0
  146. data/lib/railroader/report/templates/warning_overview.html.erb +17 -0
  147. data/lib/railroader/report.rb +88 -0
  148. data/lib/railroader/rescanner.rb +483 -0
  149. data/lib/railroader/scanner.rb +321 -0
  150. data/lib/railroader/tracker/collection.rb +93 -0
  151. data/lib/railroader/tracker/config.rb +154 -0
  152. data/lib/railroader/tracker/constants.rb +171 -0
  153. data/lib/railroader/tracker/controller.rb +161 -0
  154. data/lib/railroader/tracker/library.rb +17 -0
  155. data/lib/railroader/tracker/model.rb +90 -0
  156. data/lib/railroader/tracker/template.rb +33 -0
  157. data/lib/railroader/tracker.rb +362 -0
  158. data/lib/railroader/util.rb +503 -0
  159. data/lib/railroader/version.rb +3 -0
  160. data/lib/railroader/warning.rb +294 -0
  161. data/lib/railroader/warning_codes.rb +117 -0
  162. data/lib/railroader.rb +544 -0
  163. data/lib/ruby_parser/bm_sexp.rb +626 -0
  164. data/lib/ruby_parser/bm_sexp_processor.rb +116 -0
  165. metadata +386 -0
@@ -0,0 +1,294 @@
1
+ require 'json'
2
+ require 'digest/sha2'
3
+ require 'railroader/warning_codes'
4
+
5
+ #The Warning class stores information about warnings
6
+ class Railroader::Warning
7
+ attr_reader :called_from, :check, :class, :confidence, :controller,
8
+ :line, :method, :model, :template, :user_input, :user_input_type,
9
+ :warning_code, :warning_set, :warning_type
10
+
11
+ attr_accessor :code, :context, :file, :message, :relative_path
12
+
13
+ TEXT_CONFIDENCE = {
14
+ 0 => "High",
15
+ 1 => "Medium",
16
+ 2 => "Weak",
17
+ }
18
+
19
+ CONFIDENCE = {
20
+ :high => 0,
21
+ :med => 1,
22
+ :medium => 1,
23
+ :low => 2,
24
+ :weak => 2,
25
+ }
26
+
27
+ OPTIONS = {
28
+ :called_from => :@called_from,
29
+ :check => :@check,
30
+ :class => :@class,
31
+ :code => :@code,
32
+ :controller => :@controller,
33
+ :file => :@file,
34
+ :gem_info => :@gem_info,
35
+ :line => :@line,
36
+ :link_path => :@link_path,
37
+ :message => :@message,
38
+ :method => :@method,
39
+ :model => :@model,
40
+ :relative_path => :@relative_path,
41
+ :template => :@template,
42
+ :user_input => :@user_input,
43
+ :warning_set => :@warning_set,
44
+ :warning_type => :@warning_type,
45
+ }
46
+
47
+ #+options[:result]+ can be a result from Tracker#find_call. Otherwise, it can be +nil+.
48
+ def initialize options = {}
49
+ @view_name = nil
50
+
51
+ OPTIONS.each do |key, var|
52
+ self.instance_variable_set(var, options[key])
53
+ end
54
+
55
+ self.confidence = options[:confidence]
56
+
57
+ result = options[:result]
58
+ if result
59
+ @code ||= result[:call]
60
+ @file ||= result[:location][:file]
61
+
62
+ if result[:location][:type] == :template #template result
63
+ @template ||= result[:location][:template]
64
+ else
65
+ @class ||= result[:location][:class]
66
+ @method ||= result[:location][:method]
67
+ end
68
+ end
69
+
70
+ if @method.to_s =~ /^fake_filter\d+/
71
+ @method = :before_filter
72
+ end
73
+
74
+ if @user_input.is_a? Railroader::BaseCheck::Match
75
+ @user_input_type = @user_input.type
76
+ @user_input = @user_input.match
77
+ elsif @user_input == false
78
+ @user_input = nil
79
+ end
80
+
81
+ if not @line
82
+ if @user_input and @user_input.respond_to? :line
83
+ @line = @user_input.line
84
+ elsif @code and @code.respond_to? :line
85
+ @line = @code.line
86
+ end
87
+ end
88
+
89
+ if @gem_info
90
+ if @gem_info.is_a? Hash
91
+ @line ||= @gem_info[:line]
92
+ @file ||= @gem_info[:file]
93
+ else
94
+ # Fallback behavior returns just a string for the file name
95
+ @file ||= @gem_info
96
+ end
97
+ end
98
+
99
+ unless @warning_set
100
+ if self.model
101
+ @warning_set = :model
102
+ elsif self.template
103
+ @warning_set = :template
104
+ @called_from = self.template.render_path
105
+ elsif self.controller
106
+ @warning_set = :controller
107
+ else
108
+ @warning_set = :warning
109
+ end
110
+ end
111
+
112
+ if options[:warning_code]
113
+ @warning_code = Railroader::WarningCodes.code options[:warning_code]
114
+ end
115
+
116
+ Railroader.debug("Warning created without warning code: #{options[:warning_code]}") unless @warning_code
117
+
118
+ @format_message = nil
119
+ @row = nil
120
+ end
121
+
122
+ def hash
123
+ self.to_s.hash
124
+ end
125
+
126
+ def eql? other_warning
127
+ self.hash == other_warning.hash
128
+ end
129
+
130
+ def confidence= conf
131
+ @confidence = case conf
132
+ when Integer
133
+ conf
134
+ when Symbol
135
+ CONFIDENCE[conf]
136
+ else
137
+ raise "Could not set confidence to `#{conf}`"
138
+ end
139
+
140
+ raise "Could not set confidence to `#{conf}`" unless @confidence
141
+ raise "Invalid confidence: `#{@confidence}`" unless TEXT_CONFIDENCE[@confidence]
142
+ end
143
+
144
+ #Returns name of a view, including where it was rendered from
145
+ def view_name(include_renderer = true)
146
+ if called_from and include_renderer
147
+ @view_name = "#{template.name} (#{called_from.last})"
148
+ else
149
+ @view_name = template.name
150
+ end
151
+ end
152
+
153
+ #Return String of the code output from the OutputProcessor and
154
+ #stripped of newlines and tabs.
155
+ def format_code strip = true
156
+ format_ruby self.code, strip
157
+ end
158
+
159
+ #Return String of the user input formatted and
160
+ #stripped of newlines and tabs.
161
+ def format_user_input strip = true
162
+ format_ruby self.user_input, strip
163
+ end
164
+
165
+ def format_with_user_input strip = true, &block
166
+ if self.user_input
167
+ formatted = Railroader::OutputProcessor.new.format(code, self.user_input, &block)
168
+ formatted.gsub!(/(\t|\r|\n)+/, " ") if strip
169
+ formatted
170
+ else
171
+ format_code
172
+ end
173
+ end
174
+
175
+ #Return formatted warning message
176
+ def format_message
177
+ return @format_message if @format_message
178
+
179
+ @format_message = self.message.dup
180
+
181
+ if self.line
182
+ @format_message << " near line #{self.line}"
183
+ end
184
+
185
+ if self.code
186
+ @format_message << ": #{format_code}"
187
+ end
188
+
189
+ @format_message
190
+ end
191
+
192
+ def link
193
+ return @link if @link
194
+
195
+ if @link_path
196
+ if @link_path.start_with? "http"
197
+ @link = @link_path
198
+ else
199
+ @link = "https://railroaderscanner.org/docs/warning_types/#{@link_path}"
200
+ end
201
+ else
202
+ warning_path = self.warning_type.to_s.downcase.gsub(/\s+/, '_') + "/"
203
+ @link = "https://railroaderscanner.org/docs/warning_types/#{warning_path}"
204
+ end
205
+
206
+ @link
207
+ end
208
+
209
+ #Generates a hash suitable for inserting into a table
210
+ def to_row type = :warning
211
+ @row = { "Confidence" => self.confidence,
212
+ "Warning Type" => self.warning_type.to_s,
213
+ "Message" => self.format_message }
214
+
215
+ case type
216
+ when :template
217
+ @row["Template"] = self.view_name.to_s
218
+ when :model
219
+ @row["Model"] = self.model.to_s
220
+ when :controller
221
+ @row["Controller"] = self.controller.to_s
222
+ when :warning
223
+ @row["Class"] = self.class.to_s
224
+ @row["Method"] = self.method.to_s
225
+ end
226
+
227
+ @row
228
+ end
229
+
230
+ def to_s
231
+ output = "(#{TEXT_CONFIDENCE[self.confidence]}) #{self.warning_type} - #{self.message}"
232
+ output << " near line #{self.line}" if self.line
233
+ output << " in #{self.file}" if self.file
234
+ output << ": #{self.format_code}" if self.code
235
+
236
+ output
237
+ end
238
+
239
+ def fingerprint
240
+ loc = self.location
241
+ location_string = loc && loc.sort_by { |k, v| k.to_s }.inspect
242
+ warning_code_string = sprintf("%03d", @warning_code)
243
+ code_string = @code.inspect
244
+
245
+ Digest::SHA2.new(256).update("#{warning_code_string}#{code_string}#{location_string}#{@relative_path}#{self.confidence}").to_s
246
+ end
247
+
248
+ def location include_renderer = true
249
+ case @warning_set
250
+ when :template
251
+ location = { :type => :template, :template => self.view_name(include_renderer) }
252
+ when :model
253
+ location = { :type => :model, :model => self.model }
254
+ when :controller
255
+ location = { :type => :controller, :controller => self.controller }
256
+ when :warning
257
+ if self.class
258
+ location = { :type => :method, :class => self.class, :method => self.method }
259
+ else
260
+ location = nil
261
+ end
262
+ end
263
+ end
264
+
265
+ def to_hash
266
+ { :warning_type => self.warning_type,
267
+ :warning_code => @warning_code,
268
+ :fingerprint => self.fingerprint,
269
+ :check_name => self.check.gsub(/^Railroader::Check/, ''),
270
+ :message => self.message,
271
+ :file => self.file,
272
+ :line => self.line,
273
+ :link => self.link,
274
+ :code => (@code && self.format_code(false)),
275
+ :render_path => self.called_from,
276
+ :location => self.location(false),
277
+ :user_input => (@user_input && self.format_user_input(false)),
278
+ :confidence => TEXT_CONFIDENCE[self.confidence]
279
+ }
280
+ end
281
+
282
+ def to_json
283
+ JSON.generate self.to_hash
284
+ end
285
+
286
+ private
287
+
288
+ def format_ruby code, strip
289
+ formatted = Railroader::OutputProcessor.new.format(code)
290
+ formatted.gsub!(/(\t|\r|\n)+/, " ") if strip
291
+ formatted
292
+ end
293
+ end
294
+
@@ -0,0 +1,117 @@
1
+ module Railroader::WarningCodes
2
+ Codes = {
3
+ :sql_injection => 0,
4
+ :sql_injection_limit_offset => 1,
5
+ :cross_site_scripting => 2,
6
+ :xss_link_to => 3,
7
+ :xss_link_to_href => 4,
8
+ :xss_to_json => 5,
9
+ :csrf_protection_disabled => 6,
10
+ :csrf_protection_missing => 7,
11
+ :csrf_blacklist => 8,
12
+ :basic_auth_password => 9,
13
+ :auth_blacklist => 10,
14
+ :all_default_routes => 11,
15
+ :controller_default_routes => 12,
16
+ :code_eval => 13,
17
+ :command_injection => 14,
18
+ :dynamic_render_path => 15,
19
+ :file_access => 16,
20
+ :mass_assign_call => 17,
21
+ :open_redirect => 18,
22
+ :no_attr_accessible => 19,
23
+ :attr_protected_used => 20,
24
+ :safe_buffer_vuln => 21,
25
+ :select_options_vuln => 22,
26
+ :dangerous_send => 23,
27
+ :unsafe_constantize => 24,
28
+ :unsafe_deserialize => 25,
29
+ :http_cookies => 26,
30
+ :secure_cookies => 27,
31
+ :translate_vuln => 28,
32
+ :session_secret => 29,
33
+ :validation_regex => 30,
34
+ :CVE_2010_3933 => 31,
35
+ :CVE_2011_0446 => 32,
36
+ :CVE_2011_0447 => 33,
37
+ :CVE_2011_2929 => 34,
38
+ :CVE_2011_2930 => 35,
39
+ :CVE_2011_2931 => 36,
40
+ :CVE_2011_3186 => 37,
41
+ :CVE_2012_2660 => 38,
42
+ :CVE_2012_2661 => 39,
43
+ :CVE_2012_2695 => 40,
44
+ #:CVE_2012_2931 => 41,
45
+ :CVE_2012_3424 => 42,
46
+ :CVE_2012_3463 => 43,
47
+ :CVE_2012_3464 => 44,
48
+ :CVE_2012_3465 => 45,
49
+ :CVE_2012_5664 => 46,
50
+ :CVE_2013_0155 => 47,
51
+ :CVE_2013_0156 => 48,
52
+ :CVE_2013_0269 => 49,
53
+ :CVE_2013_0277 => 50,
54
+ :CVE_2013_0276 => 51,
55
+ :CVE_2013_0333 => 52,
56
+ :xss_content_tag => 53,
57
+ :mass_assign_without_protection => 54,
58
+ :CVE_2013_1854 => 55,
59
+ :CVE_2013_1855 => 56,
60
+ :CVE_2013_1856 => 57,
61
+ :CVE_2013_1857 => 58,
62
+ :unsafe_symbol_creation => 59,
63
+ :dangerous_attr_accessible => 60,
64
+ :local_request_config => 61,
65
+ :detailed_exceptions => 62,
66
+ :CVE_2013_4491 => 63,
67
+ :CVE_2013_6414 => 64,
68
+ # Replaced by CVE_2014_0081
69
+ #:CVE_2013_6415 => 65,
70
+ #:CVE_2013_6415_call => 66,
71
+ :CVE_2013_6416 => 67,
72
+ :CVE_2013_6416_call => 68,
73
+ :CVE_2013_6417 => 69,
74
+ :mass_assign_permit! => 70,
75
+ :ssl_verification_bypass => 71,
76
+ :CVE_2014_0080 => 72,
77
+ :CVE_2014_0081 => 73,
78
+ :CVE_2014_0081_call => 74,
79
+ :CVE_2014_0082 => 75,
80
+ :regex_dos => 76,
81
+ :CVE_2014_0130 => 77,
82
+ :CVE_2014_3482 => 78,
83
+ :CVE_2014_3483 => 79,
84
+ :CVE_2014_3514 => 80,
85
+ :CVE_2014_3514_call => 81,
86
+ :unscoped_find => 82,
87
+ :CVE_2011_2932 => 83,
88
+ :cross_site_scripting_inline => 84,
89
+ :CVE_2014_7829 => 85,
90
+ :csrf_not_protected_by_raising_exception => 86,
91
+ :CVE_2015_3226 => 87,
92
+ :CVE_2015_3227 => 88,
93
+ :session_key_manipulation => 89,
94
+ :weak_hash_digest => 90,
95
+ :weak_hash_hmac => 91,
96
+ :sql_injection_dynamic_finder => 92,
97
+ :CVE_2015_7576 => 93,
98
+ :CVE_2016_0751 => 94,
99
+ :CVE_2015_7577 => 95,
100
+ :CVE_2015_7578 => 96,
101
+ :CVE_2015_7580 => 97,
102
+ :CVE_2015_7579 => 98,
103
+ :dynamic_render_path_rce => 99,
104
+ :CVE_2015_7581 => 100,
105
+ :secret_in_source => 101,
106
+ :CVE_2016_6316 => 102,
107
+ :CVE_2016_6317 => 103,
108
+ :divide_by_zero => 104,
109
+ :dangerous_permit_key => 105,
110
+ :CVE_2018_8048 => 106,
111
+ :CVE_2018_3741 => 107,
112
+ }
113
+
114
+ def self.code name
115
+ Codes[name]
116
+ end
117
+ end