passenger 6.0.25 → 6.0.26

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: '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