brakeman 7.1.2 → 8.0.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.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +11 -0
  3. data/README.md +1 -1
  4. data/bundle/load.rb +2 -2
  5. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/CHANGELOG +111 -0
  6. data/bundle/ruby/3.2.0/gems/{erubis-2.7.0 → erubi-1.13.1}/MIT-LICENSE +1 -0
  7. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/README.rdoc +151 -0
  8. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi/capture_block.rb +91 -0
  9. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi/capture_end.rb +58 -0
  10. data/bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi.rb +299 -0
  11. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/asciidoc.rb +12 -5
  12. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/babel.rb +5 -0
  13. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/builder.rb +4 -0
  14. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/coffee.rb +14 -4
  15. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/commonmarker.rb +41 -0
  16. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/csv.rb +63 -0
  17. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/erb.rb +130 -0
  18. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/erubi.rb +41 -8
  19. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/etanni.rb +7 -0
  20. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/haml.rb +67 -1
  21. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/kramdown.rb +59 -0
  22. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/liquid.rb +93 -0
  23. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/livescript.rb +11 -4
  24. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/mapping.rb +8 -8
  25. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/markaby.rb +11 -2
  26. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/nokogiri.rb +13 -2
  27. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/pandoc.rb +81 -0
  28. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/pipeline.rb +6 -1
  29. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/plain.rb +5 -1
  30. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/prawn.rb +17 -6
  31. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/radius.rb +96 -0
  32. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rdiscount.rb +82 -0
  33. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rdoc.rb +33 -0
  34. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/redcarpet.rb +73 -0
  35. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/redcloth.rb +40 -0
  36. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rst-pandoc.rb +33 -0
  37. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/sass.rb +16 -3
  38. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/slim.rb +18 -0
  39. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/string.rb +10 -2
  40. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/template.rb +5 -5
  41. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/typescript.rb +5 -0
  42. data/bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/yajl.rb +91 -0
  43. data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt.rb +1 -2
  44. data/lib/brakeman/app_tree.rb +7 -2
  45. data/lib/brakeman/checks/check_model_attributes.rb +1 -1
  46. data/lib/brakeman/checks/check_render.rb +1 -27
  47. data/lib/brakeman/checks/check_render_rce.rb +43 -0
  48. data/lib/brakeman/checks/check_session_settings.rb +1 -1
  49. data/lib/brakeman/checks.rb +31 -25
  50. data/lib/brakeman/commandline.rb +6 -1
  51. data/lib/brakeman/file_parser.rb +3 -2
  52. data/lib/brakeman/logger.rb +264 -0
  53. data/lib/brakeman/options.rb +0 -9
  54. data/lib/brakeman/parsers/rails_erubi.rb +82 -0
  55. data/lib/brakeman/parsers/template_parser.rb +7 -15
  56. data/lib/brakeman/processor.rb +2 -2
  57. data/lib/brakeman/processors/controller_alias_processor.rb +1 -1
  58. data/lib/brakeman/processors/controller_processor.rb +3 -3
  59. data/lib/brakeman/processors/{erubis_template_processor.rb → erubi_template_procesor.rb} +3 -3
  60. data/lib/brakeman/processors/lib/rails2_config_processor.rb +4 -3
  61. data/lib/brakeman/processors/lib/rails2_route_processor.rb +1 -1
  62. data/lib/brakeman/processors/lib/render_helper.rb +1 -1
  63. data/lib/brakeman/processors/lib/render_path.rb +1 -1
  64. data/lib/brakeman/processors/model_processor.rb +1 -1
  65. data/lib/brakeman/report/ignore/config.rb +1 -1
  66. data/lib/brakeman/scanner.rb +25 -49
  67. data/lib/brakeman/tracker/collection.rb +12 -2
  68. data/lib/brakeman/tracker/config.rb +17 -13
  69. data/lib/brakeman/tracker/constants.rb +17 -2
  70. data/lib/brakeman/tracker/controller.rb +1 -1
  71. data/lib/brakeman/tracker.rb +7 -15
  72. data/lib/brakeman/version.rb +1 -1
  73. data/lib/brakeman.rb +89 -49
  74. metadata +51 -80
  75. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/CHANGES.txt +0 -828
  76. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/README.txt +0 -102
  77. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/erubis +0 -3468
  78. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/erubis-run.rb +0 -132
  79. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/inline-require +0 -179
  80. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/context.rb +0 -83
  81. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/converter.rb +0 -357
  82. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ec.rb +0 -117
  83. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ecpp.rb +0 -113
  84. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ejava.rb +0 -110
  85. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ejavascript.rb +0 -119
  86. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/enhanced.rb +0 -126
  87. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/eperl.rb +0 -95
  88. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ephp.rb +0 -99
  89. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/eruby.rb +0 -125
  90. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/escheme.rb +0 -114
  91. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/optimized.rb +0 -127
  92. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine.rb +0 -120
  93. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/enhancer.rb +0 -723
  94. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/error.rb +0 -23
  95. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/evaluator.rb +0 -88
  96. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/generator.rb +0 -85
  97. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helper.rb +0 -47
  98. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helpers/rails_form_helper.rb +0 -197
  99. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helpers/rails_helper.rb +0 -353
  100. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/local-setting.rb +0 -9
  101. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/main.rb +0 -516
  102. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/preprocessing.rb +0 -58
  103. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/tiny.rb +0 -144
  104. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/util.rb +0 -22
  105. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis.rb +0 -73
  106. data/bundle/ruby/3.2.0/gems/erubis-2.7.0/setup.rb +0 -1331
  107. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/creole.rb +0 -16
  108. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/csv.rb +0 -53
  109. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/erb.rb +0 -65
  110. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/kramdown.rb +0 -13
  111. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/liquid.rb +0 -37
  112. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pandoc.rb +0 -39
  113. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/radius.rb +0 -41
  114. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdiscount.rb +0 -23
  115. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdoc.rb +0 -11
  116. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcarpet.rb +0 -31
  117. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcloth.rb +0 -13
  118. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rst-pandoc.rb +0 -10
  119. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/slim.rb +0 -5
  120. data/bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/yajl.rb +0 -81
  121. data/lib/brakeman/parsers/erubis_patch.rb +0 -11
  122. data/lib/brakeman/parsers/rails2_erubis.rb +0 -9
  123. data/lib/brakeman/parsers/rails2_xss_plugin_erubis.rb +0 -52
  124. data/lib/brakeman/parsers/rails3_erubis.rb +0 -85
  125. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/COPYING +0 -0
  126. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/_emacs_org.rb +0 -0
  127. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/_handlebars.rb +0 -0
  128. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/_jbuilder.rb +0 -0
  129. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/_org.rb +0 -0
  130. /data/bundle/ruby/3.2.0/gems/{tilt-2.6.1 → tilt-2.7.0}/lib/tilt/cli.rb +0 -0
data/lib/brakeman.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'set'
2
+ require 'brakeman/logger'
2
3
  require 'brakeman/version'
3
4
 
4
5
  module Brakeman
@@ -32,6 +33,7 @@ module Brakeman
32
33
  @quiet = false
33
34
  @loaded_dependencies = []
34
35
  @vendored_paths = false
36
+ @logger = nil
35
37
 
36
38
  #Run Brakeman scan. Returns Tracker object.
37
39
  #
@@ -52,7 +54,6 @@ module Brakeman
52
54
  # * :highlight_user_input - highlight user input in reported warnings (default: true)
53
55
  # * :html_style - path to CSS file
54
56
  # * :ignore_model_output - consider models safe (default: false)
55
- # * :index_libs - add libraries to call index (default: true)
56
57
  # * :interprocedural - limited interprocedural processing of method calls (default: false)
57
58
  # * :message_limit - limit length of messages
58
59
  # * :min_confidence - minimum confidence (0-2, 0 is highest)
@@ -71,7 +72,6 @@ module Brakeman
71
72
  # * :safe_methods - array of methods to consider safe
72
73
  # * :show_ignored - Display warnings that are usually ignored
73
74
  # * :sql_safe_methods - array of sql sanitization methods to consider safe
74
- # * :skip_libs - do not process lib/ directory (default: false)
75
75
  # * :skip_vendor - do not process vendor/ directory (default: true)
76
76
  # * :skip_checks - checks not to run (run all if not specified)
77
77
  # * :absolute_paths - show absolute path of each file (default: false)
@@ -79,6 +79,10 @@ module Brakeman
79
79
  #
80
80
  #Alternatively, just supply a path as a string.
81
81
  def self.run options
