passenger 6.0.25 → 6.0.26

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: '0864392c22c6c48427a4ab0e8eeb4254fbb2f6cbb6d07c13570bc9f54b710dd6'
4
- data.tar.gz: ecff7e5b78e2a08f93fb73c12126964d29cc80065aaa96e0153505db63f3c066
3
+ metadata.gz: 0715fd22339d788849a10399857aa8cacbcf6720fe409d7a94a3760aa5233597
4
+ data.tar.gz: 4a37b6dbe1d2631dfd4fc9b20a610beffc631466ec419bfaa2e65fe82eae4847
5
5
  SHA512:
6
- metadata.gz: 24706e10441ff794e17f663197c57ad276b18588fc3f31fade19475ad834c7e08470d63d275639ba4a97bc4f76152af477c9fd1297ff637afe086c1957e78d71
7
- data.tar.gz: 61d9e594cf3487de28fa37c19398408685d0e1a74d3ffcd5d388c3f0fc5dd59b1a173a814f4c77298a11de7394ea7d677cb353308d8b7bb70e39cfe16296f2c0
6
+ metadata.gz: ea4c77be27c6cf6ef4148c33704382b0119bbe56ec40d9d3ec2e69e87a28dce4ecf23474826634930dd0f452074bf09404e6e7c75a8bc49f51107a01bb51b964
7
+ data.tar.gz: 2baf57d7686439f951da69c5d02dfd9f092a00ea306e9e16060b916418f55c7b815ad63f27eb80c89e17fb2046e62f1fb63b73e7a8ee33f0ad70857697d0baae
data/CHANGELOG CHANGED
@@ -1,4 +1,9 @@
1
- Release 6.0.25 (Not yet released)
1
+ Release 6.0.26 (Not yet released)
2
+ -------------
3
+ * [CVE-2025-26803] The http parser (from Passenger 6.0.21-6.0.25) was susceptible to a denial of service attack when parsing a request with an invalid HTTP method.
4
+
5
+
6
+ Release 6.0.25
2
7
  -------------
3
8
  * Fixes compilation with clang 19 (latest Fedora update) by dropping a buggy stddev function from the moving average header. Closes GH-2580.
4
9
  * [Standalone] Adds a config option to specify the stop timeout for Passenger: `--stop-timeout 120` or `PASSENGER_STOP_TIMEOUT=120`.
@@ -168,7 +168,7 @@ using namespace std;
168
168
  * security_update_checker_interval unsigned integer - default(86400)
169
169
  * security_update_checker_proxy_url string - -
170
170
  * security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
171
- * server_software string - default("Phusion_Passenger/6.0.25")
171
+ * server_software string - default("Phusion_Passenger/6.0.26")
172
172
  * show_version_in_header boolean - default(true)
173
173
  * single_app_mode_app_root string - default,read_only
174
174
  * single_app_mode_app_start_command string - read_only
@@ -118,7 +118,7 @@ parseControllerBenchmarkMode(const StaticString &mode) {
118
118
  * old_routing boolean - default(false),read_only
119
119
  * request_freelist_limit unsigned integer - default(1024)
120
120
  * response_buffer_high_watermark unsigned integer - default(134217728)
121
- * server_software string - default("Phusion_Passenger/6.0.25")
121
+ * server_software string - default("Phusion_Passenger/6.0.26")
122
122
  * show_version_in_header boolean - default(true)
123
123
  * start_reading_after_accept boolean - default(true)
124
124
  * stat_throttle_rate unsigned integer - default(10)
@@ -156,7 +156,7 @@ using namespace std;
156
156
  * security_update_checker_interval unsigned integer - default(86400)
157
157
  * security_update_checker_proxy_url string - -
158
158
  * security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
159
- * server_software string - default("Phusion_Passenger/6.0.25")
159
+ * server_software string - default("Phusion_Passenger/6.0.26")
160
160
  * setsid boolean - default(false)
161
161
  * show_version_in_header boolean - default(true)
162
162
  * single_app_mode_app_root string - default,read_only
@@ -83,7 +83,7 @@
83
83
  #define PASSENGER_API_VERSION_MAJOR 0
84
84
  #define PASSENGER_API_VERSION_MINOR 3
85
85
  #define PASSENGER_DEFAULT_USER "nobody"
86
- #define PASSENGER_VERSION "6.0.25"
86
+ #define PASSENGER_VERSION "6.0.26"
87
87
  #define POOL_HELPER_THREAD_STACK_SIZE 262144
88
88
  #define PROCESS_SHUTDOWN_TIMEOUT 60
89
89
  #define PROCESS_SHUTDOWN_TIMEOUT_DISPLAY "1 minute"
@@ -119,31 +119,26 @@ private:
119
119
  }
120
120
 
