brakeman-lib 5.4.1 → 6.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1bd15d1d3f41a0fe1f537728a63f5fe432eae4d4b82cdb07233007e794b4b19a
4
- data.tar.gz: 8fd1c274006689e0e391c5586c9bd59c7ce776a998c9313561185216e51f9519
3
+ metadata.gz: fa04262bdd0adc42cac58526843c33d79a66b439880e8c8df8c6c1df343fcff6
4
+ data.tar.gz: 7e433c0b3a0ac62bc432bec371432bfacde51c34cd6d2c8ae2e78b698e7c44a4
5
5
  SHA512:
6
- metadata.gz: d3c99025931ba8a59c7852132cb80100f3f720de1ebfe632899e499a5784d5e92534efc6d9a04729bf3aec0d07c90fc2f69efccfd3d49558c277e370ae3d58f3
7
- data.tar.gz: 571f89f8d5eb19b1d2c472517e3d66d819ab715379fd6b5bdd15cd136560499d8d86ff79da19a86a2c03830b8e0b0d0bf0dec3935267f75eacc95396a71d1f81
6
+ metadata.gz: 2b8220a3968c53ba01ac55034a15a2f7021a0bc7c319fda428ae917bb8eead85388a9995115ea67ec41f8a837d68fb2efaa6cfb907ac3d6a00ce92e2a15e4a87
7
+ data.tar.gz: d9374e5121036962f6f3ea04478ecffceda79cfbc0c3a30d7d6fcb426ce60c0185d903056ff7231b0ec4b37d3fbd72a899ff49d6a7010f5ca7a1703d948dcd43
data/CHANGES.md CHANGED
@@ -1,3 +1,17 @@
1
+ # 6.0.1 - 2023-07-20
2
+
3
+ * Accept strings for `load_defaults` version
4
+
5
+ # 6.0.0 - 2023-05-24
6
+
7
+ * Add obsolete fingerprints to comparison report
8
+ * Warn about missing CSRF protection when defaults are not loaded (Chris Kruger)
9
+ * Scan directories that include the word `public`
10
+ * Raise minimum Ruby version to 3.0
11
+ * Drop support for Ruby 1.8/1.9 syntax
12
+ * Fix end-of-life dates for Ruby
13
+ * Fix false positive with `content_tag` in newer Rails
14
+
1
15
  # 5.4.1 - 2023-02-21
2
16
 
3
17
  * Fix file/line location for EOL software warnings
data/README.md CHANGED
@@ -66,7 +66,7 @@ Outside of Rails root (note that the output file is relative to path/to/rails/ap
66
66
 
67
67
  Brakeman should work with any version of Rails from 2.3.x to 7.x.
68
68
 
69
- Brakeman can analyze code written with Ruby 1.8 syntax and newer, but requires at least Ruby 2.5.0 to run.
69
+ Brakeman can analyze code written with Ruby 2.0 syntax and newer, but requires at least Ruby 3.0.0 to run.
70
70
 
71
71
  # Basic Options
72
72
 
@@ -182,7 +182,7 @@ There is a [plugin available](http://brakemanscanner.org/docs/jenkins/) for Jenk
182
182
 
183
183
  For even more continuous testing, try the [Guard plugin](https://github.com/guard/guard-brakeman).
184
184
 
185
- There are a couple [Github Actions](https://github.com/marketplace?type=actions&query=brakeman) available.
185
+ There are a couple [GitHub Actions](https://github.com/marketplace?type=actions&query=brakeman) available.
186
186
 
187
187
  # Building
188
188
 
@@ -197,7 +197,6 @@ module Brakeman
197
197
  spec/
198
198
  test/
199
199
  tmp/
200
- public/
201
200
  log/
202
201
  ]
203
202
 
@@ -73,11 +73,14 @@ class Brakeman::CheckContentTag < Brakeman::CheckCrossSiteScripting
73
73
  check_argument result, content
74
74
  end
75
75
 
76
- #Attribute keys are never escaped, so check them for user input
77
- if not @matched and hash? attributes and not request_value? attributes
78
- hash_iterate(attributes) do |k, _v|
79
- check_argument result, k
80
- return if @matched
76
+ # This changed in Rails 6.1.6
77
+ if version_between? '0.0.0', '6.1.5'
78
+ #Attribute keys are never escaped, so check them for user input
79
+ if not @matched and hash? attributes and not request_value? attributes
80
+ hash_iterate(attributes) do |k, _v|
81
+ check_argument result, k
82
+ return if @matched
83
+ end
81
84
  end
82
85
  end
83
86
 
@@ -21,6 +21,8 @@ class Brakeman::CheckEOLRuby < Brakeman::EOLCheck
21
21
  ['2.5.0', '2.5.99'] => Date.new(2021, 3, 31),
22
22
  ['2.6.0', '2.6.99'] => Date.new(2022, 3, 31),
23
23
  ['2.7.0', '2.7.99'] => Date.new(2023, 3, 31),
24
- ['3.0.0', '2.8.99'] => Date.new(2024, 3, 31),
24
+ ['3.0.0', '3.0.99'] => Date.new(2024, 3, 31),
25
+ ['3.1.0', '3.1.99'] => Date.new(2025, 3, 31),
26
+ ['3.2.0', '3.2.99'] => Date.new(2026, 3, 31),
25
27
  }
26
28
  end
@@ -1,4 +1,4 @@
1
- # Github Actions Formatter
1
+ # GitHub Actions Formatter
2
2
  # Formats warnings as workflow commands to create annotations in GitHub UI
3
3
  class Brakeman::Report::Github < Brakeman::Report::Base
4
4
  def generate_report
@@ -1,6 +1,5 @@
1
1
  begin
2
2
  Brakeman.load_brakeman_dependency 'ruby_parser'
3
- Brakeman.load_brakeman_dependency 'ruby_parser/legacy'
4
3
  require 'ruby_parser/bm_sexp.rb'
5
4
  require 'ruby_parser/bm_sexp_processor.rb'
6
5
  require 'brakeman/processor'
@@ -20,9 +20,7 @@ module Brakeman
20
20
 
21
21
  def default_protect_from_forgery?
22
22
  if version_between? "5.2.0.beta1", "9.9.9"
23
- if @rails.dig(:action_controller, :default_protect_from_forgery) == Sexp.new(:false)
24
- return false
25
- else
23
+ if @rails.dig(:action_controller, :default_protect_from_forgery) == Sexp.new(:true)
26
24
  return true
27
25
  end
28
26
  end
@@ -191,13 +189,19 @@ module Brakeman
191
189
  # Load defaults based on config.load_defaults value
192
190
  # as documented here: https://guides.rubyonrails.org/configuring.html#results-of-config-load-defaults
193
191
  def load_rails_defaults
194
- return unless number? tracker.config.rails[:load_defaults]
192
+ return unless node_type? tracker.config.rails[:load_defaults], :lit, :str
193
+
194
+ version = tracker.config.rails[:load_defaults].value.to_s
195
+
196
+ unless version.match? /^\d+\.\d+$/
197
+ Brakeman.debug "[Notice] Unknown version: #{tracker.config.rails[:load_defaults]}"
198
+ return
199
+ end
195
200
 
196
- version = tracker.config.rails[:load_defaults].value
197
201
  true_value = Sexp.new(:true)
198
202
  false_value = Sexp.new(:false)
199
203
 
200
- if version >= 5.0
204
+ if version >= '5.0'
201
205
  set_rails_config(value: true_value, path: [:action_controller, :per_form_csrf_tokens])
202
206
  set_rails_config(value: true_value, path: [:action_controller, :forgery_protection_origin_check])
203
207
  set_rails_config(value: true_value, path: [:active_record, :belongs_to_required_by_default])
@@ -205,12 +209,12 @@ module Brakeman
205
209
  set_rails_config(value: true_value, path: [:ssl_options, :hsts, :subdomains])
206
210
  end
207
211
 
208
- if version >= 5.1
212
+ if version >= '5.1'
209
213
  set_rails_config(value: false_value, path: [:assets, :unknown_asset_fallback])
210
214
  set_rails_config(value: true_value, path: [:action_view, :form_with_generates_remote_forms])
211
215
  end
212
216
 
213
- if version >= 5.2
217
+ if version >= '5.2'
214
218
  set_rails_config(value: true_value, path: [:active_record, :cache_versioning])
215
219
  set_rails_config(value: true_value, path: [:action_dispatch, :use_authenticated_cookie_encryption])
216
220
  set_rails_config(value: true_value, path: [:active_support, :use_authenticated_message_encryption])
@@ -219,7 +223,7 @@ module Brakeman
219
223
  set_rails_config(value: true_value, path: [:action_view, :form_with_generates_ids])
220
224
  end
221
225
 
222
- if version >= 6.0
226
+ if version >= '6.0'
223
227
  set_rails_config(value: Sexp.new(:lit, :zeitwerk), path: [:autoloader])
224
228
  set_rails_config(value: false_value, path: [:action_view, :default_enforce_utf8])
225
229
  set_rails_config(value: true_value, path: [:action_dispatch, :use_cookies_with_metadata])
@@ -232,7 +236,7 @@ module Brakeman
232
236
  set_rails_config(value: true_value, path: [:active_record, :collection_cache_versioning])
233
237
  end
234
238
 
235
- if version >= 6.1
239
+ if version >= '6.1'
236
240
  set_rails_config(value: true_value, path: [:action_controller, :urlsafe_csrf_tokens])
237
241
  set_rails_config(value: Sexp.new(:lit, :lax), path: [:action_dispatch, :cookies_same_site_protection])
238
242
  set_rails_config(value: Sexp.new(:lit, 308), path: [:action_dispatch, :ssl_default_redirect_status])
@@ -244,7 +248,7 @@ module Brakeman
244
248
  set_rails_config(value: true_value, path: [:active_storage, :track_variants])
245
249
  end
246
250
 
247
- if version >= 7.0
251
+ if version >= '7.0'
248
252
  video_args =
249
253
  Sexp.new(:str, "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2")
250
254
  hash_class = s(:colon2, s(:colon2, s(:const, :OpenSSL), :Digest), :SHA256)
@@ -1,3 +1,3 @@
1
1
  module Brakeman
2
- Version = "5.4.1"
2
+ Version = "6.0.1"
3
3
  end
data/lib/brakeman.rb CHANGED
@@ -493,10 +493,14 @@ module Brakeman
493
493
  end
494
494
 
495
495
  tracker = run(options)
496
+ new_report = JSON.parse(tracker.report.to_json, symbolize_names: true)
496
497
 
497
- new_results = JSON.parse(tracker.report.to_json, :symbolize_names => true)[:warnings]
498
+ new_results = new_report[:warnings]
499
+ obsolete_ignored = tracker.unused_fingerprints
498
500
 
499
- Brakeman::Differ.new(new_results, previous_results).diff
501
+ Brakeman::Differ.new(new_results, previous_results).diff.tap do |diff|
502
+ diff[:obsolete] = obsolete_ignored
503
+ end
500
504
  end
501
505
 
502
506
  def self.load_brakeman_dependency name, allow_fail = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brakeman-lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.4.1
4
+ version: 6.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Collins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-21 00:00:00.000000000 Z
11
+ date: 2023-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -94,20 +94,6 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3.19'
97
- - !ruby/object:Gem::Dependency
98
- name: ruby_parser-legacy
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '1.0'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.0'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: sexp_processor
113
99
  requirement: !ruby/object:Gem::Requirement