82
+ if not $stderr.tty? and options[:report_progress].nil?
83
+ options[:report_progress] = false
84
+ end
85
+
82
86
  options = set_options options
83
87
 
84
88
  @quiet = !!options[:quiet]
@@ -88,18 +92,37 @@ module Brakeman
88
92
  options[:report_progress] = false
89
93
  end
90
94
 
95
+ @logger = options[:logger] || set_default_logger(options)
96
+
91
97
  if options[:use_prism]
92
98
  begin
93
99
  require 'prism'
94
- notify '[Notice] Using Prism parser'
95
100
  rescue LoadError => e
96
- Brakeman.debug "[Notice] Asked to use Prism, but failed to load: #{e}"
101
+ Brakeman.alert "Asked to use Prism, but failed to load: #{e}"
97
102
  end
98
103
  end
99
104
 
105
+ Brakeman.announce "Brakeman v#{Brakeman::Version}"
106
+
100
107
  scan options
101
108
  end
102
109
 
110
+ def self.logger
111
+ @logger
112
+ end
113
+
114
+ def self.logger= log
115
+ @logger = log
116
+ end
117
+
118
+ def self.set_default_logger(options = {})
119
+ @logger = Brakeman::Logger.get_logger(options)
120
+ end
121
+
122
+ def self.cleanup(newline = true)
123
+ @logger.cleanup(newline) if @logger
124
+ end
125
+
103
126
  #Sets up options for run, checks given application path
104
127
  def self.set_options options
105
128
  if options.is_a? String
@@ -152,6 +175,9 @@ module Brakeman
152
175
  require 'yaml'
153
176
  options = YAML.safe_load_file config, permitted_classes: [Symbol], symbolize_names: true
154
177
 
178
+ # Brakeman.logger is probably not set yet
179
+ logger = Brakeman::Logger.get_logger(options || line_options)
180
+
155
181
  if options
156
182
  options.each { |k, v| options[k] = Set.new v if v.is_a? Array }
157
183
 
@@ -162,15 +188,16 @@ module Brakeman
162
188
  if options.include? :additional_checks_path
163
189
  options.delete :additional_checks_path
164
190
 
165
- notify "[Notice] Ignoring additional check paths in config file. Use --allow-check-paths-in-config to allow" unless (options[:quiet] || quiet)
191
+ logger.alert 'Ignoring additional check paths in config file. Use --allow-check-paths-in-config to allow' unless (options[:quiet] || quiet)
166
192
  end
167
193
  end
168
194
 
169
195
  # notify if options[:quiet] and quiet is nil||false
170
- notify "[Notice] Using configuration in #{config}" unless (options[:quiet] || quiet)
196
+ # potentially remove these checks now that logger is used
197
+ logger.alert "Using configuration in #{config}" unless (options[:quiet] || quiet)
171
198
  options
172
199
  else
173
- notify "[Notice] Empty configuration file: #{config}" unless quiet
200
+ logger.alert "Empty configuration file: #{config}" unless quiet
174
201
  {}
175
202
  end
176
203
  else
@@ -209,7 +236,6 @@ module Brakeman
209
236
  :html_style => "#{File.expand_path(File.dirname(__FILE__))}/brakeman/format/style.css",
210
237
  :ignore_model_output => false,
211
238
  :ignore_redirect_to_model => true,
212
- :index_libs => true,
213
239
  :message_limit => 100,
214
240
  :min_confidence => 2,
215
241
  :output_color => true,
@@ -367,6 +393,12 @@ module Brakeman
367
393
 
368
394
  options.delete :create_config
369
395
 
396
+ if options[:logger]
397
+ @logger = options.delete(:logger)
398
+ else
399
+ set_default_logger(options)
400
+ end
401
+
370
402
  options.each do |k,v|
371
403
  if v.is_a? Set
372
404
  options[k] = v.to_a
@@ -377,9 +409,10 @@ module Brakeman
377
409
  File.open file, "w" do |f|
378
410
  YAML.dump options, f
379
411
  end
380
- notify "Output configuration to #{file}"
412
+
413
+ announce "Output configuration to #{file}"
381
414
  else
382
- notify YAML.dump(options)
415
+ $stdout.puts YAML.dump(options)
383
416
  end
384
417
  end
385
418
 
