brakeman 3.0.1 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGES +16 -0
- data/lib/brakeman.rb +0 -2
- data/lib/brakeman/checks/check_cross_site_scripting.rb +13 -0
- data/lib/brakeman/checks/check_mass_assignment.rb +2 -0
- data/lib/brakeman/checks/check_regex_dos.rb +1 -1
- data/lib/brakeman/checks/check_simple_format.rb +0 -1
- data/lib/brakeman/checks/check_sql.rb +2 -2
- data/lib/brakeman/parsers/template_parser.rb +1 -1
- data/lib/brakeman/processors/alias_processor.rb +2 -2
- data/lib/brakeman/processors/controller_alias_processor.rb +3 -1
- data/lib/brakeman/processors/lib/render_path.rb +100 -0
- data/lib/brakeman/processors/model_processor.rb +2 -1
- data/lib/brakeman/processors/template_alias_processor.rb +4 -3
- data/lib/brakeman/report/report_html.rb +1 -1
- data/lib/brakeman/rescanner.rb +9 -20
- data/lib/brakeman/tracker.rb +2 -3
- data/lib/brakeman/util.rb +2 -0
- data/lib/brakeman/version.rb +1 -1
- metadata +246 -219
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d05a06e338f3309b5430c67decda380b5bccd1e9
|
4
|
+
data.tar.gz: 79f70db112bdbcfa605b841f8375adeff1480220
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2b2d46615e3e2c2510db8d14eebea2c9da264eb2580e3307f2b7a176d4718447a637ba30898d009871df313dc775d9f0d0c0a17c8993db08b0cd1d947f8fb490
|
7
|
+
data.tar.gz: f046fd2458e86d5986149e3b6af15b611e992cae6c9cb5b65624a56ea1ead3faddc55b04e989f0060cf6445e1f1cf2b2a912dc00172faf207f3ea4a88bf7f6ab
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGES
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
# 3.0.2
|
2
|
+
|
3
|
+
* Alias process methods called in class scope on models
|
4
|
+
* Treat primary_key, table_name_prefix, table_name_suffix as safe in SQL
|
5
|
+
* Fix using --compare and --add-checks-path together
|
6
|
+
* Avoid warning about mass assignment with string literals
|
7
|
+
* Only report original regex DoS locations
|
8
|
+
* Improve render path information implementation
|
9
|
+
* Report correct file for simple_format usage CVE warning
|
10
|
+
* Remove URI.escape from HTML reports with GitHub repos
|
11
|
+
* Update ruby_parser to ~> 3.6.2
|
12
|
+
* Remove formatting newlines in HAML template output
|
13
|
+
* Ignore case value in XSS checks
|
14
|
+
* Fix CSV output when there are no warnings
|
15
|
+
* Handle processing of explictly shadowed block arguments
|
16
|
+
|
1
17
|
# 3.0.1
|
2
18
|
|
3
19
|
* Avoid protect_from_forgery warning unless ApplicationController inherits from ActionController::Base
|
data/lib/brakeman.rb
CHANGED
@@ -399,8 +399,6 @@ module Brakeman
|
|
399
399
|
require 'brakeman/differ'
|
400
400
|
raise ArgumentError.new("Comparison file doesn't exist") unless File.exists? options[:previous_results_json]
|
401
401
|
|
402
|
-
add_external_checks options
|
403
|
-
|
404
402
|
begin
|
405
403
|
previous_results = MultiJson.load(File.read(options[:previous_results_json]), :symbolize_keys => true)[:warnings]
|
406
404
|
rescue MultiJson::DecodeError
|
@@ -260,6 +260,19 @@ class Brakeman::CheckCrossSiteScripting < Brakeman::BaseCheck
|
|
260
260
|
exp
|
261
261
|
end
|
262
262
|
|
263
|
+
def process_case exp
|
264
|
+
#Ignore user input in case value
|
265
|
+
#TODO: also ignore when values
|
266
|
+
|
267
|
+
current = 2
|
268
|
+
while current < exp.length
|
269
|
+
process exp[current] if exp[current]
|
270
|
+
current += 1
|
271
|
+
end
|
272
|
+
|
273
|
+
exp
|
274
|
+
end
|
275
|
+
|
263
276
|
def setup
|
264
277
|
@ignore_methods = Set[:button_to, :check_box, :content_tag, :escapeHTML, :escape_once,
|
265
278
|
:field_field, :fields_for, :h, :hidden_field,
|
@@ -26,7 +26,7 @@ class Brakeman::CheckRegexDoS < Brakeman::BaseCheck
|
|
26
26
|
|
27
27
|
#Warns if regex includes user input
|
28
28
|
def process_result result
|
29
|
-
return if duplicate? result
|
29
|
+
return if duplicate? result or result[:call].original_line
|
30
30
|
add_result result
|
31
31
|
|
32
32
|
call = result[:call]
|
@@ -53,7 +53,6 @@ class Brakeman::CheckSimpleFormat < Brakeman::CheckCrossSiteScripting
|
|
53
53
|
:warning_code => :CVE_2013_6416_call,
|
54
54
|
:message => "Values passed to simple_format are not safe in Rails #{@tracker.config[:rails_version]}",
|
55
55
|
:confidence => CONFIDENCE[:high],
|
56
|
-
:gem_info => gemfile_or_environment,
|
57
56
|
:link_path => "https://groups.google.com/d/msg/ruby-security-ann/5ZI1-H5OoIM/ZNq4FoR2GnIJ",
|
58
57
|
:user_input => match.match
|
59
58
|
end
|
@@ -549,7 +549,7 @@ class Brakeman::CheckSQL < Brakeman::BaseCheck
|
|
549
549
|
:sanitize_sql, :sanitize_sql_array, :sanitize_sql_for_assignment,
|
550
550
|
:sanitize_sql_for_conditions, :sanitize_sql_hash,
|
551
551
|
:sanitize_sql_hash_for_assignment, :sanitize_sql_hash_for_conditions,
|
552
|
-
:to_sql, :sanitize, :exists]
|
552
|
+
:to_sql, :sanitize, :exists, :primary_key, :table_name_prefix, :table_name_suffix]
|
553
553
|
|
554
554
|
def safe_value? exp
|
555
555
|
return true unless sexp? exp
|
@@ -558,7 +558,7 @@ class Brakeman::CheckSQL < Brakeman::BaseCheck
|
|
558
558
|
when :str, :lit, :const, :colon2, :nil, :true, :false
|
559
559
|
true
|
560
560
|
when :call
|
561
|
-
if exp.method == :to_s
|
561
|
+
if exp.method == :to_s or exp.method == :to_sym
|
562
562
|
safe_value? exp.target
|
563
563
|
else
|
564
564
|
IGNORE_METHODS_IN_SQL.include? exp.method or
|
@@ -75,7 +75,7 @@ module Brakeman
|
|
75
75
|
Brakeman.load_brakeman_dependency 'sass'
|
76
76
|
|
77
77
|
Haml::Engine.new(text,
|
78
|
-
:escape_html => !!tracker.config[:escape_html]).precompiled
|
78
|
+
:escape_html => !!tracker.config[:escape_html]).precompiled.gsub(/([^\\])\\n/, '\1')
|
79
79
|
end
|
80
80
|
|
81
81
|
def parse_slim text
|
@@ -179,10 +179,10 @@ class Brakeman::AliasProcessor < Brakeman::SexpProcessor
|
|
179
179
|
exp.block_args.each do |e|
|
180
180
|
#Force block arg(s) to be local
|
181
181
|
if node_type? e, :lasgn
|
182
|
-
env.current[Sexp.new(:lvar, e.lhs)] = e.
|
182
|
+
env.current[Sexp.new(:lvar, e.lhs)] = Sexp.new(:lvar, e.lhs)
|
183
183
|
elsif node_type? e, :kwarg
|
184
184
|
env.current[Sexp.new(:lvar, e[1])] = e[2]
|
185
|
-
elsif node_type? e, :masgn
|
185
|
+
elsif node_type? e, :masgn, :shadow
|
186
186
|
e[1..-1].each do |var|
|
187
187
|
local = Sexp.new(:lvar, var)
|
188
188
|
env.current[local] = local
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'brakeman/processors/alias_processor'
|
2
2
|
require 'brakeman/processors/lib/render_helper'
|
3
|
+
require 'brakeman/processors/lib/render_path'
|
3
4
|
require 'brakeman/processors/lib/find_return_value'
|
4
5
|
|
5
6
|
#Processes aliasing in controllers, but includes following
|
@@ -170,7 +171,8 @@ class Brakeman::ControllerAliasProcessor < Brakeman::AliasProcessor
|
|
170
171
|
|
171
172
|
#Process template and add the current class and method name as called_from info
|
172
173
|
def process_template name, args
|
173
|
-
|
174
|
+
render_path = Brakeman::RenderPath.new.add_controller_render(@current_class, @current_method)
|
175
|
+
super name, args, render_path
|
174
176
|
end
|
175
177
|
|
176
178
|
#Turns a method name into a template name
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module Brakeman
|
2
|
+
class RenderPath
|
3
|
+
attr_reader :path
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@path = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_controller_render controller_name, method_name
|
10
|
+
method_name ||= ""
|
11
|
+
|
12
|
+
@path << { :type => :controller,
|
13
|
+
:class => controller_name.to_sym,
|
14
|
+
:method => method_name.to_sym }
|
15
|
+
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_template_render template_name
|
20
|
+
@path << { :type => :template,
|
21
|
+
:name => template_name.to_sym }
|
22
|
+
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def include_template? name
|
27
|
+
name = name.to_sym
|
28
|
+
|
29
|
+
@path.any? do |loc|
|
30
|
+
loc[:type] == :template and loc[:name] == name
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def include_controller? klass
|
35
|
+
klass = klass.to_sym
|
36
|
+
|
37
|
+
@path.any? do |loc|
|
38
|
+
loc[:type] == :controller and loc[:class] == klass
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def include_any_method? method_names
|
43
|
+
names = method_names.map(&:to_sym)
|
44
|
+
|
45
|
+
@path.any? do |loc|
|
46
|
+
loc[:type] == :controller and names.include? loc[:method]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def rendered_from_controller?
|
51
|
+
@path.any? do |loc|
|
52
|
+
loc[:type] == :controller
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def each &block
|
57
|
+
@path.each &block
|
58
|
+
end
|
59
|
+
|
60
|
+
def join *args
|
61
|
+
self.to_a.join *args
|
62
|
+
end
|
63
|
+
|
64
|
+
def length
|
65
|
+
@path.length
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_a
|
69
|
+
@path.map do |loc|
|
70
|
+
case loc[:type]
|
71
|
+
when :template
|
72
|
+
"Template:#{loc[:name]}"
|
73
|
+
when :controller
|
74
|
+
"#{loc[:class]}##{loc[:method]}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def last
|
80
|
+
self.to_a.last
|
81
|
+
end
|
82
|
+
|
83
|
+
def to_s
|
84
|
+
self.to_a.to_s
|
85
|
+
end
|
86
|
+
|
87
|
+
def to_sym
|
88
|
+
self.to_s.to_sym
|
89
|
+
end
|
90
|
+
|
91
|
+
def to_json *args
|
92
|
+
MultiJson.dump(self.to_a)
|
93
|
+
end
|
94
|
+
|
95
|
+
def initialize_copy original
|
96
|
+
@path = original.path.dup
|
97
|
+
self
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'set'
|
2
2
|
require 'brakeman/processors/alias_processor'
|
3
3
|
require 'brakeman/processors/lib/render_helper'
|
4
|
+
require 'brakeman/processors/lib/render_path'
|
4
5
|
require 'brakeman/tracker'
|
5
6
|
|
6
7
|
#Processes aliasing in templates.
|
@@ -19,14 +20,14 @@ class Brakeman::TemplateAliasProcessor < Brakeman::AliasProcessor
|
|
19
20
|
#Process template
|
20
21
|
def process_template name, args
|
21
22
|
if @called_from
|
22
|
-
|
23
|
+
if @called_from.include_template? name
|
23
24
|
Brakeman.debug "Skipping circular render from #{@template[:name]} to #{name}"
|
24
25
|
return
|
25
26
|
end
|
26
27
|
|
27
|
-
super name, args, @called_from
|
28
|
+
super name, args, @called_from.dup.add_template_render(@template[:name])
|
28
29
|
else
|
29
|
-
super name, args,
|
30
|
+
super name, args, Brakeman::RenderPath.new.add_template_render(@template[:name])
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
@@ -195,7 +195,7 @@ class Brakeman::Report::HTML < Brakeman::Report::Base
|
|
195
195
|
|
196
196
|
if warning.file
|
197
197
|
github_url = github_url warning.file, warning.line
|
198
|
-
message.gsub!(/(near line \d+)/, "<a href
|
198
|
+
message.gsub!(/(near line \d+)/, "<a href=\"#{github_url}\" target='_blank'>\\1</a>") if github_url
|
199
199
|
end
|
200
200
|
|
201
201
|
if @highlight_user_input and warning.user_input
|
data/lib/brakeman/rescanner.rb
CHANGED
@@ -113,7 +113,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
113
113
|
if controller[:files].include?(path)
|
114
114
|
tracker.templates.each do |template_name, template|
|
115
115
|
next unless template[:caller]
|
116
|
-
|
116
|
+
if template[:caller].include_controller? name
|
117
117
|
tracker.reset_template template_name
|
118
118
|
end
|
119
119
|
end
|
@@ -142,21 +142,18 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
142
142
|
|
143
143
|
rescan = Set.new
|
144
144
|
|
145
|
-
template_matcher = /^Template:(.+)/
|
146
|
-
controller_matcher = /^(.+Controller)#(.+)/
|
147
|
-
template_name_matcher = /^#{template_name}\./
|
148
|
-
|
149
145
|
#Search for processed template and process it.
|
150
146
|
#Search for rendered versions of template and re-render (if necessary)
|
151
147
|
tracker.templates.each do |name, template|
|
152
148
|
if template[:file] == path or template[:file].nil?
|
153
|
-
next unless template[:caller] and name.
|
149
|
+
next unless template[:caller] and template[:name].to_sym == template_name.to_sym
|
154
150
|
|
155
151
|
template[:caller].each do |from|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
152
|
+
case from[:type]
|
153
|
+
when :template
|
154
|
+
rescan << [:template, from[:name]]
|
155
|
+
when :controller
|
156
|
+
rescan << [:controller, from[:class], from[:method]]
|
160
157
|
end
|
161
158
|
end
|
162
159
|
end
|
@@ -272,13 +269,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
272
269
|
|
273
270
|
#Remove any rendered versions, or partials rendered from it
|
274
271
|
tracker.templates.delete_if do |name, template|
|
275
|
-
|
276
|
-
true
|
277
|
-
elsif template[:file].nil?
|
278
|
-
name = name.to_s
|
279
|
-
|
280
|
-
name.match(rendered_from_controller) or name.match(rendered_from_view)
|
281
|
-
end
|
272
|
+
template[:file] == path or template[:name].to_sym == template_name.to_sym
|
282
273
|
end
|
283
274
|
end
|
284
275
|
|
@@ -356,8 +347,6 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
356
347
|
end
|
357
348
|
end
|
358
349
|
|
359
|
-
method_matcher = /##{method_names.map {|n| Regexp.escape(n.to_s)}.join('|')}$/
|
360
|
-
|
361
350
|
to_rescan = []
|
362
351
|
|
363
352
|
#Rescan controllers that mixed in library
|
@@ -384,7 +373,7 @@ class Brakeman::Rescanner < Brakeman::Scanner
|
|
384
373
|
tracker.templates.each do |name, template|
|
385
374
|
next unless template[:caller]
|
386
375
|
|
387
|
-
|
376
|
+
if template[:caller].include_any_method? method_names
|
388
377
|
name.to_s.match /^([^.]+)/
|
389
378
|
|
390
379
|
original = tracker.templates[$1.to_sym]
|
data/lib/brakeman/tracker.rb
CHANGED
@@ -257,7 +257,7 @@ class Brakeman::Tracker
|
|
257
257
|
def reset_templates options = { :only_rendered => false }
|
258
258
|
if options[:only_rendered]
|
259
259
|
@templates.delete_if do |name, template|
|
260
|
-
|
260
|
+
template[:caller] and template[:caller].rendered_from_controller?
|
261
261
|
end
|
262
262
|
else
|
263
263
|
@templates = {}
|
@@ -311,11 +311,10 @@ class Brakeman::Tracker
|
|
311
311
|
@controllers.each do |name, controller|
|
312
312
|
if controller[:files].include?(path)
|
313
313
|
controller_name = name
|
314
|
-
template_matcher = /^#{name}#/
|
315
314
|
|
316
315
|
#Remove templates rendered from this controller
|
317
316
|
@templates.each do |template_name, template|
|
318
|
-
if template[:caller] and
|
317
|
+
if template[:caller] and template[:caller].include_controller? name
|
319
318
|
reset_template template_name
|
320
319
|
@call_index.remove_template_indexes template_name
|
321
320
|
end
|
data/lib/brakeman/util.rb
CHANGED
@@ -423,6 +423,8 @@ module Brakeman::Util
|
|
423
423
|
|
424
424
|
# rely on Terminal::Table to build the structure, extract the data out in CSV format
|
425
425
|
def table_to_csv table
|
426
|
+
return "" unless table
|
427
|
+
|
426
428
|
Brakeman.load_brakeman_dependency 'terminal-table'
|
427
429
|
output = CSV.generate_line(table.headings.cells.map{|cell| cell.to_s.strip})
|
428
430
|
table.rows.each do |row|
|
data/lib/brakeman/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: brakeman
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 3.0.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.2
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Justin Collins
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
|
-
cert_chain:
|
10
|
+
cert_chain:
|
12
11
|
- |
|
13
12
|
-----BEGIN CERTIFICATE-----
|
14
13
|
MIIDijCCAnKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQ8wDQYDVQQDDAZqdXN0
|
@@ -31,295 +30,323 @@ cert_chain:
|
|
31
30
|
bxoxp9KNxkO+709YwLO1rYfmcGghg8WV6MYz3PSHdlgWF4KrjRFc/00hXHqVk0Sf
|
32
31
|
mREEv2LPwHH2SgpSSab+iawnX4l6lV8XcIrmp/HSMySsPVFBeOmB0c05LpEN8w==
|
33
32
|
-----END CERTIFICATE-----
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
- !ruby/object:Gem::Dependency
|
33
|
+
date: 2015-03-09 00:00:00.000000000 Z
|
34
|
+
dependencies:
|
35
|
+
- !ruby/object:Gem::Dependency
|
38
36
|
name: test-unit
|
39
|
-
|
40
|
-
|
41
|
-
none: false
|
42
|
-
requirements:
|
37
|
+
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
43
39
|
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
46
42
|
type: :development
|
47
|
-
version_requirements: *id001
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: ruby_parser
|
50
43
|
prerelease: false
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: ruby_parser
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 3.6.2
|
57
56
|
type: :runtime
|
58
|
-
version_requirements: *id002
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: ruby2ruby
|
61
57
|
prerelease: false
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 3.6.2
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: ruby2ruby
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
67
69
|
version: 2.1.1
|
68
70
|
type: :runtime
|
69
|
-
version_requirements: *id003
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: terminal-table
|
72
71
|
prerelease: false
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.1.1
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
name: terminal-table
|
79
|
+
requirement: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '1.4'
|
79
84
|
type: :runtime
|
80
|
-
version_requirements: *id004
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: fastercsv
|
83
85
|
prerelease: false
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
86
|
+
version_requirements: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '1.4'
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: fastercsv
|
93
|
+
requirement: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '1.5'
|
90
98
|
type: :runtime
|
91
|
-
version_requirements: *id005
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: highline
|
94
99
|
prerelease: false
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
+
version_requirements: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '1.5'
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: highline
|
107
|
+
requirement: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
100
111
|
version: 1.6.20
|
101
112
|
type: :runtime
|
102
|
-
version_requirements: *id006
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: erubis
|
105
113
|
prerelease: false
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
114
|
+
version_requirements: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 1.6.20
|
119
|
+
- !ruby/object:Gem::Dependency
|
120
|
+
name: erubis
|
121
|
+
requirement: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '2.6'
|
112
126
|
type: :runtime
|
113
|
-
version_requirements: *id007
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
|
-
name: haml
|
116
127
|
prerelease: false
|
117
|
-
|
118
|
-
|
119
|
-
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '2.6'
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: haml
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
120
137
|
- - ">="
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version:
|
123
|
-
- - <
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version:
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '3.0'
|
140
|
+
- - "<"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '5.0'
|
126
143
|
type: :runtime
|
127
|
-
version_requirements: *id008
|
128
|
-
- !ruby/object:Gem::Dependency
|
129
|
-
name: sass
|
130
144
|
prerelease: false
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '3.0'
|
150
|
+
- - "<"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '5.0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: sass
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '3.0'
|
137
160
|
type: :runtime
|
138
|
-
version_requirements: *id009
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: multi_json
|
141
161
|
prerelease: false
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '3.0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: multi_json
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '1.2'
|
148
174
|
type: :runtime
|
149
|
-
|
150
|
-
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '1.2'
|
181
|
+
description: Brakeman detects security vulnerabilities in Ruby on Rails applications
|
182
|
+
via static analysis.
|
151
183
|
email: gem@brakeman.org
|
152
|
-
executables:
|
184
|
+
executables:
|
153
185
|
- brakeman
|
154
186
|
extensions: []
|
155
|
-
|
156
187
|
extra_rdoc_files: []
|
157
|
-
|
158
|
-
files:
|
159
|
-
- bin/brakeman
|
188
|
+
files:
|
160
189
|
- CHANGES
|
161
|
-
- WARNING_TYPES
|
162
190
|
- FEATURES
|
163
191
|
- README.md
|
192
|
+
- WARNING_TYPES
|
193
|
+
- bin/brakeman
|
164
194
|
- lib/brakeman.rb
|
165
|
-
- lib/ruby_parser/bm_sexp.rb
|
166
|
-
- lib/ruby_parser/bm_sexp_processor.rb
|
167
195
|
- lib/brakeman/app_tree.rb
|
168
|
-
- lib/brakeman/call_index.rb
|
169
196
|
- lib/brakeman/brakeman.rake
|
170
|
-
- lib/brakeman/
|
171
|
-
- lib/brakeman/
|
172
|
-
- lib/brakeman/
|
173
|
-
- lib/brakeman/
|
174
|
-
- lib/brakeman/checks/
|
175
|
-
- lib/brakeman/checks/
|
176
|
-
- lib/brakeman/checks/
|
177
|
-
- lib/brakeman/checks/
|
178
|
-
- lib/brakeman/checks/
|
179
|
-
- lib/brakeman/checks/check_model_serialize.rb
|
180
|
-
- lib/brakeman/checks/check_regex_dos.rb
|
181
|
-
- lib/brakeman/checks/check_validation_regex.rb
|
182
|
-
- lib/brakeman/checks/check_single_quotes.rb
|
197
|
+
- lib/brakeman/call_index.rb
|
198
|
+
- lib/brakeman/checks.rb
|
199
|
+
- lib/brakeman/checks/base_check.rb
|
200
|
+
- lib/brakeman/checks/check_basic_auth.rb
|
201
|
+
- lib/brakeman/checks/check_content_tag.rb
|
202
|
+
- lib/brakeman/checks/check_create_with.rb
|
203
|
+
- lib/brakeman/checks/check_cross_site_scripting.rb
|
204
|
+
- lib/brakeman/checks/check_default_routes.rb
|
205
|
+
- lib/brakeman/checks/check_deserialize.rb
|
183
206
|
- lib/brakeman/checks/check_detailed_exceptions.rb
|
184
|
-
- lib/brakeman/checks/
|
185
|
-
- lib/brakeman/checks/
|
186
|
-
- lib/brakeman/checks/
|
187
|
-
- lib/brakeman/checks/check_symbol_dos.rb
|
207
|
+
- lib/brakeman/checks/check_digest_dos.rb
|
208
|
+
- lib/brakeman/checks/check_escape_function.rb
|
209
|
+
- lib/brakeman/checks/check_evaluation.rb
|
188
210
|
- lib/brakeman/checks/check_execute.rb
|
189
|
-
- lib/brakeman/checks/
|
190
|
-
- lib/brakeman/checks/check_skip_before_filter.rb
|
191
|
-
- lib/brakeman/checks/check_default_routes.rb
|
211
|
+
- lib/brakeman/checks/check_file_access.rb
|
192
212
|
- lib/brakeman/checks/check_file_disclosure.rb
|
193
|
-
- lib/brakeman/checks/check_basic_auth.rb
|
194
|
-
- lib/brakeman/checks/check_render.rb
|
195
|
-
- lib/brakeman/checks/base_check.rb
|
196
|
-
- lib/brakeman/checks/check_mass_assignment.rb
|
197
|
-
- lib/brakeman/checks/check_sanitize_methods.rb
|
198
|
-
- lib/brakeman/checks/check_simple_format.rb
|
199
|
-
- lib/brakeman/checks/check_select_vulnerability.rb
|
200
|
-
- lib/brakeman/checks/check_send_file.rb
|
201
|
-
- lib/brakeman/checks/check_response_splitting.rb
|
202
|
-
- lib/brakeman/checks/check_ssl_verify.rb
|
203
213
|
- lib/brakeman/checks/check_filter_skipping.rb
|
214
|
+
- lib/brakeman/checks/check_forgery_setting.rb
|
215
|
+
- lib/brakeman/checks/check_header_dos.rb
|
216
|
+
- lib/brakeman/checks/check_i18n_xss.rb
|
204
217
|
- lib/brakeman/checks/check_jruby_xml.rb
|
205
|
-
- lib/brakeman/checks/check_escape_function.rb
|
206
|
-
- lib/brakeman/checks/check_strip_tags.rb
|
207
218
|
- lib/brakeman/checks/check_json_parsing.rb
|
208
|
-
- lib/brakeman/checks/
|
209
|
-
- lib/brakeman/checks/check_translate_bug.rb
|
210
|
-
- lib/brakeman/checks/check_quote_table_name.rb
|
211
|
-
- lib/brakeman/checks/check_sql.rb
|
212
|
-
- lib/brakeman/checks/check_yaml_parsing.rb
|
213
|
-
- lib/brakeman/checks/check_render_inline.rb
|
214
|
-
- lib/brakeman/checks/check_cross_site_scripting.rb
|
219
|
+
- lib/brakeman/checks/check_link_to.rb
|
215
220
|
- lib/brakeman/checks/check_link_to_href.rb
|
216
|
-
- lib/brakeman/checks/
|
221
|
+
- lib/brakeman/checks/check_mail_to.rb
|
222
|
+
- lib/brakeman/checks/check_mass_assignment.rb
|
223
|
+
- lib/brakeman/checks/check_model_attr_accessible.rb
|
217
224
|
- lib/brakeman/checks/check_model_attributes.rb
|
218
|
-
- lib/brakeman/checks/
|
219
|
-
- lib/brakeman/checks/check_content_tag.rb
|
220
|
-
- lib/brakeman/checks/check_symbol_dos_cve.rb
|
225
|
+
- lib/brakeman/checks/check_model_serialize.rb
|
221
226
|
- lib/brakeman/checks/check_nested_attributes.rb
|
227
|
+
- lib/brakeman/checks/check_number_to_currency.rb
|
228
|
+
- lib/brakeman/checks/check_quote_table_name.rb
|
229
|
+
- lib/brakeman/checks/check_redirect.rb
|
230
|
+
- lib/brakeman/checks/check_regex_dos.rb
|
231
|
+
- lib/brakeman/checks/check_render.rb
|
232
|
+
- lib/brakeman/checks/check_render_dos.rb
|
233
|
+
- lib/brakeman/checks/check_render_inline.rb
|
234
|
+
- lib/brakeman/checks/check_response_splitting.rb
|
235
|
+
- lib/brakeman/checks/check_safe_buffer_manipulation.rb
|
236
|
+
- lib/brakeman/checks/check_sanitize_methods.rb
|
237
|
+
- lib/brakeman/checks/check_select_tag.rb
|
238
|
+
- lib/brakeman/checks/check_select_vulnerability.rb
|
222
239
|
- lib/brakeman/checks/check_send.rb
|
223
|
-
- lib/brakeman/checks/
|
224
|
-
- lib/brakeman/checks/
|
240
|
+
- lib/brakeman/checks/check_send_file.rb
|
241
|
+
- lib/brakeman/checks/check_session_settings.rb
|
242
|
+
- lib/brakeman/checks/check_simple_format.rb
|
243
|
+
- lib/brakeman/checks/check_single_quotes.rb
|
244
|
+
- lib/brakeman/checks/check_skip_before_filter.rb
|
245
|
+
- lib/brakeman/checks/check_sql.rb
|
225
246
|
- lib/brakeman/checks/check_sql_cves.rb
|
226
|
-
- lib/brakeman/checks/
|
247
|
+
- lib/brakeman/checks/check_ssl_verify.rb
|
248
|
+
- lib/brakeman/checks/check_strip_tags.rb
|
249
|
+
- lib/brakeman/checks/check_symbol_dos.rb
|
250
|
+
- lib/brakeman/checks/check_symbol_dos_cve.rb
|
251
|
+
- lib/brakeman/checks/check_translate_bug.rb
|
252
|
+
- lib/brakeman/checks/check_unsafe_reflection.rb
|
253
|
+
- lib/brakeman/checks/check_unscoped_find.rb
|
254
|
+
- lib/brakeman/checks/check_validation_regex.rb
|
227
255
|
- lib/brakeman/checks/check_without_protection.rb
|
228
|
-
- lib/brakeman/checks/
|
229
|
-
- lib/brakeman/
|
230
|
-
- lib/brakeman/checks/check_link_to.rb
|
231
|
-
- lib/brakeman/checks/check_render_dos.rb
|
232
|
-
- lib/brakeman/processor.rb
|
256
|
+
- lib/brakeman/checks/check_yaml_parsing.rb
|
257
|
+
- lib/brakeman/differ.rb
|
233
258
|
- lib/brakeman/file_parser.rb
|
234
|
-
- lib/brakeman/version.rb
|
235
259
|
- lib/brakeman/format/style.css
|
236
|
-
- lib/brakeman/
|
237
|
-
- lib/brakeman/tracker.rb
|
238
|
-
- lib/brakeman/parsers/rails3_erubis.rb
|
260
|
+
- lib/brakeman/options.rb
|
239
261
|
- lib/brakeman/parsers/rails2_erubis.rb
|
240
|
-
- lib/brakeman/parsers/template_parser.rb
|
241
262
|
- lib/brakeman/parsers/rails2_xss_plugin_erubis.rb
|
242
|
-
- lib/brakeman/
|
243
|
-
- lib/brakeman/
|
244
|
-
- lib/brakeman/
|
263
|
+
- lib/brakeman/parsers/rails3_erubis.rb
|
264
|
+
- lib/brakeman/parsers/template_parser.rb
|
265
|
+
- lib/brakeman/processor.rb
|
245
266
|
- lib/brakeman/processors/alias_processor.rb
|
246
|
-
- lib/brakeman/processors/
|
247
|
-
- lib/brakeman/processors/template_processor.rb
|
248
|
-
- lib/brakeman/processors/erubis_template_processor.rb
|
249
|
-
- lib/brakeman/processors/erb_template_processor.rb
|
250
|
-
- lib/brakeman/processors/model_processor.rb
|
251
|
-
- lib/brakeman/processors/template_alias_processor.rb
|
267
|
+
- lib/brakeman/processors/base_processor.rb
|
252
268
|
- lib/brakeman/processors/config_processor.rb
|
253
269
|
- lib/brakeman/processors/controller_alias_processor.rb
|
270
|
+
- lib/brakeman/processors/controller_processor.rb
|
271
|
+
- lib/brakeman/processors/erb_template_processor.rb
|
272
|
+
- lib/brakeman/processors/erubis_template_processor.rb
|
273
|
+
- lib/brakeman/processors/gem_processor.rb
|
254
274
|
- lib/brakeman/processors/haml_template_processor.rb
|
255
|
-
- lib/brakeman/processors/base_processor.rb
|
256
|
-
- lib/brakeman/processors/lib/find_return_value.rb
|
257
|
-
- lib/brakeman/processors/lib/rails3_route_processor.rb
|
258
|
-
- lib/brakeman/processors/lib/find_all_calls.rb
|
259
275
|
- lib/brakeman/processors/lib/basic_processor.rb
|
260
|
-
- lib/brakeman/processors/lib/
|
261
|
-
- lib/brakeman/processors/lib/route_helper.rb
|
276
|
+
- lib/brakeman/processors/lib/find_all_calls.rb
|
262
277
|
- lib/brakeman/processors/lib/find_call.rb
|
263
|
-
- lib/brakeman/processors/lib/
|
264
|
-
- lib/brakeman/processors/lib/rails3_config_processor.rb
|
265
|
-
- lib/brakeman/processors/lib/rails2_config_processor.rb
|
278
|
+
- lib/brakeman/processors/lib/find_return_value.rb
|
266
279
|
- lib/brakeman/processors/lib/processor_helper.rb
|
267
|
-
- lib/brakeman/processors/
|
268
|
-
- lib/brakeman/processors/
|
280
|
+
- lib/brakeman/processors/lib/rails2_config_processor.rb
|
281
|
+
- lib/brakeman/processors/lib/rails2_route_processor.rb
|
282
|
+
- lib/brakeman/processors/lib/rails3_config_processor.rb
|
283
|
+
- lib/brakeman/processors/lib/rails3_route_processor.rb
|
284
|
+
- lib/brakeman/processors/lib/render_helper.rb
|
285
|
+
- lib/brakeman/processors/lib/render_path.rb
|
286
|
+
- lib/brakeman/processors/lib/route_helper.rb
|
269
287
|
- lib/brakeman/processors/library_processor.rb
|
270
|
-
- lib/brakeman/processors/
|
288
|
+
- lib/brakeman/processors/model_processor.rb
|
289
|
+
- lib/brakeman/processors/output_processor.rb
|
271
290
|
- lib/brakeman/processors/route_processor.rb
|
272
|
-
- lib/brakeman/
|
291
|
+
- lib/brakeman/processors/slim_template_processor.rb
|
292
|
+
- lib/brakeman/processors/template_alias_processor.rb
|
293
|
+
- lib/brakeman/processors/template_processor.rb
|
294
|
+
- lib/brakeman/report.rb
|
295
|
+
- lib/brakeman/report/ignore/config.rb
|
296
|
+
- lib/brakeman/report/ignore/interactive.rb
|
297
|
+
- lib/brakeman/report/initializers/faster_csv.rb
|
298
|
+
- lib/brakeman/report/initializers/multi_json.rb
|
299
|
+
- lib/brakeman/report/renderer.rb
|
273
300
|
- lib/brakeman/report/report_base.rb
|
301
|
+
- lib/brakeman/report/report_csv.rb
|
274
302
|
- lib/brakeman/report/report_hash.rb
|
303
|
+
- lib/brakeman/report/report_html.rb
|
304
|
+
- lib/brakeman/report/report_json.rb
|
305
|
+
- lib/brakeman/report/report_markdown.rb
|
306
|
+
- lib/brakeman/report/report_table.rb
|
307
|
+
- lib/brakeman/report/report_tabs.rb
|
275
308
|
- lib/brakeman/report/templates/controller_overview.html.erb
|
276
|
-
- lib/brakeman/report/templates/security_warnings.html.erb
|
277
|
-
- lib/brakeman/report/templates/warning_overview.html.erb
|
278
|
-
- lib/brakeman/report/templates/ignored_warnings.html.erb
|
279
|
-
- lib/brakeman/report/templates/model_warnings.html.erb
|
280
309
|
- lib/brakeman/report/templates/controller_warnings.html.erb
|
281
|
-
- lib/brakeman/report/templates/overview.html.erb
|
282
310
|
- lib/brakeman/report/templates/error_overview.html.erb
|
283
|
-
- lib/brakeman/report/templates/view_warnings.html.erb
|
284
311
|
- lib/brakeman/report/templates/header.html.erb
|
312
|
+
- lib/brakeman/report/templates/ignored_warnings.html.erb
|
313
|
+
- lib/brakeman/report/templates/model_warnings.html.erb
|
314
|
+
- lib/brakeman/report/templates/overview.html.erb
|
315
|
+
- lib/brakeman/report/templates/security_warnings.html.erb
|
285
316
|
- lib/brakeman/report/templates/template_overview.html.erb
|
286
|
-
- lib/brakeman/report/
|
287
|
-
- lib/brakeman/report/
|
288
|
-
- lib/brakeman/report/renderer.rb
|
289
|
-
- lib/brakeman/report/report_table.rb
|
290
|
-
- lib/brakeman/report/report_html.rb
|
291
|
-
- lib/brakeman/report/report_csv.rb
|
292
|
-
- lib/brakeman/report/report_tabs.rb
|
293
|
-
- lib/brakeman/report/initializers/faster_csv.rb
|
294
|
-
- lib/brakeman/report/initializers/multi_json.rb
|
295
|
-
- lib/brakeman/report/report_json.rb
|
317
|
+
- lib/brakeman/report/templates/view_warnings.html.erb
|
318
|
+
- lib/brakeman/report/templates/warning_overview.html.erb
|
296
319
|
- lib/brakeman/rescanner.rb
|
320
|
+
- lib/brakeman/scanner.rb
|
321
|
+
- lib/brakeman/tracker.rb
|
322
|
+
- lib/brakeman/util.rb
|
323
|
+
- lib/brakeman/version.rb
|
324
|
+
- lib/brakeman/warning.rb
|
325
|
+
- lib/brakeman/warning_codes.rb
|
326
|
+
- lib/ruby_parser/bm_sexp.rb
|
327
|
+
- lib/ruby_parser/bm_sexp_processor.rb
|
297
328
|
homepage: http://brakemanscanner.org
|
298
|
-
licenses:
|
329
|
+
licenses:
|
299
330
|
- MIT
|
331
|
+
metadata: {}
|
300
332
|
post_install_message:
|
301
333
|
rdoc_options: []
|
302
|
-
|
303
|
-
require_paths:
|
334
|
+
require_paths:
|
304
335
|
- lib
|
305
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
306
|
-
|
307
|
-
requirements:
|
336
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
337
|
+
requirements:
|
308
338
|
- - ">="
|
309
|
-
- !ruby/object:Gem::Version
|
310
|
-
version:
|
311
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
312
|
-
|
313
|
-
requirements:
|
339
|
+
- !ruby/object:Gem::Version
|
340
|
+
version: '0'
|
341
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
342
|
+
requirements:
|
314
343
|
- - ">="
|
315
|
-
- !ruby/object:Gem::Version
|
316
|
-
version:
|
344
|
+
- !ruby/object:Gem::Version
|
345
|
+
version: '0'
|
317
346
|
requirements: []
|
318
|
-
|
319
347
|
rubyforge_project:
|
320
|
-
rubygems_version:
|
348
|
+
rubygems_version: 2.2.2
|
321
349
|
signing_key:
|
322
|
-
specification_version:
|
350
|
+
specification_version: 4
|
323
351
|
summary: Security vulnerability scanner for Ruby on Rails.
|
324
352
|
test_files: []
|
325
|
-
|
metadata.gz.sig
CHANGED
Binary file
|