rack 2.1.4 → 2.1.4.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3851dcf1bb18356cc36d8d390c8b2f7e9abde5a7068dac862246e8280a9d7c41
4
- data.tar.gz: 5a5b9b318ba267f8ac3bd726048e6e826ff3feed3bb150252df91c7d038951cc
3
+ metadata.gz: edbcf6126aae323681d2fdc8e61fbbc036661d3354419ac07a389499c9f2f04a
4
+ data.tar.gz: a1071b44bbf6fa93a58ad2739f9df6f9450666c18aa94e7c69b8e813f3c290a4
5
5
  SHA512:
6
- metadata.gz: 7d071738226e954ce7bf0507422e41857bba7a10ceed70c22263b279cbbd19d362066a6ac62999a47212878f7e26e659e396c6c6ee51eb5dc4d5617a41859597
7
- data.tar.gz: 2d0ff8ec9f7fe54a4c0d88fd4ae51424b506df4c9a15324830ea36961dda8e5327250637f8b0a4168d4f66e95c815d0f2cc773c56f5a70dcadf5d50491723614
6
+ metadata.gz: 555cbd0c544abc9102e68450e0e2f7a1a6a758adac673087562419bd85073b5d4130c6446349a1efb68f0cd13ae94863eb083d3e528ec12d6c9e0d71c7047dd1
7
+ data.tar.gz: 6028521bbb96e209dde73311e30e614f680359ded81465bb23723a45ada328c661104a7487bf5cebc238831504a4e5f370a763769a4dd50d7df1b524da27c24d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## [2.1.4.2] - 2022-01-17
2
+
3
+ - [CVE-2022-44571] Fix ReDoS vulnerability in multipart parser
4
+ - [CVE-2022-44570] Fix ReDoS in Rack::Utils.get_byte_ranges
5
+ - [CVE-2022-44572] Forbid control characters in attributes (also ReDoS)
6
+
7
+ ## [2.1.4.1] - 2022-05-27
8
+
9
+ - [CVE-2022-30123] Fix shell escaping issue in Common Logger
10
+ - [CVE-2022-30122] Restrict parsing of broken MIME attachments
11
+
1
12
  ## [2.1.4] - 2020-06-15
2
13
 
3
14
  - [CVE-2020-8184] When parsing cookies, only decode the value
@@ -55,7 +55,10 @@ module Rack
55
55
  length,
56
56
  Utils.clock_time - began_at ]
57
57
 
58
+ msg.gsub!(/[^[:print:]\n]/) { |c| "\\x#{c.ord}" }
59
+
58
60
  logger = @logger || env[RACK_ERRORS]
61
+
59
62
  # Standard library logger doesn't support write but it supports << which actually
60
63
  # calls to write on the log device without formatting
61
64
  if logger.respond_to?(:write)
data/lib/rack/lint.rb CHANGED
@@ -296,7 +296,7 @@ module Rack
296
296
  check_hijack env
297
297
 
298
298
  ## * The <tt>REQUEST_METHOD</tt> must be a valid token.
299
- assert("REQUEST_METHOD unknown: #{env[REQUEST_METHOD]}") {
299
+ assert("REQUEST_METHOD unknown: #{env[REQUEST_METHOD].dump}") {
300
300
  env[REQUEST_METHOD] =~ /\A[0-9A-Za-z!\#$%&'*+.^_`|~-]+\z/
301
301
  }
302
302
 
@@ -309,8 +309,9 @@ module Rack
309
309
  elsif filename = params['filename*']
310
310
  encoding, _, filename = filename.split("'", 3)
311
311
  end
312
- when BROKEN_QUOTED, BROKEN_UNQUOTED
312
+ when BROKEN
313
313
  filename = $1
314
+ filename = $1 if filename =~ /^"(.*)"$/
314
315
  end
315
316
 
316
317
  return unless filename
@@ -16,13 +16,12 @@ module Rack
16
16
  TOKEN = /[^\s()<>,;:\\"\/\[\]?=]+/
17
17
  CONDISP = /Content-Disposition:\s*#{TOKEN}\s*/i
18
18
  VALUE = /"(?:\\"|[^"])*"|#{TOKEN}/
19
- BROKEN_QUOTED = /^#{CONDISP}.*;\s*filename="(.*?)"(?:\s*$|\s*;\s*#{TOKEN}=)/i
20
- BROKEN_UNQUOTED = /^#{CONDISP}.*;\s*filename=(#{TOKEN})/i
19
+ BROKEN = /^#{CONDISP}.*;\s*filename=(#{VALUE})/i
21
20
  MULTIPART_CONTENT_TYPE = /Content-Type: (.*)#{EOL}/ni
22
- MULTIPART_CONTENT_DISPOSITION = /Content-Disposition:.*;\s*name=(#{VALUE})/ni
21
+ MULTIPART_CONTENT_DISPOSITION = /Content-Disposition:[^:]*;\s*name=(#{VALUE})/ni
23
22
  MULTIPART_CONTENT_ID = /Content-ID:\s*([^#{EOL}]*)/ni
24
23
  # Updated definitions from RFC 2231
25
- ATTRIBUTE_CHAR = %r{[^ \t\v\n\r)(><@,;:\\"/\[\]?='*%]}
24
+ ATTRIBUTE_CHAR = %r{[^ \x00-\x1f\x7f)(><@,;:\\"/\[\]?='*%]}
26
25
  ATTRIBUTE = /#{ATTRIBUTE_CHAR}+/
27
26
  SECTION = /\*[0-9]+/
28
27
  REGULAR_PARAMETER_NAME = /#{ATTRIBUTE}#{SECTION}?/
data/lib/rack/utils.rb CHANGED
@@ -350,17 +350,18 @@ module Rack
350
350
  return nil unless http_range && http_range =~ /bytes=([^;]+)/
351
351
  ranges = []
352
352
  $1.split(/,\s*/).each do |range_spec|
353
- return nil unless range_spec =~ /(\d*)-(\d*)/
354
- r0, r1 = $1, $2
355
- if r0.empty?
356
- return nil if r1.empty?
353
+ return nil unless range_spec.include?('-')
354
+ range = range_spec.split('-')
355
+ r0, r1 = range[0], range[1]
356
+ if r0.nil? || r0.empty?
357
+ return nil if r1.nil?
357
358
  # suffix-byte-range-spec, represents trailing suffix of file
358
359
  r0 = size - r1.to_i
359
360
  r0 = 0 if r0 < 0
360
361
  r1 = size - 1
361
362
  else
362
363
  r0 = r0.to_i
363
- if r1.empty?
364
+ if r1.nil?
364
365
  r1 = size - 1
365
366
  else
366
367
  r1 = r1.to_i
data/lib/rack.rb CHANGED
@@ -20,7 +20,7 @@ module Rack
20
20
  VERSION.join(".")
21
21
  end
22
22
 
23
- RELEASE = "2.1.4"
23
+ RELEASE = "2.1.4.2"
24
24
 
25
25
  # Return the Rack release as a dotted string.
26
26
  def self.release
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.4
4
+ version: 2.1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leah Neukirchen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-15 00:00:00.000000000 Z
11
+ date: 2023-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -185,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
185
  - !ruby/object:Gem::Version
186
186
  version: '0'
187
187
  requirements: []
188
- rubygems_version: 3.2.0.pre1
188
+ rubygems_version: 3.1.6
189
189
  signing_key:
190
190
  specification_version: 4
191
191
  summary: a modular Ruby webserver interface