Fix Configuring a proxy in a stream context might allow for CRLF injection in URIs CVE-2024-11234 Fix Single byte overread with convert.quoted-printable-decode filter CVE-2024-11233 Fix cgi.force_redirect configuration is bypassable due to the environment variable collision CVE-2024-8927 Fix Logs from childrens may be altered CVE-2024-9026 Fix Erroneous parsing of multipart form data CVE-2024-8925 Fix filter bypass in filter_var FILTER_VALIDATE_URL CVE-2024-5458 Fix __Host-/__Secure- cookie bypass due to partial CVE-2022-31629 fix CVE-2024-2756 Fix password_verify can erroneously return true opening ATO risk CVE-2024-3096 Resolves: RHEL-71275
119 lines
4.3 KiB
Diff
119 lines
4.3 KiB
Diff
From bc1f192102dd8cbda028e40aa31604c4885d387c Mon Sep 17 00:00:00 2001
|
|
From: Jakub Zelenka <bukka@php.net>
|
|
Date: Fri, 8 Nov 2024 23:43:47 +0100
|
|
Subject: [PATCH 3/8] Fix GHSA-c5f2-jwm7-mmq2: stream HTTP fulluri CRLF
|
|
injection
|
|
|
|
(cherry picked from commit 426a6d4539ebee34879ac5de857036bb6ff0e732)
|
|
---
|
|
ext/standard/http_fopen_wrapper.c | 18 ++++++++----
|
|
.../tests/http/ghsa-c5f2-jwm7-mmq2.phpt | 28 +++++++++++++++++++
|
|
2 files changed, 40 insertions(+), 6 deletions(-)
|
|
create mode 100644 ext/standard/tests/http/ghsa-c5f2-jwm7-mmq2.phpt
|
|
|
|
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
|
|
index 45677c396ac..6859a4e5181 100644
|
|
--- a/ext/standard/http_fopen_wrapper.c
|
|
+++ b/ext/standard/http_fopen_wrapper.c
|
|
@@ -184,6 +184,11 @@ static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
|
|
return NULL;
|
|
}
|
|
|
|
+ /* Should we send the entire path in the request line, default to no. */
|
|
+ if (context && (tmpzval = php_stream_context_get_option(context, "http", "request_fulluri")) != NULL) {
|
|
+ request_fulluri = zend_is_true(tmpzval);
|
|
+ }
|
|
+
|
|
use_ssl = resource->scheme && (ZSTR_LEN(resource->scheme) > 4) && ZSTR_VAL(resource->scheme)[4] == 's';
|
|
/* choose default ports */
|
|
if (use_ssl && resource->port == 0)
|
|
@@ -203,6 +208,13 @@ static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
|
|
}
|
|
}
|
|
|
|
+ if (request_fulluri && (strchr(path, '\n') != NULL || strchr(path, '\r') != NULL)) {
|
|
+ php_stream_wrapper_log_error(wrapper, options, "HTTP wrapper full URI path does not allow CR or LF characters");
|
|
+ php_url_free(resource);
|
|
+ zend_string_release(transport_string);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
if (context && (tmpzval = php_stream_context_get_option(context, wrapper->wops->label, "timeout")) != NULL) {
|
|
double d = zval_get_double(tmpzval);
|
|
#ifndef PHP_WIN32
|
|
@@ -383,12 +395,6 @@ finish:
|
|
smart_str_appends(&req_buf, "GET ");
|
|
}
|
|
|
|
- /* Should we send the entire path in the request line, default to no. */
|
|
- if (!request_fulluri && context &&
|
|
- (tmpzval = php_stream_context_get_option(context, "http", "request_fulluri")) != NULL) {
|
|
- request_fulluri = zend_is_true(tmpzval);
|
|
- }
|
|
-
|
|
if (request_fulluri) {
|
|
/* Ask for everything */
|
|
smart_str_appends(&req_buf, path);
|
|
diff --git a/ext/standard/tests/http/ghsa-c5f2-jwm7-mmq2.phpt b/ext/standard/tests/http/ghsa-c5f2-jwm7-mmq2.phpt
|
|
new file mode 100644
|
|
index 00000000000..e7dd194dbbe
|
|
--- /dev/null
|
|
+++ b/ext/standard/tests/http/ghsa-c5f2-jwm7-mmq2.phpt
|
|
@@ -0,0 +1,28 @@
|
|
+--TEST--
|
|
+GHSA-c5f2-jwm7-mmq2 (Configuring a proxy in a stream context might allow for CRLF injection in URIs)
|
|
+--INI--
|
|
+allow_url_fopen=1
|
|
+--CONFLICTS--
|
|
+server
|
|
+--FILE--
|
|
+<?php
|
|
+$serverCode = <<<'CODE'
|
|
+echo $_SERVER['REQUEST_URI'];
|
|
+CODE;
|
|
+
|
|
+include __DIR__."/../../../../sapi/cli/tests/php_cli_server.inc";
|
|
+php_cli_server_start($serverCode, null, []);
|
|
+
|
|
+$host = PHP_CLI_SERVER_ADDRESS;
|
|
+$userinput = "index.php HTTP/1.1\r\nHost: $host\r\n\r\nGET /index2.php HTTP/1.1\r\nHost: $host\r\n\r\nGET /index.php";
|
|
+$context = stream_context_create(['http' => ['proxy' => 'tcp://' . $host, 'request_fulluri' => true]]);
|
|
+echo file_get_contents("http://$host/$userinput", false, $context);
|
|
+?>
|
|
+--EXPECTF--
|
|
+Warning: file_get_contents(http://localhost:%d/index.php HTTP/1.1
|
|
+Host: localhost:%d
|
|
+
|
|
+GET /index2.php HTTP/1.1
|
|
+Host: localhost:%d
|
|
+
|
|
+GET /index.php): Failed to open stream: HTTP wrapper full URI path does not allow CR or LF characters in %s on line %d
|
|
--
|
|
2.47.0
|
|
|
|
From 8d130e16fbfda7d154fedfa0f1ff1d5ad5e26815 Mon Sep 17 00:00:00 2001
|
|
From: Remi Collet <remi@remirepo.net>
|
|
Date: Fri, 22 Nov 2024 09:41:12 +0100
|
|
Subject: [PATCH 8/8] fix transport_string release
|
|
|
|
---
|
|
ext/standard/http_fopen_wrapper.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
|
|
index 6859a4e5181..40e6f3dd4c3 100644
|
|
--- a/ext/standard/http_fopen_wrapper.c
|
|
+++ b/ext/standard/http_fopen_wrapper.c
|
|
@@ -211,7 +211,7 @@ static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
|
|
if (request_fulluri && (strchr(path, '\n') != NULL || strchr(path, '\r') != NULL)) {
|
|
php_stream_wrapper_log_error(wrapper, options, "HTTP wrapper full URI path does not allow CR or LF characters");
|
|
php_url_free(resource);
|
|
- zend_string_release(transport_string);
|
|
+ efree(transport_string);
|
|
return NULL;
|
|
}
|
|
|
|
--
|
|
2.47.0
|
|
|