@@ -394,43 +427,39 @@ module Brakeman
394
427
  #Run a scan. Generally called from Brakeman.run instead of directly.
395
428
  def self.scan options
396
429
  #Load scanner
397
- notify "Loading scanner..."
430
+ scanner, tracker = nil
398
431
 
399
- begin
400
- require 'brakeman/scanner'
401
- rescue LoadError
402
- raise NoBrakemanError, "Cannot find lib/ directory."
403
- end
432
+ process_step 'Loading scanner' do
433
+ begin
434
+ require 'brakeman/scanner'
435
+ rescue LoadError
436
+ raise NoBrakemanError, 'Cannot find lib/ directory.'
437
+ end
404
438
 
405
- add_external_checks options
439
+ add_external_checks options
406
440
 
407
- #Start scanning
408
- scanner = Scanner.new options
409
- tracker = scanner.tracker
441
+ #Start scanning
442
+ scanner = Scanner.new options
443
+ tracker = scanner.tracker
410
444
 
411
- check_for_missing_checks options[:run_checks], options[:skip_checks], options[:enable_checks]
445
+ check_for_missing_checks options[:run_checks], options[:skip_checks], options[:enable_checks]
446
+ end
412
447
 
413
- notify "Processing application in #{tracker.app_path}"
448
+ logger.announce "Scanning #{tracker.app_path}"
414
449
  scanner.process
415
450
 
416
- if options[:parallel_checks]
417
- notify "Running checks in parallel..."
418
- else
419
- notify "Running checks..."
420
- end
421
-
422
451
  tracker.run_checks
423
452
 
424
453
  self.filter_warnings tracker, options
425
454
 
426
455
  if options[:output_files]
427
- notify "Generating report..."
428
-
429
- write_report_to_files tracker, options[:output_files]
456
+ process_step 'Generating report' do
457
+ write_report_to_files tracker, options[:output_files]
458
+ end
430
459
  elsif options[:print_report]
431
- notify "Generating report..."
432
-
433
- write_report_to_formats tracker, options[:output_formats]
460
+ process_step 'Generating report' do
461
+ write_report_to_formats tracker, options[:output_formats]
462
+ end
434
463
  end
435
464
 
436
465
  tracker
@@ -449,7 +478,8 @@ module Brakeman
449
478
  File.open output_file, "w" do |f|
450
479
  f.write tracker.report.format(tracker.options[:output_formats][idx])
451
480
  end
452
- notify "Report saved in '#{output_file}'"
481
+
482
+ logger.announce "Report saved in '#{output_file}'"
453
483
  end
454
484
  end
455
485
  private_class_method :write_report_to_files
@@ -493,12 +523,16 @@ module Brakeman
493
523
  Rescanner.new(options, tracker.processor, files).recheck
494
524
  end
495
525
 
496
- def self.notify message
497
- $stderr.puts message unless @quiet
526
+ def self.announce message
527
+ logger.announce message
528
+ end
529
+
530
+ def self.alert message
531
+ logger.alert message
498
532
  end
499
533
 
500
534
  def self.debug message
501
- $stderr.puts message if @debug
535
+ logger.debug message
502
536
  end
503
537
 
504
538
  # Compare JSON output from a previous scan and return the diff of the two scans
@@ -510,7 +544,7 @@ module Brakeman
510
544
  begin
511
545
  previous_results = JSON.parse(File.read(options[:previous_results_json]), :symbolize_names => true)[:warnings]
512
546
  rescue JSON::ParserError
513
- self.notify "Error parsing comparison file: #{options[:previous_results_json]}"
547
+ self.alert "Error parsing comparison file: #{options[:previous_results_json]}"
514
548
  exit!
515
549
  end
516
550
 
@@ -565,6 +599,7 @@ module Brakeman
565
599
 
566
600
  def self.filter_warnings tracker, options
567
601
  require 'brakeman/report/ignore/config'
602
+ config = nil
568
603
 
569
604
  app_tree = Brakeman::AppTree.from_options(options)
570
605
 
@@ -576,16 +611,17 @@ module Brakeman
576
611
  return
577
612
  end
578
613
 
579
- notify "Filtering warnings..."
580
-
581
- if options[:interactive_ignore]
582
- require 'brakeman/report/ignore/interactive'
583
- config = InteractiveIgnorer.new(file, tracker.warnings).start
584
- else
585
- notify "[Notice] Using '#{file}' to filter warnings"
586
- config = IgnoreConfig.new(file, tracker.warnings)
587
- config.read_from_file
588
- config.filter_ignored
614
+ process_step "Filtering warnings..." do
615
+ if options[:interactive_ignore]
616
+ require 'brakeman/report/ignore/interactive'
617
+ logger.cleanup
618
+ config = InteractiveIgnorer.new(file, tracker.warnings).start
619
+ else
620
+ logger.announce "Using '#{file}' to filter warnings"
621
+ config = IgnoreConfig.new(file, tracker.warnings)
622
+ config.read_from_file
623
+ config.filter_ignored
624
+ end
589
625
  end
590
626
 
591
627
  tracker.ignored_filter = config
@@ -615,6 +651,10 @@ module Brakeman
615
651
  @quiet = val
616
652
  end
617
653
 
654
+ def self.process_step(description, &)
655
+ logger.context(description, &)
656
+ end
657
+
618
658
  class DependencyError < RuntimeError; end
619
659
  class NoBrakemanError < RuntimeError; end
620
660
  class NoApplication < RuntimeError; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brakeman
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.2
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Collins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-12-25 00:00:00.000000000 Z
11
+ date: 2026-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: racc
@@ -50,39 +50,12 @@ files:
50
50
  - bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/table.rb
51
51
  - bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/version.rb
52
52
  - bundle/ruby/3.2.0/gems/csv-3.3.5/lib/csv/writer.rb
53
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/CHANGES.txt
54
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/MIT-LICENSE
55
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/README.txt
56
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/erubis
57
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/erubis-run.rb
58
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/contrib/inline-require
59
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis.rb
60
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/context.rb
61
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/converter.rb
62
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine.rb
63
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ec.rb
64
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ecpp.rb
65
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ejava.rb
66
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ejavascript.rb
67
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/enhanced.rb
68
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/eperl.rb
69
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/ephp.rb
70
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/eruby.rb
71
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/escheme.rb
72
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/engine/optimized.rb
73
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/enhancer.rb
74
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/error.rb
75
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/evaluator.rb
76
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/generator.rb
77
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helper.rb
78
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helpers/rails_form_helper.rb
79
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/helpers/rails_helper.rb
80
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/local-setting.rb
81
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/main.rb
82
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/preprocessing.rb
83
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/tiny.rb
84
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/lib/erubis/util.rb
85
- - bundle/ruby/3.2.0/gems/erubis-2.7.0/setup.rb
53
+ - bundle/ruby/3.2.0/gems/erubi-1.13.1/CHANGELOG
54
+ - bundle/ruby/3.2.0/gems/erubi-1.13.1/MIT-LICENSE
55
+ - bundle/ruby/3.2.0/gems/erubi-1.13.1/README.rdoc
56
+ - bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi.rb
57
+ - bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi/capture_block.rb
58
+ - bundle/ruby/3.2.0/gems/erubi-1.13.1/lib/erubi/capture_end.rb
86
59
  - bundle/ruby/3.2.0/gems/haml-6.4.0/CHANGELOG.md
87
60
  - bundle/ruby/3.2.0/gems/haml-6.4.0/FAQ.md
88
61
  - bundle/ruby/3.2.0/gems/haml-6.4.0/Gemfile
@@ -408,46 +381,45 @@ files:
408
381
  - bundle/ruby/3.2.0/gems/terminal-table-4.0.0/lib/terminal-table/util.rb
409
382
  - bundle/ruby/3.2.0/gems/terminal-table-4.0.0/lib/terminal-table/version.rb
410
383
  - bundle/ruby/3.2.0/gems/terminal-table-4.0.0/terminal-table.gemspec
