brakeman 2.6.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGES +19 -0
- data/bin/brakeman +1 -1
- data/lib/brakeman.rb +4 -2
- data/lib/brakeman/app_tree.rb +1 -1
- data/lib/brakeman/checks/base_check.rb +9 -7
- data/lib/brakeman/checks/check_create_with.rb +1 -1
- data/lib/brakeman/checks/check_cross_site_scripting.rb +46 -42
- data/lib/brakeman/checks/check_digest_dos.rb +1 -1
- data/lib/brakeman/checks/check_escape_function.rb +3 -3
- data/lib/brakeman/checks/check_file_disclosure.rb +35 -0
- data/lib/brakeman/checks/check_filter_skipping.rb +1 -1
- 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 -3
- data/lib/brakeman/checks/check_jruby_xml.rb +1 -1
- data/lib/brakeman/checks/check_json_parsing.rb +9 -4
- data/lib/brakeman/checks/check_mail_to.rb +1 -1
- data/lib/brakeman/checks/check_nested_attributes.rb +1 -1
- data/lib/brakeman/checks/check_number_to_currency.rb +1 -1
- data/lib/brakeman/checks/check_quote_table_name.rb +1 -1
- data/lib/brakeman/checks/check_render.rb +3 -3
- data/lib/brakeman/checks/check_render_dos.rb +1 -1
- data/lib/brakeman/checks/check_render_inline.rb +42 -0
- data/lib/brakeman/checks/check_response_splitting.rb +1 -1
- data/lib/brakeman/checks/check_safe_buffer_manipulation.rb +1 -1
- data/lib/brakeman/checks/check_simple_format.rb +2 -2
- data/lib/brakeman/checks/check_single_quotes.rb +1 -1
- data/lib/brakeman/checks/check_skip_before_filter.rb +1 -1
- data/lib/brakeman/checks/check_sql_cves.rb +2 -2
- data/lib/brakeman/checks/check_strip_tags.rb +2 -2
- data/lib/brakeman/checks/check_symbol_dos.rb +2 -23
- data/lib/brakeman/checks/check_symbol_dos_cve.rb +30 -0
- data/lib/brakeman/checks/check_translate_bug.rb +1 -1
- data/lib/brakeman/checks/check_yaml_parsing.rb +2 -2
- data/lib/brakeman/options.rb +6 -2
- data/lib/brakeman/parsers/rails3_erubis.rb +2 -2
- data/lib/brakeman/processors/alias_processor.rb +54 -1
- data/lib/brakeman/processors/base_processor.rb +0 -8
- data/lib/brakeman/processors/controller_alias_processor.rb +40 -2
- data/lib/brakeman/processors/controller_processor.rb +5 -3
- data/lib/brakeman/processors/gem_processor.rb +13 -9
- data/lib/brakeman/processors/lib/basic_processor.rb +17 -0
- data/lib/brakeman/processors/lib/find_all_calls.rb +2 -2
- data/lib/brakeman/processors/lib/find_call.rb +2 -2
- data/lib/brakeman/processors/lib/processor_helper.rb +9 -0
- data/lib/brakeman/processors/lib/rails2_config_processor.rb +3 -1
- data/lib/brakeman/processors/lib/rails2_route_processor.rb +3 -3
- data/lib/brakeman/processors/lib/rails3_config_processor.rb +4 -1
- data/lib/brakeman/processors/lib/rails3_route_processor.rb +4 -2
- data/lib/brakeman/processors/output_processor.rb +1 -7
- data/lib/brakeman/report/report_json.rb +1 -1
- data/lib/brakeman/tracker.rb +7 -1
- data/lib/brakeman/version.rb +1 -1
- data/lib/brakeman/warning.rb +15 -1
- data/lib/brakeman/warning_codes.rb +3 -0
- data/lib/ruby_parser/bm_sexp.rb +17 -5
- metadata +55 -56
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MzNiNzA0ZjBmNjZmOGNkOWYxNDgzMTg3YjY2MzIxYTlmNzIxODYzNA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8e036c60e03551ca1b437c9c0ba69ba388ec0bf1
|
4
|
+
data.tar.gz: 1b2cd12bd7417aa8409dc36d978d40557363c6d6
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
OGUxN2UyNGE3MTA5MDlkMjI2MDg1NjlmNzE1ZGIwZDYwOWExNzFkYzQ0MzBl
|
11
|
-
ZTExMjIyZGQ4YjRkZTMwMDk1NzAwMjg3Y2RiNGM3NWJiYzFjNWE=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YTFlM2JlMmJhN2E4OGJhNzU3N2QzNzcxYWFkMDhlZDhhNTMzM2EyMmI3MGVj
|
14
|
-
NjBhZGQyN2ViYTAzYzQzOTY3OTcxZGNkNWM3OTljY2YzM2NlYmVkNzRhZTk5
|
15
|
-
M2IzMDAwOGE4MzM1Y2U0ZTE4MjhkZDY4MzdkNzI3NzE2YWE1MjA=
|
6
|
+
metadata.gz: cf9478f1fa9747f397f1c614ee4058f1de4b0c99dc0c444d2ac169ec0d1aa5adf895ea0e804761d148cd7779fcb2f1a9fd6bc1dec73c99beaf005aa5c45ad1c7
|
7
|
+
data.tar.gz: 4b71efa6cf9e69e771d4698364d4ec2a7b19c05a1f3d24d8cd72a9e8e8bcb384143c5e06f8b7865d66bfa96ef52ae8a0dc7e302ddd7a65cdb15c8f0ffa21ee7b
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGES
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
# 3.0.0
|
2
|
+
|
3
|
+
* Add check for CVE-2014-7829
|
4
|
+
* Add check for cross site scripting via inline renders
|
5
|
+
* Fix formatting of command interpolation
|
6
|
+
* Local variables are no longer formatted as `(local var)`
|
7
|
+
* Actually skip skipped before filters
|
8
|
+
* `--exit-on-warn --compare` only returns error code on new warnings (Jeff Yip)
|
9
|
+
* Fix parsing of `<%==` in ERB
|
10
|
+
* Sort warnings by fingerprint in JSON report (Jeff Yip)
|
11
|
+
* Handle symmetric multiple assignment
|
12
|
+
* Do not branch for self attribute assignment `x = x.y`
|
13
|
+
* Fix CVE for CVE-2011-2932
|
14
|
+
* Remove "fake filters" from warning fingerpints
|
15
|
+
* Index calls in `lib/` files
|
16
|
+
* Move Symbol DoS to optional checks
|
17
|
+
* CVEs report correct line and file name (Gemfile/Gemfile.lock) (Rob Fletcher)
|
18
|
+
* Change `--separate-models` to be the default
|
19
|
+
|
1
20
|
# 2.6.3
|
2
21
|
|
3
22
|
* Whitelist `exists` arel method from SQL injection check
|
data/bin/brakeman
CHANGED
data/lib/brakeman.rb
CHANGED
@@ -19,7 +19,7 @@ module Brakeman
|
|
19
19
|
# * :app_path - path to root of Rails app (required)
|
20
20
|
# * :assume_all_routes - assume all methods are routes (default: true)
|
21
21
|
# * :check_arguments - check arguments of methods (default: true)
|
22
|
-
# * :collapse_mass_assignment - report unprotected models in single warning (default:
|
22
|
+
# * :collapse_mass_assignment - report unprotected models in single warning (default: false)
|
23
23
|
# * :combine_locations - combine warning locations (default: true)
|
24
24
|
# * :config_file - configuration file
|
25
25
|
# * :escape_html - escape HTML by default (automatic)
|
@@ -28,6 +28,7 @@ module Brakeman
|
|
28
28
|
# * :highlight_user_input - highlight user input in reported warnings (default: true)
|
29
29
|
# * :html_style - path to CSS file
|
30
30
|
# * :ignore_model_output - consider models safe (default: false)
|
31
|
+
# * :index_libs - add libraries to call index (default: true)
|
31
32
|
# * :interprocedural - limited interprocedural processing of method calls (default: false)
|
32
33
|
# * :message_limit - limit length of messages
|
33
34
|
# * :min_confidence - minimum confidence (0-2, 0 is highest)
|
@@ -122,10 +123,11 @@ module Brakeman
|
|
122
123
|
:safe_methods => Set.new,
|
123
124
|
:min_confidence => 2,
|
124
125
|
:combine_locations => true,
|
125
|
-
:collapse_mass_assignment =>
|
126
|
+
:collapse_mass_assignment => false,
|
126
127
|
:highlight_user_input => true,
|
127
128
|
:ignore_redirect_to_model => true,
|
128
129
|
:ignore_model_output => false,
|
130
|
+
:index_libs => true,
|
129
131
|
:message_limit => 100,
|
130
132
|
:parallel_checks => true,
|
131
133
|
:relative_path => false,
|
data/lib/brakeman/app_tree.rb
CHANGED
@@ -328,7 +328,7 @@ class Brakeman::BaseCheck < Brakeman::SexpProcessor
|
|
328
328
|
end
|
329
329
|
elsif sexp? exp
|
330
330
|
case exp.node_type
|
331
|
-
when :string_interp
|
331
|
+
when :string_interp, :dstr
|
332
332
|
exp.each do |e|
|
333
333
|
if sexp? e
|
334
334
|
match = has_immediate_user_input?(e)
|
@@ -336,7 +336,7 @@ class Brakeman::BaseCheck < Brakeman::SexpProcessor
|
|
336
336
|
end
|
337
337
|
end
|
338
338
|
false
|
339
|
-
when :string_eval
|
339
|
+
when :string_eval, :evstr
|
340
340
|
if sexp? exp.value
|
341
341
|
if exp.value.node_type == :rlist
|
342
342
|
exp.value.each_sexp do |e|
|
@@ -390,14 +390,14 @@ class Brakeman::BaseCheck < Brakeman::SexpProcessor
|
|
390
390
|
end
|
391
391
|
elsif sexp? exp
|
392
392
|
case exp.node_type
|
393
|
-
when :string_interp
|
393
|
+
when :string_interp, :dstr
|
394
394
|
exp.each do |e|
|
395
395
|
if sexp? e and match = has_immediate_model?(e, out)
|
396
396
|
return match
|
397
397
|
end
|
398
398
|
end
|
399
399
|
false
|
400
|
-
when :string_eval
|
400
|
+
when :string_eval, :evstr
|
401
401
|
if sexp? exp.value
|
402
402
|
if exp.value.node_type == :rlist
|
403
403
|
exp.value.each_sexp do |e|
|
@@ -484,11 +484,13 @@ class Brakeman::BaseCheck < Brakeman::SexpProcessor
|
|
484
484
|
|
485
485
|
def lts_version? version
|
486
486
|
tracker.config[:gems][:'railslts-version'] and
|
487
|
-
version_between? version, "2.3.18.99", tracker.config[:gems][:'railslts-version']
|
487
|
+
version_between? version, "2.3.18.99", tracker.config[:gems][:'railslts-version'][:version]
|
488
488
|
end
|
489
489
|
|
490
|
-
def gemfile_or_environment
|
491
|
-
if
|
490
|
+
def gemfile_or_environment gem_name = :rails
|
491
|
+
if gem_name and info = tracker.config[:gems][gem_name]
|
492
|
+
info
|
493
|
+
elsif @app_tree.exists?("Gemfile")
|
492
494
|
"Gemfile"
|
493
495
|
else
|
494
496
|
"config/environment.rb"
|
@@ -68,7 +68,7 @@ class Brakeman::CheckCreateWith < Brakeman::BaseCheck
|
|
68
68
|
warn :warning_type => "Mass Assignment",
|
69
69
|
:warning_code => :CVE_2014_3514,
|
70
70
|
:message => @message,
|
71
|
-
:
|
71
|
+
:gem_info => gemfile_or_environment,
|
72
72
|
:confidence => CONFIDENCE[:med],
|
73
73
|
:link_path => "https://groups.google.com/d/msg/rubyonrails-security/M4chq5Sb540/CC1Fh0Y_NWwJ"
|
74
74
|
end
|
@@ -35,48 +35,7 @@ class Brakeman::CheckCrossSiteScripting < Brakeman::BaseCheck
|
|
35
35
|
|
36
36
|
#Run check
|
37
37
|
def run_check
|
38
|
-
|
39
|
-
:field_field, :fields_for, :h, :hidden_field,
|
40
|
-
:hidden_field, :hidden_field_tag, :image_tag, :label,
|
41
|
-
:link_to, :mail_to, :radio_button, :select,
|
42
|
-
:submit_tag, :text_area, :text_field,
|
43
|
-
:text_field_tag, :url_encode, :url_for,
|
44
|
-
:will_paginate].merge tracker.options[:safe_methods]
|
45
|
-
|
46
|
-
@models = tracker.models.keys
|
47
|
-
@inspect_arguments = tracker.options[:check_arguments]
|
48
|
-
|
49
|
-
@known_dangerous = Set[:truncate, :concat]
|
50
|
-
|
51
|
-
if version_between? "2.0.0", "3.0.5"
|
52
|
-
@known_dangerous << :auto_link
|
53
|
-
elsif version_between? "3.0.6", "3.0.99"
|
54
|
-
@ignore_methods << :auto_link
|
55
|
-
end
|
56
|
-
|
57
|
-
if version_between? "2.0.0", "2.3.14"
|
58
|
-
@known_dangerous << :strip_tags
|
59
|
-
end
|
60
|
-
|
61
|
-
json_escape_on = false
|
62
|
-
initializers = tracker.check_initializers :ActiveSupport, :escape_html_entities_in_json=
|
63
|
-
initializers.each {|result| json_escape_on = true?(result.call.first_arg) }
|
64
|
-
|
65
|
-
if tracker.config[:rails][:active_support] and
|
66
|
-
true? tracker.config[:rails][:active_support][:escape_html_entities_in_json]
|
67
|
-
|
68
|
-
json_escape_on = true
|
69
|
-
elsif version_between? "4.0.0", "5.0.0"
|
70
|
-
json_escape_on = true
|
71
|
-
end
|
72
|
-
|
73
|
-
if !json_escape_on or version_between? "0.0.0", "2.0.99"
|
74
|
-
@known_dangerous << :to_json
|
75
|
-
Brakeman.debug("Automatic to_json escaping not enabled, consider to_json dangerous")
|
76
|
-
else
|
77
|
-
@safe_input_attributes << :to_json
|
78
|
-
Brakeman.debug("Automatic to_json escaping is enabled.")
|
79
|
-
end
|
38
|
+
setup
|
80
39
|
|
81
40
|
tracker.each_template do |name, template|
|
82
41
|
Brakeman.debug "Checking #{name} for XSS"
|
@@ -301,6 +260,51 @@ class Brakeman::CheckCrossSiteScripting < Brakeman::BaseCheck
|
|
301
260
|
exp
|
302
261
|
end
|
303
262
|
|
263
|
+
def setup
|
264
|
+
@ignore_methods = Set[:button_to, :check_box, :content_tag, :escapeHTML, :escape_once,
|
265
|
+
:field_field, :fields_for, :h, :hidden_field,
|
266
|
+
:hidden_field, :hidden_field_tag, :image_tag, :label,
|
267
|
+
:link_to, :mail_to, :radio_button, :select,
|
268
|
+
:submit_tag, :text_area, :text_field,
|
269
|
+
:text_field_tag, :url_encode, :url_for,
|
270
|
+
:will_paginate].merge tracker.options[:safe_methods]
|
271
|
+
|
272
|
+
@models = tracker.models.keys
|
273
|
+
@inspect_arguments = tracker.options[:check_arguments]
|
274
|
+
|
275
|
+
@known_dangerous = Set[:truncate, :concat]
|
276
|
+
|
277
|
+
if version_between? "2.0.0", "3.0.5"
|
278
|
+
@known_dangerous << :auto_link
|
279
|
+
elsif version_between? "3.0.6", "3.0.99"
|
280
|
+
@ignore_methods << :auto_link
|
281
|
+
end
|
282
|
+
|
283
|
+
if version_between? "2.0.0", "2.3.14"
|
284
|
+
@known_dangerous << :strip_tags
|
285
|
+
end
|
286
|
+
|
287
|
+
json_escape_on = false
|
288
|
+
initializers = tracker.check_initializers :ActiveSupport, :escape_html_entities_in_json=
|
289
|
+
initializers.each {|result| json_escape_on = true?(result.call.first_arg) }
|
290
|
+
|
291
|
+
if tracker.config[:rails][:active_support] and
|
292
|
+
true? tracker.config[:rails][:active_support][:escape_html_entities_in_json]
|
293
|
+
|
294
|
+
json_escape_on = true
|
295
|
+
elsif version_between? "4.0.0", "5.0.0"
|
296
|
+
json_escape_on = true
|
297
|
+
end
|
298
|
+
|
299
|
+
if !json_escape_on or version_between? "0.0.0", "2.0.99"
|
300
|
+
@known_dangerous << :to_json
|
301
|
+
Brakeman.debug("Automatic to_json escaping not enabled, consider to_json dangerous")
|
302
|
+
else
|
303
|
+
@safe_input_attributes << :to_json
|
304
|
+
Brakeman.debug("Automatic to_json escaping is enabled.")
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
304
308
|
def raw_call? exp
|
305
309
|
exp.value.node_type == :call and exp.value.method == :raw
|
306
310
|
end
|
@@ -29,7 +29,7 @@ class Brakeman::CheckDigestDoS < Brakeman::BaseCheck
|
|
29
29
|
:message => message,
|
30
30
|
:confidence => confidence,
|
31
31
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/vxJjrc15qYM/discussion",
|
32
|
-
:
|
32
|
+
:gem_info => gemfile_or_environment
|
33
33
|
end
|
34
34
|
|
35
35
|
def with_http_digest?
|
@@ -11,10 +11,10 @@ class Brakeman::CheckEscapeFunction < Brakeman::BaseCheck
|
|
11
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
|
-
:warning_code => :
|
15
|
-
:message => 'Versions before 2.3.14 have a vulnerability in escape method when used with Ruby 1.8: CVE-2011-
|
14
|
+
:warning_code => :CVE_2011_2932,
|
15
|
+
:message => 'Versions before 2.3.14 have a vulnerability in escape method when used with Ruby 1.8: CVE-2011-2932',
|
16
16
|
:confidence => CONFIDENCE[:high],
|
17
|
-
:
|
17
|
+
:gem_info => gemfile_or_environment,
|
18
18
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/Vr_7WSOrEZU/discussion"
|
19
19
|
end
|
20
20
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'brakeman/checks/base_check'
|
2
|
+
|
3
|
+
class Brakeman::CheckFileDisclosure < Brakeman::BaseCheck
|
4
|
+
Brakeman::Checks.add self
|
5
|
+
|
6
|
+
@description = "Checks for versions with file existence disclosure vulnerability"
|
7
|
+
|
8
|
+
def run_check
|
9
|
+
fix_version = case
|
10
|
+
when version_between?('2.0.0', '2.3.18')
|
11
|
+
'3.2.21'
|
12
|
+
when version_between?('3.0.0', '3.2.20')
|
13
|
+
'3.2.21'
|
14
|
+
when version_between?('4.0.0', '4.0.11')
|
15
|
+
'4.0.12'
|
16
|
+
when version_between?('4.1.0', '4.1.7')
|
17
|
+
'4.1.8'
|
18
|
+
else
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
|
22
|
+
if fix_version and serves_static_assets?
|
23
|
+
warn :warning_type => "File Access",
|
24
|
+
:warning_code => :CVE_2014_7829,
|
25
|
+
:message => "Rails #{tracker.config[:rails_version]} has a file existence disclosure. Upgrade to #{fix_version} or disable serving static assets",
|
26
|
+
:confidence => CONFIDENCE[:high],
|
27
|
+
:gem_info => gemfile_or_environment,
|
28
|
+
:link_path => "https://groups.google.com/d/msg/rubyonrails-security/23fiuwb1NBA/MQVM1-5GkPMJ"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def serves_static_assets?
|
33
|
+
true? tracker.config[:rails][:serve_static_assets]
|
34
|
+
end
|
35
|
+
end
|
@@ -14,7 +14,7 @@ class Brakeman::CheckFilterSkipping < Brakeman::BaseCheck
|
|
14
14
|
:warning_code => :CVE_2011_2929,
|
15
15
|
:message => "Versions before 3.0.10 have a vulnerability which allows filters to be bypassed: CVE-2011-2929",
|
16
16
|
:confidence => CONFIDENCE[:high],
|
17
|
-
:
|
17
|
+
:gem_info => gemfile_or_environment,
|
18
18
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/NCCsca7TEtY/discussion"
|
19
19
|
end
|
20
20
|
end
|
@@ -37,7 +37,7 @@ class Brakeman::CheckForgerySetting < Brakeman::BaseCheck
|
|
37
37
|
:warning_code => :CVE_2011_0447,
|
38
38
|
:message => "CSRF protection is flawed in unpatched versions of Rails #{tracker.config[:rails_version]} (CVE-2011-0447). Upgrade to 2.3.11 or apply patches as needed",
|
39
39
|
:confidence => CONFIDENCE[:high],
|
40
|
-
:
|
40
|
+
:gem_info => gemfile_or_environment,
|
41
41
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/LZWjzCPgNmU/discussion"
|
42
42
|
|
43
43
|
elsif version_between? "3.0.0", "3.0.3"
|
@@ -47,7 +47,7 @@ class Brakeman::CheckForgerySetting < Brakeman::BaseCheck
|
|
47
47
|
:warning_code => :CVE_2011_0447,
|
48
48
|
:message => "CSRF protection is flawed in unpatched versions of Rails #{tracker.config[:rails_version]} (CVE-2011-0447). Upgrade to 3.0.4 or apply patches as needed",
|
49
49
|
:confidence => CONFIDENCE[:high],
|
50
|
-
:
|
50
|
+
:gem_info => gemfile_or_environment,
|
51
51
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/LZWjzCPgNmU/discussion"
|
52
52
|
end
|
53
53
|
end
|
@@ -19,7 +19,7 @@ class Brakeman::CheckHeaderDoS < Brakeman::BaseCheck
|
|
19
19
|
:warning_code => :CVE_2013_6414,
|
20
20
|
:message => message,
|
21
21
|
:confidence => CONFIDENCE[:med],
|
22
|
-
:
|
22
|
+
:gem_info => gemfile_or_environment,
|
23
23
|
:link_path => "https://groups.google.com/d/msg/ruby-security-ann/A-ebV4WxzKg/KNPTbX8XAQUJ"
|
24
24
|
end
|
25
25
|
end
|
@@ -8,8 +8,7 @@ class Brakeman::CheckI18nXSS < Brakeman::BaseCheck
|
|
8
8
|
def run_check
|
9
9
|
if (version_between? "3.0.6", "3.2.15" or version_between? "4.0.0", "4.0.1") and not has_workaround?
|
10
10
|
message = "Rails #{tracker.config[:rails_version]} has an XSS vulnerability in i18n (CVE-2013-4491). Upgrade to Rails version "
|
11
|
-
|
12
|
-
i18n_gem = tracker.config[:gems][:i18n]
|
11
|
+
i18n_gem = tracker.config[:gems][:i18n][:version] if tracker.config[:gems][:i18n]
|
13
12
|
|
14
13
|
if version_between? "3.0.6", "3.1.99" and version_before i18n_gem, "0.5.1"
|
15
14
|
message << "3.2.16 or i18n 0.5.1"
|
@@ -23,7 +22,7 @@ class Brakeman::CheckI18nXSS < Brakeman::BaseCheck
|
|
23
22
|
:warning_code => :CVE_2013_4491,
|
24
23
|
:message => message,
|
25
24
|
:confidence => CONFIDENCE[:med],
|
26
|
-
:
|
25
|
+
:gem_info => gemfile_or_environment(:i18n),
|
27
26
|
:link_path => "https://groups.google.com/d/msg/ruby-security-ann/pLrh6DUw998/bLFEyIO4k_EJ"
|
28
27
|
end
|
29
28
|
end
|
@@ -32,7 +32,7 @@ class Brakeman::CheckJRubyXML < Brakeman::BaseCheck
|
|
32
32
|
:warning_code => :CVE_2013_1856,
|
33
33
|
:message => "Rails #{tracker.config[:rails_version]} with JRuby has a vulnerability in XML parser: upgrade to #{fix_version} or patch",
|
34
34
|
:confidence => CONFIDENCE[:high],
|
35
|
-
:
|
35
|
+
:gem_info => gemfile_or_environment,
|
36
36
|
:link => "https://groups.google.com/d/msg/rubyonrails-security/KZwsQbYsOiI/5kUV7dSCJGwJ"
|
37
37
|
end
|
38
38
|
end
|
@@ -21,12 +21,17 @@ class Brakeman::CheckJSONParsing < Brakeman::BaseCheck
|
|
21
21
|
end
|
22
22
|
|
23
23
|
message = "Rails #{tracker.config[:rails_version]} has a serious JSON parsing vulnerability: upgrade to #{new_version} or patch"
|
24
|
+
if uses_yajl?
|
25
|
+
gem_info = gemfile_or_environment(:yajl)
|
26
|
+
else
|
27
|
+
gem_info = gemfile_or_environment
|
28
|
+
end
|
24
29
|
|
25
30
|
warn :warning_type => "Remote Code Execution",
|
26
31
|
:warning_code => :CVE_2013_0333,
|
27
32
|
:message => message,
|
28
33
|
:confidence => CONFIDENCE[:high],
|
29
|
-
:
|
34
|
+
:gem_info => gem_info,
|
30
35
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/1h2DR63ViGo/discussion"
|
31
36
|
end
|
32
37
|
end
|
@@ -55,8 +60,8 @@ class Brakeman::CheckJSONParsing < Brakeman::BaseCheck
|
|
55
60
|
|
56
61
|
def check_cve_2013_0269
|
57
62
|
[:json, :json_pure].each do |name|
|
58
|
-
|
59
|
-
check_json_version name, version if version
|
63
|
+
gem_hash = tracker.config[:gems][name] if tracker.config[:gems]
|
64
|
+
check_json_version name, gem_hash[:version] if gem_hash and gem_hash[:version]
|
60
65
|
end
|
61
66
|
end
|
62
67
|
|
@@ -90,7 +95,7 @@ class Brakeman::CheckJSONParsing < Brakeman::BaseCheck
|
|
90
95
|
:warning_code => :CVE_2013_0269,
|
91
96
|
:message => message,
|
92
97
|
:confidence => confidence,
|
93
|
-
:
|
98
|
+
:gem_info => gemfile_or_environment(name),
|
94
99
|
:link => "https://groups.google.com/d/topic/rubyonrails-security/4_YvCpLzL58/discussion"
|
95
100
|
end
|
96
101
|
|
@@ -24,7 +24,7 @@ class Brakeman::CheckMailTo < Brakeman::BaseCheck
|
|
24
24
|
:warning_code => :CVE_2011_0446,
|
25
25
|
:message => message,
|
26
26
|
:confidence => CONFIDENCE[:high],
|
27
|
-
:
|
27
|
+
:gem_info => gemfile_or_environment,
|
28
28
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/8CpI7egxX4E/discussion"
|
29
29
|
end
|
30
30
|
end
|
@@ -23,7 +23,7 @@ class Brakeman::CheckNestedAttributes < Brakeman::BaseCheck
|
|
23
23
|
:warning_code => :CVE_2010_3933,
|
24
24
|
:message => message,
|
25
25
|
:confidence => CONFIDENCE[:high],
|
26
|
-
:
|
26
|
+
:gem_info => gemfile_or_environment,
|
27
27
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/-fkT0yja_gw/discussion"
|
28
28
|
end
|
29
29
|
end
|