brakeman-min 3.7.2 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +15 -1
- data/FEATURES +1 -1
- data/lib/brakeman.rb +55 -17
- data/lib/brakeman/call_index.rb +2 -2
- data/lib/brakeman/checks/base_check.rb +4 -2
- data/lib/brakeman/checks/check_basic_auth.rb +3 -3
- data/lib/brakeman/checks/check_basic_auth_timing_attack.rb +1 -1
- data/lib/brakeman/checks/check_content_tag.rb +12 -12
- data/lib/brakeman/checks/check_create_with.rb +5 -5
- data/lib/brakeman/checks/check_cross_site_scripting.rb +8 -8
- data/lib/brakeman/checks/check_default_routes.rb +4 -4
- data/lib/brakeman/checks/check_deserialize.rb +2 -2
- data/lib/brakeman/checks/check_detailed_exceptions.rb +4 -4
- data/lib/brakeman/checks/check_digest_dos.rb +2 -2
- data/lib/brakeman/checks/check_dynamic_finders.rb +1 -1
- data/lib/brakeman/checks/check_escape_function.rb +2 -2
- data/lib/brakeman/checks/check_evaluation.rb +1 -1
- data/lib/brakeman/checks/check_execute.rb +5 -5
- data/lib/brakeman/checks/check_file_access.rb +4 -4
- data/lib/brakeman/checks/check_file_disclosure.rb +2 -2
- data/lib/brakeman/checks/check_filter_skipping.rb +2 -2
- data/lib/brakeman/checks/check_forgery_setting.rb +2 -2
- 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 +2 -4
- data/lib/brakeman/checks/check_json_encoding.rb +4 -4
- data/lib/brakeman/checks/check_json_parsing.rb +6 -6
- data/lib/brakeman/checks/check_link_to.rb +5 -5
- data/lib/brakeman/checks/check_link_to_href.rb +37 -31
- data/lib/brakeman/checks/check_mail_to.rb +2 -2
- data/lib/brakeman/checks/check_mass_assignment.rb +6 -6
- data/lib/brakeman/checks/check_mime_type_dos.rb +1 -1
- data/lib/brakeman/checks/check_model_attr_accessible.rb +5 -5
- data/lib/brakeman/checks/check_model_attributes.rb +4 -4
- data/lib/brakeman/checks/check_model_serialize.rb +3 -3
- data/lib/brakeman/checks/check_nested_attributes.rb +2 -2
- data/lib/brakeman/checks/check_nested_attributes_bypass.rb +1 -1
- data/lib/brakeman/checks/check_number_to_currency.rb +5 -5
- data/lib/brakeman/checks/check_quote_table_name.rb +2 -2
- data/lib/brakeman/checks/check_redirect.rb +2 -2
- data/lib/brakeman/checks/check_regex_dos.rb +3 -3
- data/lib/brakeman/checks/check_render.rb +4 -4
- data/lib/brakeman/checks/check_render_dos.rb +1 -1
- data/lib/brakeman/checks/check_render_inline.rb +5 -5
- data/lib/brakeman/checks/check_response_splitting.rb +1 -1
- data/lib/brakeman/checks/check_route_dos.rb +1 -1
- data/lib/brakeman/checks/check_safe_buffer_manipulation.rb +2 -2
- data/lib/brakeman/checks/check_sanitize_methods.rb +7 -7
- data/lib/brakeman/checks/check_secrets.rb +1 -1
- data/lib/brakeman/checks/check_select_tag.rb +2 -2
- data/lib/brakeman/checks/check_select_vulnerability.rb +3 -3
- data/lib/brakeman/checks/check_send.rb +1 -1
- data/lib/brakeman/checks/check_session_manipulation.rb +2 -2
- data/lib/brakeman/checks/check_session_settings.rb +3 -3
- data/lib/brakeman/checks/check_simple_format.rb +4 -4
- data/lib/brakeman/checks/check_single_quotes.rb +3 -3
- data/lib/brakeman/checks/check_skip_before_filter.rb +3 -3
- data/lib/brakeman/checks/check_sql.rb +9 -9
- data/lib/brakeman/checks/check_sql_cves.rb +2 -2
- data/lib/brakeman/checks/check_ssl_verify.rb +1 -1
- data/lib/brakeman/checks/check_strip_tags.rb +7 -7
- data/lib/brakeman/checks/check_symbol_dos.rb +2 -2
- data/lib/brakeman/checks/check_symbol_dos_cve.rb +1 -1
- data/lib/brakeman/checks/check_translate_bug.rb +3 -3
- data/lib/brakeman/checks/check_unsafe_reflection.rb +2 -2
- data/lib/brakeman/checks/check_unscoped_find.rb +1 -1
- data/lib/brakeman/checks/check_validation_regex.rb +1 -1
- data/lib/brakeman/checks/check_weak_hash.rb +6 -6
- data/lib/brakeman/checks/check_without_protection.rb +2 -2
- data/lib/brakeman/checks/check_xml_dos.rb +1 -1
- data/lib/brakeman/checks/check_yaml_parsing.rb +2 -2
- data/lib/brakeman/commandline.rb +2 -2
- data/lib/brakeman/options.rb +9 -5
- data/lib/brakeman/processors/alias_processor.rb +3 -1
- data/lib/brakeman/processors/lib/rails2_route_processor.rb +8 -8
- data/lib/brakeman/processors/lib/render_helper.rb +3 -3
- data/lib/brakeman/report.rb +9 -6
- data/lib/brakeman/report/report_base.rb +2 -1
- data/lib/brakeman/report/report_text.rb +4 -6
- data/lib/brakeman/rescanner.rb +8 -8
- data/lib/brakeman/tracker.rb +3 -3
- data/lib/brakeman/tracker/collection.rb +1 -1
- data/lib/brakeman/util.rb +5 -1
- data/lib/brakeman/version.rb +1 -1
- data/lib/brakeman/warning.rb +49 -21
- metadata +2 -2
@@ -62,7 +62,7 @@ module Brakeman::RenderHelper
|
|
62
62
|
template = @tracker.templates[name.to_sym]
|
63
63
|
unless template
|
64
64
|
Brakeman.debug "[Notice] No such template: #{name}"
|
65
|
-
return
|
65
|
+
return
|
66
66
|
end
|
67
67
|
|
68
68
|
template_env = only_ivars(:include_request_vars)
|
@@ -87,7 +87,7 @@ module Brakeman::RenderHelper
|
|
87
87
|
#nothing
|
88
88
|
elsif not template.name.to_s.match(/[^\/_][^\/]+$/)
|
89
89
|
#Don't do this for partials
|
90
|
-
|
90
|
+
|
91
91
|
process_layout
|
92
92
|
end
|
93
93
|
|
@@ -117,7 +117,7 @@ module Brakeman::RenderHelper
|
|
117
117
|
|
118
118
|
#Set original_line for values so it is clear
|
119
119
|
#that values came from another file
|
120
|
-
template_env.all.each do |
|
120
|
+
template_env.all.each do |_var, value|
|
121
121
|
unless value.original_line
|
122
122
|
#TODO: This has been broken for a while now and no one noticed
|
123
123
|
#so maybe we can skip it
|
data/lib/brakeman/report.rb
CHANGED
@@ -6,7 +6,7 @@ require 'brakeman/report/report_base'
|
|
6
6
|
class Brakeman::Report
|
7
7
|
attr_reader :tracker
|
8
8
|
|
9
|
-
VALID_FORMATS = [:to_html, :to_pdf, :to_csv, :to_json, :to_tabs, :to_hash, :to_s, :to_markdown, :to_codeclimate, :to_plain]
|
9
|
+
VALID_FORMATS = [:to_html, :to_pdf, :to_csv, :to_json, :to_tabs, :to_hash, :to_s, :to_markdown, :to_codeclimate, :to_plain, :to_text]
|
10
10
|
|
11
11
|
def initialize app_tree, tracker
|
12
12
|
@app_tree = app_tree
|
@@ -34,10 +34,10 @@ class Brakeman::Report
|
|
34
34
|
Brakeman::Report::Hash
|
35
35
|
when :to_markdown
|
36
36
|
return self.to_markdown
|
37
|
-
when :to_plain
|
37
|
+
when :to_plain, :to_text, :to_s
|
38
38
|
return self.to_plain
|
39
|
-
when :
|
40
|
-
return self.
|
39
|
+
when :to_table
|
40
|
+
return self.to_table
|
41
41
|
when :to_pdf
|
42
42
|
raise "PDF output is not yet supported."
|
43
43
|
else
|
@@ -64,7 +64,7 @@ class Brakeman::Report
|
|
64
64
|
generate Brakeman::Report::JSON
|
65
65
|
end
|
66
66
|
|
67
|
-
def
|
67
|
+
def to_table
|
68
68
|
require_report 'table'
|
69
69
|
generate Brakeman::Report::Table
|
70
70
|
end
|
@@ -74,11 +74,14 @@ class Brakeman::Report
|
|
74
74
|
generate Brakeman::Report::Markdown
|
75
75
|
end
|
76
76
|
|
77
|
-
def
|
77
|
+
def to_text
|
78
78
|
require_report 'text'
|
79
79
|
generate Brakeman::Report::Text
|
80
80
|
end
|
81
81
|
|
82
|
+
alias to_plain to_text
|
83
|
+
alias to_s to_text
|
84
|
+
|
82
85
|
def generate reporter
|
83
86
|
reporter.new(@app_tree, @tracker).generate_report
|
84
87
|
end
|
@@ -3,6 +3,7 @@ require 'brakeman/util'
|
|
3
3
|
require 'brakeman/version'
|
4
4
|
require 'brakeman/report/renderer'
|
5
5
|
require 'brakeman/processors/output_processor'
|
6
|
+
require 'brakeman/warning'
|
6
7
|
|
7
8
|
# Base class for report formats
|
8
9
|
class Brakeman::Report::Base
|
@@ -10,7 +11,7 @@ class Brakeman::Report::Base
|
|
10
11
|
|
11
12
|
attr_reader :tracker, :checks
|
12
13
|
|
13
|
-
TEXT_CONFIDENCE =
|
14
|
+
TEXT_CONFIDENCE = Brakeman::Warning::TEXT_CONFIDENCE
|
14
15
|
|
15
16
|
def initialize app_tree, tracker
|
16
17
|
@app_tree = app_tree
|
@@ -186,12 +186,10 @@ class Brakeman::Report::Text < Brakeman::Report::Base
|
|
186
186
|
# ONLY used for generate_controllers to avoid duplication
|
187
187
|
def render_array name, cols, values, locals
|
188
188
|
controllers = values.map do |name, parent, includes, routes|
|
189
|
-
[
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
label("Routes", routes)
|
194
|
-
]
|
189
|
+
c = [ label("Controller", name) ]
|
190
|
+
c << label("Parent", parent) unless parent.empty?
|
191
|
+
c << label("Includes", includes) unless includes.empty?
|
192
|
+
c << label("Routes", routes)
|
195
193
|
end
|
196
194
|
|
197
195
|
double_space "Controller Overview", controllers
|
data/lib/brakeman/rescanner.rb
CHANGED
@@ -143,7 +143,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
143
143
|
|
144
144
|
#Search for processed template and process it.
|
145
145
|
#Search for rendered versions of template and re-render (if necessary)
|
146
|
-
tracker.templates.each do |
|
146
|
+
tracker.templates.each do |_name, template|
|
147
147
|
if template.file == path or template.file.nil?
|
148
148
|
next unless template.render_path and template.name.to_sym == template_name.to_sym
|
149
149
|
|
@@ -204,7 +204,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
204
204
|
|
205
205
|
lib = nil
|
206
206
|
|
207
|
-
tracker.libs.each do |
|
207
|
+
tracker.libs.each do |_name, library|
|
208
208
|
if library.files.include?(path)
|
209
209
|
lib = library
|
210
210
|
break
|
@@ -267,7 +267,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
267
267
|
rendered_from_view = /^#{template_name}\.Template:(.+)/
|
268
268
|
|
269
269
|
#Remove any rendered versions, or partials rendered from it
|
270
|
-
tracker.templates.delete_if do |
|
270
|
+
tracker.templates.delete_if do |_name, template|
|
271
271
|
template.file == path or template.name.to_sym == template_name.to_sym
|
272
272
|
end
|
273
273
|
end
|
@@ -275,7 +275,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
275
275
|
def rescan_deleted_lib path
|
276
276
|
deleted_lib = nil
|
277
277
|
|
278
|
-
tracker.libs.delete_if do |
|
278
|
+
tracker.libs.delete_if do |_name, lib|
|
279
279
|
if lib.files.include?(path)
|
280
280
|
deleted_lib = lib
|
281
281
|
true
|
@@ -295,7 +295,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
295
295
|
deleted = false
|
296
296
|
|
297
297
|
[:controllers, :models, :libs].each do |collection|
|
298
|
-
tracker.send(collection).delete_if do |
|
298
|
+
tracker.send(collection).delete_if do |_name, data|
|
299
299
|
if data.files.include?(path)
|
300
300
|
deleted = true
|
301
301
|
true
|
@@ -303,7 +303,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
303
303
|
end
|
304
304
|
end
|
305
305
|
|
306
|
-
tracker.templates.delete_if do |
|
306
|
+
tracker.templates.delete_if do |_name, data|
|
307
307
|
if data.file == path
|
308
308
|
deleted = true
|
309
309
|
true
|
@@ -340,14 +340,14 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
340
340
|
def rescan_mixin lib
|
341
341
|
method_names = []
|
342
342
|
|
343
|
-
lib.each_method do |name,
|
343
|
+
lib.each_method do |name, _meth|
|
344
344
|
method_names << name
|
345
345
|
end
|
346
346
|
|
347
347
|
to_rescan = []
|
348
348
|
|
349
349
|
#Rescan controllers that mixed in library
|
350
|
-
tracker.controllers.each do |
|
350
|
+
tracker.controllers.each do |_name, controller|
|
351
351
|
if controller.includes.include? lib.name
|
352
352
|
controller.files.each do |path|
|
353
353
|
unless @paths.include? path
|
data/lib/brakeman/tracker.rb
CHANGED
@@ -219,7 +219,7 @@ class Brakeman::Tracker
|
|
219
219
|
finder.process_source definition, :class => set_name, :file => file
|
220
220
|
end
|
221
221
|
|
222
|
-
self.each_template do |
|
222
|
+
self.each_template do |_name, template|
|
223
223
|
finder.process_source template.src, :template => template, :file => template.file
|
224
224
|
end
|
225
225
|
|
@@ -270,7 +270,7 @@ class Brakeman::Tracker
|
|
270
270
|
end
|
271
271
|
|
272
272
|
if locations.include? :templates
|
273
|
-
self.each_template do |
|
273
|
+
self.each_template do |_name, template|
|
274
274
|
finder.process_source template.src, :template => template, :file => template.file
|
275
275
|
end
|
276
276
|
end
|
@@ -283,7 +283,7 @@ class Brakeman::Tracker
|
|
283
283
|
#controllers (but not those rendered from other templates)
|
284
284
|
def reset_templates options = { :only_rendered => false }
|
285
285
|
if options[:only_rendered]
|
286
|
-
@templates.delete_if do |
|
286
|
+
@templates.delete_if do |_name, template|
|
287
287
|
template.rendered_from_controller?
|
288
288
|
end
|
289
289
|
else
|
data/lib/brakeman/util.rb
CHANGED
@@ -18,10 +18,14 @@ module Brakeman::Util
|
|
18
18
|
|
19
19
|
COOKIES = Sexp.new(:call, nil, :cookies)
|
20
20
|
|
21
|
+
REQUEST_COOKIES = s(:call, s(:call, nil, :request), :cookies)
|
22
|
+
|
21
23
|
SESSION = Sexp.new(:call, nil, :session)
|
22
24
|
|
23
25
|
ALL_PARAMETERS = Set[PARAMETERS, QUERY_PARAMETERS, PATH_PARAMETERS, REQUEST_PARAMETERS, REQUEST_PARAMS]
|
24
26
|
|
27
|
+
ALL_COOKIES = Set[COOKIES, REQUEST_COOKIES]
|
28
|
+
|
25
29
|
#Convert a string from "something_like_this" to "SomethingLikeThis"
|
26
30
|
#
|
27
31
|
#Taken from ActiveSupport.
|
@@ -229,7 +233,7 @@ module Brakeman::Util
|
|
229
233
|
|
230
234
|
def cookies? exp
|
231
235
|
if exp.is_a? Sexp
|
232
|
-
return true if exp.node_type == :cookies or exp
|
236
|
+
return true if exp.node_type == :cookies or ALL_COOKIES.include? exp
|
233
237
|
|
234
238
|
if call? exp
|
235
239
|
if cookies? exp[1]
|
data/lib/brakeman/version.rb
CHANGED
data/lib/brakeman/warning.rb
CHANGED
@@ -10,27 +10,39 @@ class Brakeman::Warning
|
|
10
10
|
|
11
11
|
attr_accessor :code, :context, :file, :message, :relative_path
|
12
12
|
|
13
|
-
TEXT_CONFIDENCE =
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
+
}
|
34
46
|
|
35
47
|
#+options[:result]+ can be a result from Tracker#find_call. Otherwise, it can be +nil+.
|
36
48
|
def initialize options = {}
|
@@ -40,6 +52,8 @@ class Brakeman::Warning
|
|
40
52
|
self.instance_variable_set(var, options[key])
|
41
53
|
end
|
42
54
|
|
55
|
+
self.confidence = options[:confidence]
|
56
|
+
|
43
57
|
result = options[:result]
|
44
58
|
if result
|
45
59
|
@code ||= result[:call]
|
@@ -113,6 +127,20 @@ class Brakeman::Warning
|
|
113
127
|
self.hash == other_warning.hash
|
114
128
|
end
|
115
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
|
+
|
116
144
|
#Returns name of a view, including where it was rendered from
|
117
145
|
def view_name(include_renderer = true)
|
118
146
|
if called_from and include_renderer
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brakeman-min
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Collins
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
11
|
- brakeman-public_cert.pem
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-09-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|