brakeman-lib 4.3.1 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +24 -1
- data/README.md +35 -6
- data/bin/brakeman +2 -0
- data/lib/brakeman.rb +5 -3
- data/lib/brakeman/app_tree.rb +15 -1
- data/lib/brakeman/call_index.rb +7 -4
- data/lib/brakeman/checks.rb +16 -8
- data/lib/brakeman/checks/base_check.rb +2 -19
- data/lib/brakeman/checks/check_basic_auth_timing_attack.rb +1 -1
- data/lib/brakeman/checks/check_content_tag.rb +4 -4
- data/lib/brakeman/checks/check_create_with.rb +1 -1
- data/lib/brakeman/checks/check_cross_site_scripting.rb +3 -3
- data/lib/brakeman/checks/check_default_routes.rb +3 -3
- data/lib/brakeman/checks/check_deserialize.rb +1 -1
- data/lib/brakeman/checks/check_detailed_exceptions.rb +1 -1
- data/lib/brakeman/checks/check_digest_dos.rb +4 -4
- data/lib/brakeman/checks/check_escape_function.rb +1 -1
- data/lib/brakeman/checks/check_execute.rb +5 -4
- data/lib/brakeman/checks/check_file_access.rb +13 -3
- data/lib/brakeman/checks/check_file_disclosure.rb +1 -1
- data/lib/brakeman/checks/check_filter_skipping.rb +1 -1
- data/lib/brakeman/checks/check_forgery_setting.rb +3 -3
- data/lib/brakeman/checks/check_header_dos.rb +3 -3
- data/lib/brakeman/checks/check_i18n_xss.rb +3 -3
- data/lib/brakeman/checks/check_jruby_xml.rb +1 -1
- data/lib/brakeman/checks/check_json_encoding.rb +3 -3
- data/lib/brakeman/checks/check_json_parsing.rb +8 -11
- data/lib/brakeman/checks/check_link_to.rb +3 -3
- data/lib/brakeman/checks/check_link_to_href.rb +2 -2
- data/lib/brakeman/checks/check_mail_to.rb +3 -3
- data/lib/brakeman/checks/check_mime_type_dos.rb +1 -1
- data/lib/brakeman/checks/check_model_attributes.rb +4 -4
- data/lib/brakeman/checks/check_model_serialize.rb +1 -1
- data/lib/brakeman/checks/check_nested_attributes.rb +3 -3
- data/lib/brakeman/checks/check_nested_attributes_bypass.rb +1 -1
- data/lib/brakeman/checks/check_number_to_currency.rb +4 -4
- data/lib/brakeman/checks/check_quote_table_name.rb +2 -2
- data/lib/brakeman/checks/check_regex_dos.rb +1 -1
- data/lib/brakeman/checks/check_render.rb +2 -2
- data/lib/brakeman/checks/check_render_dos.rb +1 -1
- data/lib/brakeman/checks/check_render_inline.rb +1 -1
- 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 +1 -1
- data/lib/brakeman/checks/check_sanitize_methods.rb +3 -3
- data/lib/brakeman/checks/check_secrets.rb +1 -1
- data/lib/brakeman/checks/check_select_tag.rb +1 -1
- data/lib/brakeman/checks/check_select_vulnerability.rb +1 -1
- data/lib/brakeman/checks/check_session_manipulation.rb +1 -1
- data/lib/brakeman/checks/check_session_settings.rb +1 -1
- data/lib/brakeman/checks/check_simple_format.rb +2 -2
- data/lib/brakeman/checks/check_single_quotes.rb +14 -10
- data/lib/brakeman/checks/check_skip_before_filter.rb +2 -2
- data/lib/brakeman/checks/check_sprockets_path_traversal.rb +39 -0
- data/lib/brakeman/checks/check_sql.rb +1 -1
- data/lib/brakeman/checks/check_sql_cves.rb +2 -2
- data/lib/brakeman/checks/check_strip_tags.rb +10 -8
- data/lib/brakeman/checks/check_symbol_dos.rb +1 -1
- data/lib/brakeman/checks/check_symbol_dos_cve.rb +1 -1
- data/lib/brakeman/checks/check_translate_bug.rb +7 -7
- data/lib/brakeman/checks/check_unsafe_reflection.rb +1 -1
- 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 +18 -19
- data/lib/brakeman/checks/check_xml_dos.rb +1 -1
- data/lib/brakeman/checks/check_yaml_parsing.rb +1 -1
- data/lib/brakeman/format/style.css +8 -0
- data/lib/brakeman/messages.rb +220 -0
- data/lib/brakeman/options.rb +13 -0
- data/lib/brakeman/parsers/template_parser.rb +2 -2
- data/lib/brakeman/processors/alias_processor.rb +7 -0
- data/lib/brakeman/processors/config_processor.rb +4 -1
- data/lib/brakeman/processors/gem_processor.rb +30 -2
- data/lib/brakeman/processors/lib/call_conversion_helper.rb +2 -1
- data/lib/brakeman/processors/lib/rails3_route_processor.rb +0 -2
- data/lib/brakeman/processors/lib/rails4_config_processor.rb +18 -0
- data/lib/brakeman/processors/lib/render_helper.rb +5 -0
- data/lib/brakeman/processors/lib/render_path.rb +15 -0
- data/lib/brakeman/processors/library_processor.rb +1 -1
- data/lib/brakeman/report/report_base.rb +17 -161
- data/lib/brakeman/report/report_csv.rb +17 -0
- data/lib/brakeman/report/report_html.rb +34 -31
- data/lib/brakeman/report/report_json.rb +21 -0
- data/lib/brakeman/report/report_markdown.rb +13 -6
- data/lib/brakeman/report/report_table.rb +157 -0
- data/lib/brakeman/report/report_tabs.rb +3 -1
- data/lib/brakeman/report/report_text.rb +16 -0
- data/lib/brakeman/scanner.rb +5 -1
- data/lib/brakeman/tracker/config.rb +1 -1
- data/lib/brakeman/util.rb +0 -17
- data/lib/brakeman/version.rb +1 -1
- data/lib/brakeman/warning.rb +9 -4
- data/lib/brakeman/warning_codes.rb +1 -0
- metadata +13 -10
@@ -1,6 +1,8 @@
|
|
1
|
+
require 'brakeman/report/report_table'
|
2
|
+
|
1
3
|
#Generated tab-separated output suitable for the Jenkins Brakeman Plugin:
|
2
4
|
#https://github.com/presidentbeef/brakeman-jenkins-plugin
|
3
|
-
class Brakeman::Report::Tabs < Brakeman::Report::
|
5
|
+
class Brakeman::Report::Tabs < Brakeman::Report::Table
|
4
6
|
def generate_report
|
5
7
|
[[:generic_warnings, "General"], [:controller_warnings, "Controller"],
|
6
8
|
[:model_warnings, "Model"], [:template_warnings, "Template"]].map do |meth, category|
|
@@ -33,6 +33,22 @@ class Brakeman::Report::Text < Brakeman::Report::Base
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
def generate_controllers
|
37
|
+
double_space "Controller Overview", controller_information.map { |ci|
|
38
|
+
controller = [
|
39
|
+
label("Controller", ci["Name"]),
|
40
|
+
label("Parent", ci["Parent"]),
|
41
|
+
label("Routes", ci["Routes"])
|
42
|
+
]
|
43
|
+
|
44
|
+
if ci["Includes"] and not ci["Includes"].empty?
|
45
|
+
controller.insert(2, label("Includes", ci["Includes"]))
|
46
|
+
end
|
47
|
+
|
48
|
+
controller
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
36
52
|
def generate_header
|
37
53
|
[
|
38
54
|
header("Brakeman Report"),
|
data/lib/brakeman/scanner.rb
CHANGED
@@ -143,7 +143,11 @@ class Brakeman::Scanner
|
|
143
143
|
gem_files[:gemlock] = { :src => @app_tree.read("gems.locked"), :file => "gems.locked" }
|
144
144
|
end
|
145
145
|
|
146
|
-
if
|
146
|
+
if @app_tree.gemspec
|
147
|
+
gem_files[:gemspec] = { :src => parse_ruby(@app_tree.read(@app_tree.gemspec)), :file => @app_tree.gemspec }
|
148
|
+
end
|
149
|
+
|
150
|
+
if not gem_files.empty?
|
147
151
|
@processor.process_gems gem_files
|
148
152
|
end
|
149
153
|
rescue => e
|
@@ -81,7 +81,7 @@ module Brakeman
|
|
81
81
|
def set_rails_version
|
82
82
|
# Ignore ~>, etc. when using values from Gemfile
|
83
83
|
version = gem_version(:rails) || gem_version(:railties)
|
84
|
-
if version and version.match(/(\d+\.\d
|
84
|
+
if version and version.match(/(\d+\.\d+(\.\d+.*)?)/)
|
85
85
|
@rails_version = $1
|
86
86
|
|
87
87
|
if tracker.options[:rails3].nil? and tracker.options[:rails4].nil?
|
data/lib/brakeman/util.rb
CHANGED
@@ -483,21 +483,4 @@ module Brakeman::Util
|
|
483
483
|
end
|
484
484
|
end.join
|
485
485
|
end
|
486
|
-
|
487
|
-
# rely on Terminal::Table to build the structure, extract the data out in CSV format
|
488
|
-
def table_to_csv table
|
489
|
-
return "" unless table
|
490
|
-
|
491
|
-
Brakeman.load_brakeman_dependency 'terminal-table'
|
492
|
-
headings = table.headings
|
493
|
-
if headings.is_a? Array
|
494
|
-
headings = headings.first
|
495
|
-
end
|
496
|
-
|
497
|
-
output = CSV.generate_line(headings.cells.map{|cell| cell.to_s.strip})
|
498
|
-
table.rows.each do |row|
|
499
|
-
output << CSV.generate_line(row.cells.map{|cell| cell.to_s.strip})
|
500
|
-
end
|
501
|
-
output
|
502
|
-
end
|
503
486
|
end
|
data/lib/brakeman/version.rb
CHANGED
data/lib/brakeman/warning.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'digest/sha2'
|
3
3
|
require 'brakeman/warning_codes'
|
4
|
+
require 'brakeman/messages'
|
4
5
|
|
5
6
|
#The Warning class stores information about warnings
|
6
7
|
class Brakeman::Warning
|
@@ -115,6 +116,10 @@ class Brakeman::Warning
|
|
115
116
|
|
116
117
|
Brakeman.debug("Warning created without warning code: #{options[:warning_code]}") unless @warning_code
|
117
118
|
|
119
|
+
if options[:message].is_a? String
|
120
|
+
@message = Brakeman::Messages::Message.new(options[:message])
|
121
|
+
end
|
122
|
+
|
118
123
|
@format_message = nil
|
119
124
|
@row = nil
|
120
125
|
end
|
@@ -176,7 +181,7 @@ class Brakeman::Warning
|
|
176
181
|
def format_message
|
177
182
|
return @format_message if @format_message
|
178
183
|
|
179
|
-
@format_message = self.message.dup
|
184
|
+
@format_message = self.message.to_s.dup
|
180
185
|
|
181
186
|
if self.line
|
182
187
|
@format_message << " near line #{self.line}"
|
@@ -208,9 +213,9 @@ class Brakeman::Warning
|
|
208
213
|
|
209
214
|
#Generates a hash suitable for inserting into a table
|
210
215
|
def to_row type = :warning
|
211
|
-
@row = { "Confidence" => self.confidence,
|
216
|
+
@row = { "Confidence" => TEXT_CONFIDENCE[self.confidence],
|
212
217
|
"Warning Type" => self.warning_type.to_s,
|
213
|
-
"Message" => self.
|
218
|
+
"Message" => self.message }
|
214
219
|
|
215
220
|
case type
|
216
221
|
when :template
|
@@ -267,7 +272,7 @@ class Brakeman::Warning
|
|
267
272
|
:warning_code => @warning_code,
|
268
273
|
:fingerprint => self.fingerprint,
|
269
274
|
:check_name => self.check.gsub(/^Brakeman::Check/, ''),
|
270
|
-
:message => self.message,
|
275
|
+
:message => self.message.to_s,
|
271
276
|
:file => self.file,
|
272
277
|
:line => self.line,
|
273
278
|
:link => self.link,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brakeman-lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.4.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:
|
12
|
+
date: 2019-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 3.
|
34
|
+
version: '3.12'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 3.
|
41
|
+
version: '3.12'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: sexp_processor
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,9 +176,9 @@ dependencies:
|
|
176
176
|
- - ">="
|
177
177
|
- !ruby/object:Gem::Version
|
178
178
|
version: 1.3.6
|
179
|
-
- - "
|
179
|
+
- - "<="
|
180
180
|
- !ruby/object:Gem::Version
|
181
|
-
version:
|
181
|
+
version: 4.0.1
|
182
182
|
type: :runtime
|
183
183
|
prerelease: false
|
184
184
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -186,9 +186,9 @@ dependencies:
|
|
186
186
|
- - ">="
|
187
187
|
- !ruby/object:Gem::Version
|
188
188
|
version: 1.3.6
|
189
|
-
- - "
|
189
|
+
- - "<="
|
190
190
|
- !ruby/object:Gem::Version
|
191
|
-
version:
|
191
|
+
version: 4.0.1
|
192
192
|
description: Brakeman detects security vulnerabilities in Ruby on Rails applications
|
193
193
|
via static analysis. This package declares gem dependencies instead of bundling
|
194
194
|
them.
|
@@ -262,6 +262,7 @@ files:
|
|
262
262
|
- lib/brakeman/checks/check_simple_format.rb
|
263
263
|
- lib/brakeman/checks/check_single_quotes.rb
|
264
264
|
- lib/brakeman/checks/check_skip_before_filter.rb
|
265
|
+
- lib/brakeman/checks/check_sprockets_path_traversal.rb
|
265
266
|
- lib/brakeman/checks/check_sql.rb
|
266
267
|
- lib/brakeman/checks/check_sql_cves.rb
|
267
268
|
- lib/brakeman/checks/check_ssl_verify.rb
|
@@ -281,6 +282,7 @@ files:
|
|
281
282
|
- lib/brakeman/differ.rb
|
282
283
|
- lib/brakeman/file_parser.rb
|
283
284
|
- lib/brakeman/format/style.css
|
285
|
+
- lib/brakeman/messages.rb
|
284
286
|
- lib/brakeman/options.rb
|
285
287
|
- lib/brakeman/parsers/rails2_erubis.rb
|
286
288
|
- lib/brakeman/parsers/rails2_xss_plugin_erubis.rb
|
@@ -307,6 +309,7 @@ files:
|
|
307
309
|
- lib/brakeman/processors/lib/rails2_route_processor.rb
|
308
310
|
- lib/brakeman/processors/lib/rails3_config_processor.rb
|
309
311
|
- lib/brakeman/processors/lib/rails3_route_processor.rb
|
312
|
+
- lib/brakeman/processors/lib/rails4_config_processor.rb
|
310
313
|
- lib/brakeman/processors/lib/render_helper.rb
|
311
314
|
- lib/brakeman/processors/lib/render_path.rb
|
312
315
|
- lib/brakeman/processors/lib/route_helper.rb
|
@@ -363,7 +366,7 @@ files:
|
|
363
366
|
- lib/ruby_parser/bm_sexp_processor.rb
|
364
367
|
homepage: http://brakemanscanner.org
|
365
368
|
licenses:
|
366
|
-
-
|
369
|
+
- CC-BY-NC-SA-4.0
|
367
370
|
metadata: {}
|
368
371
|
post_install_message:
|
369
372
|
rdoc_options: []
|
@@ -381,7 +384,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
381
384
|
version: '0'
|
382
385
|
requirements: []
|
383
386
|
rubyforge_project:
|
384
|
-
rubygems_version: 2.7.
|
387
|
+
rubygems_version: 2.7.8
|
385
388
|
signing_key:
|
386
389
|
specification_version: 4
|
387
390
|
summary: Security vulnerability scanner for Ruby on Rails.
|