121
121
  static size_t http_parser_execute_and_handle_pause(llhttp_t *parser,
122
- const char *data, size_t len, bool &paused)
122
+ const char *data, size_t len)
123
123
  {
124
124
  llhttp_errno_t rc = llhttp_get_errno(parser);
125
125
  switch (rc) {
126
126
  case HPE_PAUSED_UPGRADE:
127
127
  llhttp_resume_after_upgrade(parser);
128
+ rc = llhttp_get_errno(parser);
128
129
  goto happy_path;
129
130
  case HPE_PAUSED:
130
131
  llhttp_resume(parser);
132
+ rc = llhttp_get_errno(parser);
131
133
  goto happy_path;
132
134
  case HPE_OK:
135
+ rc = llhttp_execute(parser, data, len);
133
136
  happy_path:
134
- switch (llhttp_execute(parser, data, len)) {
135
- case HPE_PAUSED_H2_UPGRADE:
136
- case HPE_PAUSED_UPGRADE:
137
- case HPE_PAUSED:
138
- paused = true;
139
- return (llhttp_get_error_pos(parser) - data);
140
- case HPE_OK:
137
+ if (rc == HPE_OK) {
141
138
  return len;
142
- default:
143
- goto error_path;
144
- }
139
+ }
140
+ // deliberate fall through
145
141
  default:
146
- error_path:
147
142
  return (llhttp_get_error_pos(parser) - data);
148
143
  }
149
144
  }
@@ -488,20 +483,22 @@ public:
488
483
  TRACE_POINT();
489
484
  P_ASSERT_EQ(message->httpState, Message::PARSING_HEADERS);
490
485
 
491
- size_t ret;
492
- bool paused;
493
-
494
486
  state->parser.data = this;
495
487
  currentBuffer = &buffer;
496
- ret = http_parser_execute_and_handle_pause(&state->parser,
497
- buffer.start, buffer.size(), paused);
488
+ size_t ret = http_parser_execute_and_handle_pause(&state->parser,
489
+ buffer.start, buffer.size());
498
490
  currentBuffer = NULL;
499
491
 
500
- if (!llhttp_get_upgrade(&state->parser) && ret != buffer.size() && !paused || !paused && llhttp_get_errno(&state->parser) != HPE_OK) {
492
+ llhttp_errno_t llerrno = llhttp_get_errno(&state->parser);
493
+
494
+ bool paused = (llerrno == HPE_PAUSED_H2_UPGRADE || llerrno == HPE_PAUSED_UPGRADE || llerrno == HPE_PAUSED);
495
+
496
+ if ( (!llhttp_get_upgrade(&state->parser) && ret != buffer.size() && !paused) ||
497
+ (llerrno != HPE_OK && !paused) ) {
501
498
  UPDATE_TRACE_POINT();
502
499
  message->httpState = Message::ERROR;
503
- switch (llhttp_get_errno(&state->parser)) {
504
- case HPE_CB_HEADER_FIELD_COMPLETE://?? does this match was HPE_CB_header_field in old one
500
+ switch (llerrno) {
501
+ case HPE_CB_HEADER_FIELD_COMPLETE:// does this match? was HPE_CB_header_field in old impl
505
502
  case HPE_CB_HEADERS_COMPLETE:
506
503
  switch (state->state) {
507
504
  case HttpHeaderParserState::ERROR_SECURITY_PASSWORD_MISMATCH:
@@ -526,9 +523,10 @@ public:
526
523
  break;
527
524
  default:
528
525
  default_error:
529
- message->aux.parseError = HTTP_PARSER_ERRNO_BEGIN - llhttp_get_errno(&state->parser);
526
+ message->aux.parseError = HTTP_PARSER_ERRNO_BEGIN - llerrno;
530
527
  break;
531
528
  }
529
+ llhttp_finish(&state->parser);
532
530
  } else if (messageHttpStateIndicatesCompletion(MessageType())) {
533
531
  UPDATE_TRACE_POINT();
534
532
  message->httpMajor = llhttp_get_http_major(&state->parser);
@@ -31,7 +31,7 @@ module PhusionPassenger
31
31
 
32
32
  PACKAGE_NAME = 'passenger'
33
33
  # Run 'rake src/cxx_supportlib/Constants.h configkit_schemas_inline_comments' after changing this number.
34
- VERSION_STRING = '6.0.25'
34
+ VERSION_STRING = '6.0.26'
35
35
 
36
36
  # Tip: find the SHA-256 with ./dev/nginx_version_sha256 <VERSION>
37
37
  PREFERRED_NGINX_VERSION = '1.26.2'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passenger
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.25
4
+ version: 6.0.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phusion - http://www.phusion.nl/
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-04 00:00:00.000000000 Z
11
+ date: 2025-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake