puma 5.6.7-java → 5.6.8-java

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: c7739d532cbd298f6d3fe97c1c5e99af45d29b792649705851542ac54aafbd2c
4
- data.tar.gz: a066b4636189819ea7109124c470eb2cba5f35083ab7c01b4389552a4acb9220
3
+ metadata.gz: 6ed72bc95b403e5e588dfd3809f8c48c1fb4577d628e6e5fed467f3a3c3d72bc
4
+ data.tar.gz: 7d11eab19b070a31cf61e2582bd9d669be46dc571a16a64751a74401a4f6c36c
5
5
  SHA512:
6
- metadata.gz: 010d1a62e046ccaef614623e59511b235f77eb4d292ef00b415d25335ced57344c758409dff13a88e730df8d644507421567102a9b1fbd7856dc96ed6546ba4e
7
- data.tar.gz: 304182f6bf28e4262e622bd9d00e504db9c2682e484c525a36efea6e141891adabdec427c6a8cf619fae6860266865b01fa39056b52a838bb19b285f9320361b
6
+ metadata.gz: 6f030945f1d3164c941e45ef216a0374d66e3059d8afa633aa56ae049514b5bbd9970dc9afa3b1e31d6fdca6b0647b0a487abbde204ac0e30f6eeb0d3a2b04ec
7
+ data.tar.gz: eb1a6d5e1b97bbcfd85fb1a866d66c35476fc50ada1676066b26830d9a2b11226707d2d7a0dd9b294d41438cdcdd008aa038d4dbd49ae33218f21f41098253a5
data/History.md CHANGED
@@ -1,6 +1,11 @@
1
+ ## 5.6.8 / 2023-01-08
2
+
3
+ * Security
4
+ * Limit the size of chunk extensions. Without this limit, an attacker could cause unbounded resource (CPU, network bandwidth) consumption. ([GHSA-c2f4-cvqm-65w2](https://github.com/puma/puma/security/advisories/GHSA-c2f4-cvqm-65w2))
5
+
1
6
  ## 5.6.7 / 2023-08-18
2
7
 
3
- * Security
8
+ * Security
4
9
  * Address HTTP request smuggling vulnerabilities with zero-length Content Length header and trailer fields ([GHSA-68xg-gqqm-vgj8](https://github.com/puma/puma/security/advisories/GHSA-68xg-gqqm-vgj8))
5
10
 
6
11
  ## 5.6.6 / 2023-06-21
data/lib/puma/client.rb CHANGED
@@ -48,6 +48,14 @@ module Puma
48
48
  CHUNK_VALID_ENDING = Const::LINE_END
49
49
  CHUNK_VALID_ENDING_SIZE = CHUNK_VALID_ENDING.bytesize
50
50
 
51
+ # The maximum number of bytes we'll buffer looking for a valid
52
+ # chunk header.
53
+ MAX_CHUNK_HEADER_SIZE = 4096
54
+
55
+ # The maximum amount of excess data the client sends
56
+ # using chunk size extensions before we abort the connection.
57
+ MAX_CHUNK_EXCESS = 16 * 1024
58
+
51
59
  # Content-Length header value validation
52
60
  CONTENT_LENGTH_VALUE_INVALID = /[^\d]/.freeze
53
61
 
@@ -460,6 +468,7 @@ module Puma
460
468
  @chunked_body = true
461
469
  @partial_part_left = 0
462
470
  @prev_chunk = ""
471
+ @excess_cr = 0
463
472
 
464
473
  @body = Tempfile.new(Const::PUMA_TMP_BASE)
465
474
  @body.unlink
@@ -541,6 +550,20 @@ module Puma
541
550
  end
542
551
  end
543
552
 
553
+ # Track the excess as a function of the size of the
554
+ # header vs the size of the actual data. Excess can
555
+ # go negative (and is expected to) when the body is
556
+ # significant.
557
+ # The additional of chunk_hex.size and 2 compensates
558
+ # for a client sending 1 byte in a chunked body over
559
+ # a long period of time, making sure that that client
560
+ # isn't accidentally eventually punished.
561
+ @excess_cr += (line.size - len - chunk_hex.size - 2)
562
+
563
+ if @excess_cr >= MAX_CHUNK_EXCESS
564
+ raise HttpParserError, "Maximum chunk excess detected"
565
+ end
566
+
544
567
  len += 2
545
568
 
546
569
  part = io.read(len)
@@ -568,6 +591,10 @@ module Puma
568
591
  @partial_part_left = len - part.size
569
592
  end
570
593
  else
594
+ if @prev_chunk.size + chunk.size >= MAX_CHUNK_HEADER_SIZE
595
+ raise HttpParserError, "maximum size of chunk header exceeded"
596
+ end
597
+
571
598
  @prev_chunk = line
572
599
  return false
573
600
  end
data/lib/puma/const.rb CHANGED
@@ -100,7 +100,7 @@ module Puma
100
100
  # too taxing on performance.
101
101
  module Const
102
102
 
103
- PUMA_VERSION = VERSION = "5.6.7".freeze
103
+ PUMA_VERSION = VERSION = "5.6.8".freeze
104
104
  CODE_NAME = "Birdie's Version".freeze
105
105
 
106
106
  PUMA_SERVER_STRING = ['puma', PUMA_VERSION, CODE_NAME].join(' ').freeze
data/lib/puma/null_io.rb CHANGED
File without changes
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puma
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.7
4
+ version: 5.6.8
5
5
  platform: java
6
6
  authors:
7
7
  - Evan Phoenix
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 1980-01-01 00:00:00.000000000 Z
11
+ date: 2024-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement