brakeman 1.9.5 → 2.0.0.pre2
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 +27 -0
- data/README.md +5 -2
- data/bin/brakeman +20 -15
- data/lib/brakeman.rb +106 -80
- data/lib/brakeman/app_tree.rb +22 -11
- data/lib/brakeman/call_index.rb +4 -4
- data/lib/brakeman/checks/base_check.rb +33 -5
- data/lib/brakeman/checks/check_basic_auth.rb +2 -1
- data/lib/brakeman/checks/check_content_tag.rb +8 -29
- data/lib/brakeman/checks/check_cross_site_scripting.rb +10 -19
- data/lib/brakeman/checks/check_deserialize.rb +57 -0
- data/lib/brakeman/checks/check_execute.rb +3 -11
- data/lib/brakeman/checks/check_file_access.rb +1 -14
- data/lib/brakeman/checks/check_forgery_setting.rb +5 -4
- data/lib/brakeman/checks/check_link_to.rb +4 -15
- data/lib/brakeman/checks/check_link_to_href.rb +1 -8
- data/lib/brakeman/checks/check_mass_assignment.rb +6 -2
- data/lib/brakeman/checks/check_model_attributes.rb +1 -0
- data/lib/brakeman/checks/check_model_serialize.rb +2 -1
- data/lib/brakeman/checks/check_render.rb +2 -15
- data/lib/brakeman/checks/check_select_tag.rb +1 -1
- data/lib/brakeman/checks/check_select_vulnerability.rb +2 -2
- data/lib/brakeman/checks/check_send.rb +3 -0
- data/lib/brakeman/checks/check_session_settings.rb +2 -3
- data/lib/brakeman/checks/check_skip_before_filter.rb +5 -2
- data/lib/brakeman/checks/check_sql.rb +59 -50
- data/lib/brakeman/checks/check_symbol_dos.rb +5 -14
- data/lib/brakeman/checks/check_unsafe_reflection.rb +2 -15
- data/lib/brakeman/options.rb +14 -9
- data/lib/brakeman/processors/controller_alias_processor.rb +4 -10
- data/lib/brakeman/processors/controller_processor.rb +53 -14
- data/lib/brakeman/processors/lib/find_all_calls.rb +40 -40
- data/lib/brakeman/processors/lib/processor_helper.rb +5 -1
- data/lib/brakeman/processors/lib/rails3_config_processor.rb +8 -0
- data/lib/brakeman/processors/output_processor.rb +23 -1
- data/lib/brakeman/report.rb +28 -14
- data/lib/brakeman/scanner.rb +5 -3
- data/lib/brakeman/tracker.rb +7 -7
- data/lib/brakeman/util.rb +5 -3
- data/lib/brakeman/version.rb +1 -1
- data/lib/brakeman/warning.rb +12 -9
- data/lib/ruby_parser/bm_sexp.rb +5 -1
- data/lib/tasks/brakeman.rake +10 -0
- metadata +11 -9
- data/lib/brakeman/checks/check_yaml_load.rb +0 -55
@@ -0,0 +1,10 @@
|
|
1
|
+
namespace :brakeman do
|
2
|
+
|
3
|
+
desc "Run Brakeman"
|
4
|
+
task :run, :output_files do |t, args|
|
5
|
+
require 'brakeman'
|
6
|
+
|
7
|
+
files = args[:output_files].split(' ') if args[:output_files]
|
8
|
+
Brakeman.run :app_path => ".", :output_files => files, :print_report => true
|
9
|
+
end
|
10
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brakeman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre2
|
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
|
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-16 00:00:00 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby_parser
|
@@ -26,9 +26,9 @@ dependencies:
|
|
26
26
|
prerelease: false
|
27
27
|
requirement: &id002 !ruby/object:Gem::Requirement
|
28
28
|
requirements:
|
29
|
-
- -
|
29
|
+
- - ~>
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version: 2.0.
|
31
|
+
version: 2.0.5
|
32
32
|
type: :runtime
|
33
33
|
version_requirements: *id002
|
34
34
|
- !ruby/object:Gem::Dependency
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 1.6.19
|
62
62
|
type: :runtime
|
63
63
|
version_requirements: *id005
|
64
64
|
- !ruby/object:Gem::Dependency
|
@@ -177,6 +177,7 @@ files:
|
|
177
177
|
- lib/brakeman/checks/check_symbol_dos.rb
|
178
178
|
- lib/brakeman/checks/check_sanitize_methods.rb
|
179
179
|
- lib/brakeman/checks/check_file_access.rb
|
180
|
+
- lib/brakeman/checks/check_deserialize.rb
|
180
181
|
- lib/brakeman/checks/base_check.rb
|
181
182
|
- lib/brakeman/checks/check_validation_regex.rb
|
182
183
|
- lib/brakeman/checks/check_evaluation.rb
|
@@ -188,7 +189,6 @@ files:
|
|
188
189
|
- lib/brakeman/checks/check_translate_bug.rb
|
189
190
|
- lib/brakeman/checks/check_jruby_xml.rb
|
190
191
|
- lib/brakeman/checks/check_default_routes.rb
|
191
|
-
- lib/brakeman/checks/check_yaml_load.rb
|
192
192
|
- lib/brakeman/checks/check_link_to.rb
|
193
193
|
- lib/brakeman/checks/check_quote_table_name.rb
|
194
194
|
- lib/brakeman/checks/check_send.rb
|
@@ -232,6 +232,7 @@ files:
|
|
232
232
|
- lib/ruby_parser/bm_sexp.rb
|
233
233
|
- lib/ruby_parser/bm_sexp_processor.rb
|
234
234
|
- lib/brakeman.rb
|
235
|
+
- lib/tasks/brakeman.rake
|
235
236
|
homepage: http://brakemanscanner.org
|
236
237
|
licenses:
|
237
238
|
- MIT
|
@@ -244,13 +245,14 @@ require_paths:
|
|
244
245
|
- lib
|
245
246
|
required_ruby_version: !ruby/object:Gem::Requirement
|
246
247
|
requirements:
|
247
|
-
-
|
248
|
-
- ">="
|
248
|
+
- - ">="
|
249
249
|
- !ruby/object:Gem::Version
|
250
250
|
version: "0"
|
251
251
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
252
252
|
requirements:
|
253
|
-
-
|
253
|
+
- - ">"
|
254
|
+
- !ruby/object:Gem::Version
|
255
|
+
version: 1.3.1
|
254
256
|
requirements: []
|
255
257
|
|
256
258
|
rubyforge_project:
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'brakeman/checks/base_check'
|
2
|
-
|
3
|
-
#YAML.load can be used for remote code execution
|
4
|
-
class Brakeman::CheckYAMLLoad < Brakeman::BaseCheck
|
5
|
-
Brakeman::Checks.add self
|
6
|
-
|
7
|
-
@description = "Checks for uses of YAML.load"
|
8
|
-
|
9
|
-
def run_check
|
10
|
-
yaml_methods = [:load, :load_documents, :load_stream, :parse_documents, :parse_stream]
|
11
|
-
|
12
|
-
tracker.find_call(:target => :YAML, :methods => yaml_methods ).each do |result|
|
13
|
-
check_yaml_load result
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def check_yaml_load result
|
18
|
-
return if duplicate? result
|
19
|
-
add_result result
|
20
|
-
|
21
|
-
arg = result[:call].first_arg
|
22
|
-
method = result[:call].method
|
23
|
-
|
24
|
-
if input = has_immediate_user_input?(arg)
|
25
|
-
confidence = CONFIDENCE[:high]
|
26
|
-
elsif input = include_user_input?(arg)
|
27
|
-
confidence = CONFIDENCE[:med]
|
28
|
-
end
|
29
|
-
|
30
|
-
if confidence
|
31
|
-
input_type = case input.type
|
32
|
-
when :params
|
33
|
-
"parameter value"
|
34
|
-
when :cookies
|
35
|
-
"cookies value"
|
36
|
-
when :request
|
37
|
-
"request value"
|
38
|
-
when :model
|
39
|
-
"model attribute"
|
40
|
-
else
|
41
|
-
"user input"
|
42
|
-
end
|
43
|
-
|
44
|
-
message = "YAML.#{method} called with #{input_type}"
|
45
|
-
|
46
|
-
warn :result => result,
|
47
|
-
:warning_type => "Remote Code Execution",
|
48
|
-
:warning_code => :unsafe_deserialize,
|
49
|
-
:message => message,
|
50
|
-
:user_input => input.match,
|
51
|
-
:confidence => confidence,
|
52
|
-
:link_path => "remote_code_execution_yaml_load"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|