411
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/COPYING
412
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt.rb
413
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_emacs_org.rb
414
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_handlebars.rb
415
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_jbuilder.rb
416
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/_org.rb
417
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/asciidoc.rb
418
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/babel.rb
419
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/builder.rb
420
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/cli.rb
421
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/coffee.rb
422
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/commonmarker.rb
423
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/creole.rb
424
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/csv.rb
425
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/erb.rb
426
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/erubi.rb
427
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/etanni.rb
428
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/haml.rb
429
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/kramdown.rb
430
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/liquid.rb
431
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/livescript.rb
432
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/mapping.rb
433
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/markaby.rb
434
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/nokogiri.rb
435
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pandoc.rb
436
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/pipeline.rb
437
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/plain.rb
438
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/prawn.rb
439
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/radius.rb
440
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdiscount.rb
441
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rdoc.rb
442
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcarpet.rb
443
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/redcloth.rb
444
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/rst-pandoc.rb
445
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/sass.rb
446
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/slim.rb
447
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/string.rb
448
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/template.rb
449
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/typescript.rb
450
- - bundle/ruby/3.2.0/gems/tilt-2.6.1/lib/tilt/yajl.rb
384
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/COPYING
385
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt.rb
386
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/_emacs_org.rb
387
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/_handlebars.rb
388
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/_jbuilder.rb
389
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/_org.rb
390
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/asciidoc.rb
391
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/babel.rb
392
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/builder.rb
393
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/cli.rb
394
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/coffee.rb
395
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/commonmarker.rb
396
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/csv.rb
397
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/erb.rb
398
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/erubi.rb
399
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/etanni.rb
400
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/haml.rb
401
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/kramdown.rb
402
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/liquid.rb
403
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/livescript.rb
404
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/mapping.rb
405
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/markaby.rb
406
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/nokogiri.rb
407
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/pandoc.rb
408
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/pipeline.rb
409
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/plain.rb
410
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/prawn.rb
411
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/radius.rb
412
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rdiscount.rb
413
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rdoc.rb
414
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/redcarpet.rb
415
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/redcloth.rb
416
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/rst-pandoc.rb
417
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/sass.rb
418
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/slim.rb
419
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/string.rb
420
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/template.rb
421
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/typescript.rb
422
+ - bundle/ruby/3.2.0/gems/tilt-2.7.0/lib/tilt/yajl.rb
451
423
  - bundle/ruby/3.2.0/gems/unicode-display_width-3.2.0/CHANGELOG.md
452
424
  - bundle/ruby/3.2.0/gems/unicode-display_width-3.2.0/MIT-LICENSE.txt
453
425
  - bundle/ruby/3.2.0/gems/unicode-display_width-3.2.0/README.md
@@ -568,6 +540,7 @@ files:
568
540
  - lib/brakeman/checks/check_render.rb
569
541
  - lib/brakeman/checks/check_render_dos.rb
570
542
  - lib/brakeman/checks/check_render_inline.rb
543
+ - lib/brakeman/checks/check_render_rce.rb
571
544
  - lib/brakeman/checks/check_response_splitting.rb
572
545
  - lib/brakeman/checks/check_reverse_tabnabbing.rb
573
546
  - lib/brakeman/checks/check_route_dos.rb
@@ -610,14 +583,12 @@ files:
610
583
  - lib/brakeman/file_parser.rb
611
584
  - lib/brakeman/file_path.rb
612
585
  - lib/brakeman/format/style.css
586
+ - lib/brakeman/logger.rb
613
587
  - lib/brakeman/messages.rb
614
588
  - lib/brakeman/options.rb
615
- - lib/brakeman/parsers/erubis_patch.rb
616
589
  - lib/brakeman/parsers/haml6_embedded.rb
617
590
  - lib/brakeman/parsers/haml_embedded.rb
618
- - lib/brakeman/parsers/rails2_erubis.rb
619
- - lib/brakeman/parsers/rails2_xss_plugin_erubis.rb
620
- - lib/brakeman/parsers/rails3_erubis.rb
591
+ - lib/brakeman/parsers/rails_erubi.rb
621
592
  - lib/brakeman/parsers/slim_embedded.rb
622
593
  - lib/brakeman/parsers/template_parser.rb
623
594
  - lib/brakeman/processor.rb
@@ -627,7 +598,7 @@ files:
627
598
  - lib/brakeman/processors/controller_alias_processor.rb
628
599
  - lib/brakeman/processors/controller_processor.rb
629
600
  - lib/brakeman/processors/erb_template_processor.rb
630
- - lib/brakeman/processors/erubis_template_processor.rb
601
+ - lib/brakeman/processors/erubi_template_procesor.rb
631
602
  - lib/brakeman/processors/gem_processor.rb
632
603
  - lib/brakeman/processors/haml6_template_processor.rb
633
604
  - lib/brakeman/processors/haml_template_processor.rb