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
@@ -25,7 +25,7 @@ class Brakeman::CheckRenderDoS < Brakeman::BaseCheck
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def warn_about_text_render
|
28
|
-
message = "
|
28
|
+
message = msg(msg_version(rails_version), " has a denial of service vulnerability ", msg_cve("CVE-2014-0082"), ". Upgrade to ", msg_version("3.2.17"))
|
29
29
|
|
30
30
|
warn :warning_type => "Denial of Service",
|
31
31
|
:warning_code => :CVE_2014_0082,
|
@@ -26,7 +26,7 @@ class Brakeman::CheckRenderInline < Brakeman::CheckCrossSiteScripting
|
|
26
26
|
warn :result => result,
|
27
27
|
:warning_type => "Cross-Site Scripting",
|
28
28
|
:warning_code => :cross_site_scripting_inline,
|
29
|
-
:message => "Unescaped
|
29
|
+
:message => msg("Unescaped ", msg_input(input), " rendered inline"),
|
30
30
|
:user_input => input,
|
31
31
|
:confidence => :high
|
32
32
|
elsif input = has_immediate_model?(render_value)
|
@@ -12,7 +12,7 @@ class Brakeman::CheckResponseSplitting < Brakeman::BaseCheck
|
|
12
12
|
|
13
13
|
warn :warning_type => "Response Splitting",
|
14
14
|
:warning_code => :CVE_2011_3186,
|
15
|
-
:message => "
|
15
|
+
:message => msg("Rails versions before 2.3.14 have a vulnerability content type handling allowing injection of headers ", msg_cve("CVE-2011-3186")),
|
16
16
|
:confidence => :medium,
|
17
17
|
:gem_info => gemfile_or_environment,
|
18
18
|
:link_path => "https://groups.google.com/d/topic/rubyonrails-security/b_yTveAph2g/discussion"
|
@@ -16,7 +16,7 @@ class Brakeman::CheckRouteDoS < Brakeman::BaseCheck
|
|
16
16
|
end
|
17
17
|
|
18
18
|
if controller_wildcards?
|
19
|
-
message = "
|
19
|
+
message = msg(msg_version(rails_version), " has a denial of service vulnerability with ", msg_code(":controller"), " routes ", msg_cve("CVE-2015-7581"), ". Upgrade to ", msg_version(fix_version))
|
20
20
|
|
21
21
|
warn :warning_type => "Denial of Service",
|
22
22
|
:warning_code => :CVE_2015_7581,
|
@@ -20,7 +20,7 @@ class Brakeman::CheckSafeBufferManipulation < Brakeman::BaseCheck
|
|
20
20
|
return
|
21
21
|
end
|
22
22
|
|
23
|
-
message = "
|
23
|
+
message = msg(msg_version(rails_version), " has a vulnerability in ", msg_code("SafeBuffer"), ". Upgrade to ", msg_version(suggested_version), " or apply patches")
|
24
24
|
|
25
25
|
warn :warning_type => "Cross-Site Scripting",
|
26
26
|
:warning_code => :safe_buffer_vuln,
|
@@ -44,7 +44,7 @@ class Brakeman::CheckSanitizeMethods < Brakeman::BaseCheck
|
|
44
44
|
next if duplicate? result
|
45
45
|
add_result result
|
46
46
|
|
47
|
-
message = "
|
47
|
+
message = msg(msg_version(rails_version), " has a vulnerability in ", msg_code(method), ". Upgrade to ", msg_version(@fix_version), " or patch")
|
48
48
|
|
49
49
|
warn :result => result,
|
50
50
|
:warning_type => "Cross-Site Scripting",
|
@@ -70,7 +70,7 @@ class Brakeman::CheckSanitizeMethods < Brakeman::BaseCheck
|
|
70
70
|
|
71
71
|
def check_cve_2018_8048
|
72
72
|
if loofah_vulnerable_cve_2018_8048?
|
73
|
-
message =
|
73
|
+
message = msg(msg_version(tracker.config.gem_version(:loofah), "loofah gem"), " is vulnerable (CVE-2018-8048). Upgrade to 2.1.2")
|
74
74
|
|
75
75
|
if tracker.find_call(:target => false, :method => :sanitize).any?
|
76
76
|
confidence = :high
|
@@ -94,7 +94,7 @@ class Brakeman::CheckSanitizeMethods < Brakeman::BaseCheck
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def warn_sanitizer_cve cve, link, upgrade_version
|
97
|
-
message =
|
97
|
+
message = msg(msg_version(tracker.config.gem_version(:'rails-html-sanitizer'), "rails-html-sanitizer"), " is vulnerable ", msg_cve(cve), ". Upgrade to ", msg_version(upgrade_version, "rails-html-sanitizer"))
|
98
98
|
|
99
99
|
if tracker.find_call(:target => false, :method => :sanitize).any?
|
100
100
|
confidence = :high
|
@@ -24,7 +24,7 @@ class Brakeman::CheckSecrets < Brakeman::BaseCheck
|
|
24
24
|
|
25
25
|
warn :warning_code => :secret_in_source,
|
26
26
|
:warning_type => "Authentication",
|
27
|
-
:message => "Hardcoded value for
|
27
|
+
:message => msg("Hardcoded value for ", msg_code(name), " in source code"),
|
28
28
|
:confidence => :medium,
|
29
29
|
:file => constant.file,
|
30
30
|
:line => constant.line
|
@@ -21,7 +21,7 @@ class Brakeman::CheckSelectTag < Brakeman::BaseCheck
|
|
21
21
|
|
22
22
|
@ignore_methods = Set[:escapeHTML, :escape_once, :h].merge tracker.options[:safe_methods]
|
23
23
|
|
24
|
-
@message = "Upgrade to
|
24
|
+
@message = msg("Upgrade to ", msg_version(suggested_version), ". In ", msg_version(rails_version), " ", msg_code("select_tag"), " is vulnerable ", msg_cve("CVE-2012-3463"))
|
25
25
|
|
26
26
|
calls = tracker.find_call(:target => nil, :method => :select_tag).select do |result|
|
27
27
|
result[:location][:type] == :template
|
@@ -23,7 +23,7 @@ class Brakeman::CheckSelectVulnerability < Brakeman::BaseCheck
|
|
23
23
|
return
|
24
24
|
end
|
25
25
|
|
26
|
-
@message = "Upgrade to
|
26
|
+
@message = msg("Upgrade to ", msg_version(suggested_version), ". In ", msg_version(rails_version), " ", msg_code("select"), " helper is vulnerable")
|
27
27
|
|
28
28
|
calls = tracker.find_call(:target => nil, :method => :select).select do |result|
|
29
29
|
result[:location][:type] == :template
|
@@ -26,7 +26,7 @@ class Brakeman::CheckSessionManipulation < Brakeman::BaseCheck
|
|
26
26
|
warn :result => result,
|
27
27
|
:warning_type => "Session Manipulation",
|
28
28
|
:warning_code => :session_key_manipulation,
|
29
|
-
:message =>
|
29
|
+
:message => msg(msg_input(input), " used as key in session hash"),
|
30
30
|
:code => result[:call],
|
31
31
|
:user_input => input,
|
32
32
|
:confidence => confidence
|
@@ -123,7 +123,7 @@ class Brakeman::CheckSessionSettings < Brakeman::BaseCheck
|
|
123
123
|
return
|
124
124
|
end
|
125
125
|
|
126
|
-
if secrets["production"] and secret = secrets["production"]["secret_key_base"]
|
126
|
+
if secrets && secrets["production"] and secret = secrets["production"]["secret_key_base"]
|
127
127
|
unless secret.include? "<%="
|
128
128
|
line = yaml.lines.find_index { |l| l.include? secret } + 1
|
129
129
|
|
@@ -16,7 +16,7 @@ class Brakeman::CheckSimpleFormat < Brakeman::CheckCrossSiteScripting
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def generic_warning
|
19
|
-
message = "
|
19
|
+
message = msg(msg_version(rails_version), " has a vulnerability in ", msg_code("simple_format"), " ", msg_cve("CVE-2013-6416"), ". Upgrade to ", msg_version("4.0.2"))
|
20
20
|
|
21
21
|
warn :warning_type => "Cross-Site Scripting",
|
22
22
|
:warning_code => :CVE_2013_6416,
|
@@ -50,7 +50,7 @@ class Brakeman::CheckSimpleFormat < Brakeman::CheckCrossSiteScripting
|
|
50
50
|
warn :result => result,
|
51
51
|
:warning_type => "Cross-Site Scripting",
|
52
52
|
:warning_code => :CVE_2013_6416_call,
|
53
|
-
:message => "Values passed to simple_format are not safe in
|
53
|
+
:message => msg("Values passed to ", msg_code("simple_format"), " are not safe in ", msg_version(rails_version)),
|
54
54
|
:confidence => :high,
|
55
55
|
:link_path => "https://groups.google.com/d/msg/ruby-security-ann/5ZI1-H5OoIM/ZNq4FoR2GnIJ",
|
56
56
|
:user_input => match
|
@@ -16,17 +16,21 @@ class Brakeman::CheckSingleQuotes < Brakeman::BaseCheck
|
|
16
16
|
def run_check
|
17
17
|
return if uses_rack_escape?
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
message = "All Rails 2.x versions do not escape single quotes (CVE-2012-3464)"
|
22
|
-
when version_between?('3.0.0', '3.0.16')
|
23
|
-
message = "Rails #{rails_version} does not escape single quotes (CVE-2012-3464). Upgrade to 3.0.17"
|
24
|
-
when version_between?('3.1.0', '3.1.7')
|
25
|
-
message = "Rails #{rails_version} does not escape single quotes (CVE-2012-3464). Upgrade to 3.1.8"
|
26
|
-
when version_between?('3.2.0', '3.2.7')
|
27
|
-
message = "Rails #{rails_version} does not escape single quotes (CVE-2012-3464). Upgrade to 3.2.8"
|
19
|
+
if version_between? '2.0.0', '2.3.14'
|
20
|
+
message = msg("All Rails 2.x versions do not escape single quotes ", msg_cve("CVE-2012-3464"))
|
28
21
|
else
|
29
|
-
|
22
|
+
message = msg(msg_version(rails_version), " does not escape single quotes ", msg_cve("CVE-2012-3464"), ". Upgrade to ")
|
23
|
+
|
24
|
+
case
|
25
|
+
when version_between?('3.0.0', '3.0.16')
|
26
|
+
message << msg_version('3.0.17')
|
27
|
+
when version_between?('3.1.0', '3.1.7')
|
28
|
+
message << msg_version('3.1.8')
|
29
|
+
when version_between?('3.2.0', '3.2.7')
|
30
|
+
message << msg_version('3.2.8')
|
31
|
+
else
|
32
|
+
return
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
warn :warning_type => "Cross-Site Scripting",
|
@@ -26,7 +26,7 @@ class Brakeman::CheckSkipBeforeFilter < Brakeman::BaseCheck
|
|
26
26
|
warn :class => controller.name, #ugh this should be a controller warning, too
|
27
27
|
:warning_type => "Cross-Site Request Forgery",
|
28
28
|
:warning_code => :csrf_blacklist,
|
29
|
-
:message => "Use whitelist (:only => [..]) when skipping CSRF check",
|
29
|
+
:message => msg("Use whitelist (", msg_code(":only => [..]"), ") when skipping CSRF check"),
|
30
30
|
:code => filter,
|
31
31
|
:confidence => :medium,
|
32
32
|
:file => controller.file
|
@@ -35,7 +35,7 @@ class Brakeman::CheckSkipBeforeFilter < Brakeman::BaseCheck
|
|
35
35
|
warn :controller => controller.name,
|
36
36
|
:warning_code => :auth_blacklist,
|
37
37
|
:warning_type => "Authentication",
|
38
|
-
:message => "Use whitelist (:only => [..]) when skipping authentication",
|
38
|
+
:message => msg("Use whitelist (", msg_code(":only => [..]"), ") when skipping authentication"),
|
39
39
|
:code => filter,
|
40
40
|
:confidence => :medium,
|
41
41
|
:link => "authentication_whitelist",
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Brakeman::CheckSprocketsPathTraversal < Brakeman::BaseCheck
|
2
|
+
Brakeman::Checks.add self
|
3
|
+
|
4
|
+
@description = "Checks for CVE-2018-3760"
|
5
|
+
|
6
|
+
def run_check
|
7
|
+
sprockets_version = tracker.config.gem_version(:sprockets)
|
8
|
+
|
9
|
+
return unless sprockets_version
|
10
|
+
return if has_workaround?
|
11
|
+
|
12
|
+
case
|
13
|
+
when version_between?("0.0.0", "2.12.4", sprockets_version)
|
14
|
+
upgrade_version = "2.12.5"
|
15
|
+
confidence = :weak
|
16
|
+
when version_between?("3.0.0", "3.7.1", sprockets_version)
|
17
|
+
upgrade_version = "3.7.2"
|
18
|
+
confidence = :high
|
19
|
+
when version_between?("4.0.0.beta1", "4.0.0.beta7", sprockets_version)
|
20
|
+
upgrade_version = "4.0.0.beta8"
|
21
|
+
confidence = :high
|
22
|
+
else
|
23
|
+
return
|
24
|
+
end
|
25
|
+
|
26
|
+
message = msg(msg_version(sprockets_version, "sprockets"), " has a path traversal vulnerability ", msg_cve("CVE-2018-3760"), ". Upgrade to ", msg_version(upgrade_version, "sprockets"), " or newer")
|
27
|
+
|
28
|
+
warn :warning_type => "Path Traversal",
|
29
|
+
:warning_code => :CVE_2018_3760,
|
30
|
+
:message => message,
|
31
|
+
:confidence => confidence,
|
32
|
+
:gem_info => gemfile_or_environment(:sprockets),
|
33
|
+
:link_path => "https://groups.google.com/d/msg/rubyonrails-security/ft_J--l55fM/7roDfQ50BwAJ"
|
34
|
+
end
|
35
|
+
|
36
|
+
def has_workaround?
|
37
|
+
false? (tracker.config.rails[:assets] and tracker.config.rails[:assets][:compile])
|
38
|
+
end
|
39
|
+
end
|
@@ -247,7 +247,7 @@ class Brakeman::CheckSQL < Brakeman::BaseCheck
|
|
247
247
|
warn :result => result,
|
248
248
|
:warning_type => "SQL Injection",
|
249
249
|
:warning_code => :sql_injection_limit_offset,
|
250
|
-
:message => "Upgrade to Rails >= 2.1.2 to escape :limit and
|
250
|
+
:message => msg("Upgrade to Rails >= 2.1.2 to escape ", msg_code(":limit"), " and ", msg_code("offset"), ". Possible SQL injection"),
|
251
251
|
:confidence => confidence
|
252
252
|
end
|
253
253
|
end
|
@@ -78,7 +78,7 @@ class Brakeman::CheckSQLCVEs < Brakeman::BaseCheck
|
|
78
78
|
|
79
79
|
warn :warning_type => 'SQL Injection',
|
80
80
|
:warning_code => code,
|
81
|
-
:message => "
|
81
|
+
:message => msg(msg_version(rails_version), " contains a SQL injection vulnerability ", msg_cve(cve), ". Upgrade to ", msg_version(upgrade_version)),
|
82
82
|
:confidence => :high,
|
83
83
|
:gem_info => gemfile_or_environment,
|
84
84
|
:link_path => link
|
@@ -98,7 +98,7 @@ class Brakeman::CheckSQLCVEs < Brakeman::BaseCheck
|
|
98
98
|
|
99
99
|
warn :warning_type => 'SQL Injection',
|
100
100
|
:warning_code => :CVE_2014_0080,
|
101
|
-
:message => "
|
101
|
+
:message => msg(msg_version(rails_version), " contains a SQL injection vulnerability ", msg_cve("CVE-2014-0080"), " with PostgreSQL. Upgrade to ", msg_version("4.0.3")),
|
102
102
|
:confidence => :high,
|
103
103
|
:gem_info => gemfile_or_environment(:pg),
|
104
104
|
:link_path => "https://groups.google.com/d/msg/rubyonrails-security/Wu96YkTUR6s/pPLBMZrlwvYJ"
|
@@ -25,9 +25,9 @@ class Brakeman::CheckStripTags < Brakeman::BaseCheck
|
|
25
25
|
def cve_2011_2931
|
26
26
|
if version_between?('2.0.0', '2.3.12') or version_between?('3.0.0', '3.0.9')
|
27
27
|
if rails_version =~ /^3/
|
28
|
-
message = "Versions before 3.0.10 have a vulnerability in strip_tags (CVE-2011-2931)
|
28
|
+
message = msg("Versions before 3.0.10 have a vulnerability in ", msg_code("strip_tags"), " ", msg_cve("CVE-2011-2931"))
|
29
29
|
else
|
30
|
-
message = "Versions before 2.3.13 have a vulnerability in strip_tags (CVE-2011-2931)
|
30
|
+
message = msg("Versions before 2.3.13 have a vulnerability in ", msg_code("strip_tags"), " ", msg_cve("CVE-2011-2931"))
|
31
31
|
end
|
32
32
|
|
33
33
|
warn :warning_type => "Cross-Site Scripting",
|
@@ -40,15 +40,17 @@ class Brakeman::CheckStripTags < Brakeman::BaseCheck
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def cve_2012_3465
|
43
|
+
message = msg(msg_version(rails_version), " has a vulnerability in ", msg_code("strip_tags"), " ", msg_cve("CVE-2012-3465"), ". Upgrade to ")
|
44
|
+
|
43
45
|
case
|
44
46
|
when (version_between?('2.0.0', '2.3.14') and tracker.config.escape_html?)
|
45
|
-
message = "All Rails 2.x versions have a vulnerability in strip_tags (CVE-2012-3465)
|
47
|
+
message = msg("All Rails 2.x versions have a vulnerability in ", msg_code("strip_tags"), " ", msg_cve("CVE-2012-3465"))
|
46
48
|
when version_between?('3.0.10', '3.0.16')
|
47
|
-
message
|
49
|
+
message << msg_version('3.0.17')
|
48
50
|
when version_between?('3.1.0', '3.1.7')
|
49
|
-
message
|
51
|
+
message << msg_version('3.1.8')
|
50
52
|
when version_between?('3.2.0', '3.2.7')
|
51
|
-
message
|
53
|
+
message << msg_version('3.2.8')
|
52
54
|
else
|
53
55
|
return
|
54
56
|
end
|
@@ -69,13 +71,13 @@ class Brakeman::CheckStripTags < Brakeman::BaseCheck
|
|
69
71
|
confidence = :medium
|
70
72
|
end
|
71
73
|
|
72
|
-
message = "rails-html-sanitizer
|
74
|
+
message = msg(msg_version("1.0.2", "rails-html-sanitizer"), " is vulnerable (CVE-2015-7579). Upgrade to ", msg_version("1.0.3", "rails-html-sanitizer"))
|
73
75
|
|
74
76
|
warn :warning_type => "Cross-Site Scripting",
|
75
77
|
:warning_code => :CVE_2015_7579,
|
76
78
|
:message => message,
|
77
79
|
:confidence => confidence,
|
78
|
-
:gem_info => gemfile_or_environment,
|
80
|
+
:gem_info => gemfile_or_environment(:"rails-html-sanitizer"),
|
79
81
|
:link_path => "https://groups.google.com/d/msg/rubyonrails-security/OU9ugTZcbjc/PjEP46pbFQAJ"
|
80
82
|
|
81
83
|
end
|
@@ -38,7 +38,7 @@ class Brakeman::CheckSymbolDoS < Brakeman::BaseCheck
|
|
38
38
|
return if safe_parameter? input.match
|
39
39
|
return if symbolizing_attributes? input
|
40
40
|
|
41
|
-
message = "Symbol conversion from unsafe string (
|
41
|
+
message = msg("Symbol conversion from unsafe string in ", msg_input(input))
|
42
42
|
|
43
43
|
warn :result => result,
|
44
44
|
:warning_type => "Denial of Service",
|
@@ -20,7 +20,7 @@ class Brakeman::CheckSymbolDoSCVE < Brakeman::BaseCheck
|
|
20
20
|
if fix_version && active_record_models.any?
|
21
21
|
warn :warning_type => "Denial of Service",
|
22
22
|
:warning_code => :CVE_2013_1854,
|
23
|
-
:message => "
|
23
|
+
:message => msg(msg_version(rails_version), " has a denial of service vulnerability in ActiveRecord. Upgrade to ", msg_version(fix_version), " or patch"),
|
24
24
|
:confidence => :medium,
|
25
25
|
:gem_info => gemfile_or_environment,
|
26
26
|
:link => "https://groups.google.com/d/msg/rubyonrails-security/jgJ4cjjS8FE/BGbHRxnDRTIJ"
|
@@ -18,15 +18,15 @@ class Brakeman::CheckTranslateBug < Brakeman::BaseCheck
|
|
18
18
|
:medium
|
19
19
|
end
|
20
20
|
|
21
|
-
description = "
|
21
|
+
description = [" has a vulnerability in the translate helper with keys ending in ", msg_code("_html")]
|
22
22
|
|
23
23
|
message = if rails_version =~ /^3\.1/
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
msg(msg_version(rails_version), *description, ". Upgrade to ", msg_version("3.1.2"))
|
25
|
+
elsif rails_version =~ /^3\.0/
|
26
|
+
msg(msg_version(rails_version), *description, ". Upgrade to ", msg_version("3.0.11"))
|
27
|
+
else
|
28
|
+
msg("Rails 2.3.x using the rails_xss plugin", *description)
|
29
|
+
end
|
30
30
|
|
31
31
|
warn :warning_type => "Cross-Site Scripting",
|
32
32
|
:warning_code => :translate_vuln,
|
@@ -37,7 +37,7 @@ class Brakeman::CheckUnsafeReflection < Brakeman::BaseCheck
|
|
37
37
|
end
|
38
38
|
|
39
39
|
if confidence
|
40
|
-
message = "Unsafe reflection method
|
40
|
+
message = msg("Unsafe reflection method ", msg_code(method), " called with ", msg_input(input))
|
41
41
|
|
42
42
|
warn :result => result,
|
43
43
|
:warning_type => "Remote Code Execution",
|
@@ -37,7 +37,7 @@ class Brakeman::CheckUnscopedFind < Brakeman::BaseCheck
|
|
37
37
|
warn :result => result,
|
38
38
|
:warning_type => "Unscoped Find",
|
39
39
|
:warning_code => :unscoped_find,
|
40
|
-
:message => "Unscoped call to #{result[:target]}##{result[:method]}",
|
40
|
+
:message => msg("Unscoped call to ", msg_code("#{result[:target]}##{result[:method]}")),
|
41
41
|
:code => result[:call],
|
42
42
|
:confidence => :weak,
|
43
43
|
:user_input => input
|
@@ -89,7 +89,7 @@ class Brakeman::CheckValidationRegex < Brakeman::BaseCheck
|
|
89
89
|
warn :model => @current_model,
|
90
90
|
:warning_type => "Format Validation",
|
91
91
|
:warning_code => :validation_regex,
|
92
|
-
:message => "Insufficient validation for
|
92
|
+
:message => msg("Insufficient validation for ", msg_code(get_name validator), " using ", msg_code(regex.inspect), ". Use ", msg_code("\\A"), " and ", msg_code("\\z"), " as anchors"),
|
93
93
|
:line => value.line,
|
94
94
|
:confidence => :high
|
95
95
|
end
|
@@ -39,20 +39,19 @@ class Brakeman::CheckWeakHash < Brakeman::BaseCheck
|
|
39
39
|
confidence = :medium
|
40
40
|
end
|
41
41
|
|
42
|
+
message = msg("Weak hashing algorithm used")
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
""
|
50
|
-
end
|
44
|
+
case call.target.last
|
45
|
+
when :MD5
|
46
|
+
message << ": " << msg_lit("MD5")
|
47
|
+
when :SHA1
|
48
|
+
message << ": " << msg_lit("SHA1")
|
49
|
+
end
|
51
50
|
|
52
51
|
warn :result => result,
|
53
52
|
:warning_type => "Weak Hash",
|
54
53
|
:warning_code => :weak_hash_digest,
|
55
|
-
:message =>
|
54
|
+
:message => message,
|
56
55
|
:confidence => confidence,
|
57
56
|
:user_input => input
|
58
57
|
end
|
@@ -62,19 +61,19 @@ class Brakeman::CheckWeakHash < Brakeman::BaseCheck
|
|
62
61
|
|
63
62
|
call = result[:call]
|
64
63
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
64
|
+
message = msg("Weak hashing algorithm used in HMAC")
|
65
|
+
|
66
|
+
case call.third_arg.last
|
67
|
+
when :MD5
|
68
|
+
message << ": " << msg_lit("MD5")
|
69
|
+
when :SHA1
|
70
|
+
message << ": " << msg_lit("SHA1")
|
71
|
+
end
|
73
72
|
|
74
73
|
warn :result => result,
|
75
74
|
:warning_type => "Weak Hash",
|
76
75
|
:warning_code => :weak_hash_hmac,
|
77
|
-
:message =>
|
76
|
+
:message => message,
|
78
77
|
:confidence => :medium
|
79
78
|
end
|
80
79
|
|
@@ -90,7 +89,7 @@ class Brakeman::CheckWeakHash < Brakeman::BaseCheck
|
|
90
89
|
warn :result => result,
|
91
90
|
:warning_type => "Weak Hash",
|
92
91
|
:warning_code => :weak_hash_digest,
|
93
|
-
:message => "Weak hashing algorithm (
|
92
|
+
:message => msg("Weak hashing algorithm used: ", msg_lit(alg)),
|
94
93
|
:confidence => :medium
|
95
94
|
end
|
96
95
|
end
|