[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#945578: marked as done (buster-pu: package libapache2-mod-auth-openidc/2.3.10.2-1)



Your message dated Sat, 10 Sep 2022 13:40:55 +0100
with message-id <2cfc9645343bdb910fe19c07bddfec2c428346a3.camel@adam-barratt.org.uk>
and subject line Closing requests for updates included in 10.13
has caused the Debian Bug report #945578,
regarding buster-pu: package libapache2-mod-auth-openidc/2.3.10.2-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
945578: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=945578
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian.org@packages.debian.org
Usertags: pu

Fixes CVE-2019-14857 (Open redirect in logout url when using URLs with
backslashes) by improving validation of the post-logout URL parameter
(backported from upstream, see https://salsa.debian.org/debian/libapache2-mod-
auth-openidc/commit/17e31b94a71ef02d1417bee6b0ef7b7379b40375)

-- System Information:
Debian Release: 10.2
  APT prefers stable-updates
  APT policy: (700, 'stable-updates'), (700, 'stable'), (60, 'testing'), (50,
'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 4.19.0-6-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8),
LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -Nru libapache2-mod-auth-openidc-2.3.10.2/debian/changelog libapache2-mod-auth-openidc-2.3.10.2/debian/changelog
--- libapache2-mod-auth-openidc-2.3.10.2/debian/changelog	2019-01-29 21:40:30.000000000 +0100
+++ libapache2-mod-auth-openidc-2.3.10.2/debian/changelog	2019-11-27 11:09:17.000000000 +0100
@@ -1,3 +1,10 @@
+libapache2-mod-auth-openidc (2.3.10.2-1+deb10u1) buster; urgency=medium
+
+  * Add patch for CVE-2019-14857
+    (Closes: #942165)
+
+ -- Moritz Schlarb <schlarbm@uni-mainz.de>  Wed, 27 Nov 2019 11:09:17 +0100
+
 libapache2-mod-auth-openidc (2.3.10.2-1) unstable; urgency=medium
 
   * New upstream version 2.3.10.2
diff -Nru libapache2-mod-auth-openidc-2.3.10.2/debian/gbp.conf libapache2-mod-auth-openidc-2.3.10.2/debian/gbp.conf
--- libapache2-mod-auth-openidc-2.3.10.2/debian/gbp.conf	2019-01-29 21:40:30.000000000 +0100
+++ libapache2-mod-auth-openidc-2.3.10.2/debian/gbp.conf	2019-11-27 11:08:14.000000000 +0100
@@ -1,2 +1,3 @@
 [DEFAULT]
 pristine-tar = True
+debian-branch = buster
diff -Nru libapache2-mod-auth-openidc-2.3.10.2/debian/patches/0002-improve-validation-of-the-post-logout-URL-parameter-.patch libapache2-mod-auth-openidc-2.3.10.2/debian/patches/0002-improve-validation-of-the-post-logout-URL-parameter-.patch
--- libapache2-mod-auth-openidc-2.3.10.2/debian/patches/0002-improve-validation-of-the-post-logout-URL-parameter-.patch	1970-01-01 01:00:00.000000000 +0100
+++ libapache2-mod-auth-openidc-2.3.10.2/debian/patches/0002-improve-validation-of-the-post-logout-URL-parameter-.patch	2019-11-27 11:08:14.000000000 +0100
@@ -0,0 +1,137 @@
+From: Moritz Schlarb <schlarbm@uni-mainz.de>
+Date: Wed, 16 Oct 2019 10:53:49 +0200
+Subject: improve validation of the post-logout URL parameter on logout
+
+From https://github.com/zmartzone/mod_auth_openidc/compare/5c15dfb~1...v2.4.0.3
+
+Fixes https://security-tracker.debian.org/tracker/CVE-2019-14857
+---
+ src/mod_auth_openidc.c | 101 ++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 63 insertions(+), 38 deletions(-)
+
+diff --git a/src/mod_auth_openidc.c b/src/mod_auth_openidc.c
+index 5b971d5..916d60d 100644
+--- a/src/mod_auth_openidc.c
++++ b/src/mod_auth_openidc.c
+@@ -2938,6 +2938,61 @@ out:
+ 	return rc;
+ }
+ 
++static apr_byte_t oidc_validate_post_logout_url(request_rec *r, const char *url,
++		char **err_str, char **err_desc) {
++	apr_uri_t uri;
++	const char *c_host = NULL;
++
++	if (apr_uri_parse(r->pool, url, &uri) != APR_SUCCESS) {
++		*err_str = apr_pstrdup(r->pool, "Malformed URL");
++		*err_desc = apr_psprintf(r->pool, "Logout URL malformed: %s", url);
++		oidc_error(r, "%s: %s", *err_str, *err_desc);
++		return FALSE;
++	}
++
++	c_host = oidc_get_current_url_host(r);
++	if ((uri.hostname != NULL)
++			&& ((strstr(c_host, uri.hostname) == NULL)
++					|| (strstr(uri.hostname, c_host) == NULL))) {
++		*err_str = apr_pstrdup(r->pool, "Invalid Request");
++		*err_desc =
++				apr_psprintf(r->pool,
++						"logout value \"%s\" does not match the hostname of the current request \"%s\"",
++						apr_uri_unparse(r->pool, &uri, 0), c_host);
++		oidc_error(r, "%s: %s", *err_str, *err_desc);
++		return FALSE;
++	} else if ((uri.hostname == NULL) && (strstr(url, "/") != url)) {
++		*err_str = apr_pstrdup(r->pool, "Malformed URL");
++		*err_desc =
++				apr_psprintf(r->pool,
++						"No hostname was parsed and it does not seem to be relative, i.e starting with '/': %s",
++						url);
++		oidc_error(r, "%s: %s", *err_str, *err_desc);
++		return FALSE;
++        } else if ((uri.hostname == NULL) && (strstr(url, "//") == url)) {
++                *err_str = apr_pstrdup(r->pool, "Malformed URL");
++                *err_desc =
++                                apr_psprintf(r->pool,
++                                                "No hostname was parsed and starting with '//': %s",
++                                                url);
++                oidc_error(r, "%s: %s", *err_str, *err_desc);
++                return FALSE;
++	}
++
++	/* validate the URL to prevent HTTP header splitting */
++	if (((strstr(url, "\n") != NULL) || strstr(url, "\r") != NULL)) {
++		*err_str = apr_pstrdup(r->pool, "Invalid Request");
++		*err_desc =
++				apr_psprintf(r->pool,
++						"logout value \"%s\" contains illegal \"\n\" or \"\r\" character(s)",
++						url);
++		oidc_error(r, "%s: %s", *err_str, *err_desc);
++		return FALSE;
++	}
++
++	return TRUE;
++}
++
+ /*
+  * perform (single) logout
+  */
+@@ -2946,6 +3001,9 @@ static int oidc_handle_logout(request_rec *r, oidc_cfg *c,
+ 
+ 	/* pickup the command or URL where the user wants to go after logout */
+ 	char *url = NULL;
++	char *error_str = NULL;
++	char *error_description = NULL;
++
+ 	oidc_util_get_request_parameter(r, OIDC_REDIRECT_URI_REQUEST_LOGOUT, &url);
+ 
+ 	oidc_debug(r, "enter (url=%s)", url);
+@@ -2963,44 +3021,11 @@ static int oidc_handle_logout(request_rec *r, oidc_cfg *c,
+ 	} else {
+ 
+ 		/* do input validation on the logout parameter value */
+-
+-		const char *error_description = NULL;
+-		apr_uri_t uri;
+-
+-		if (apr_uri_parse(r->pool, url, &uri) != APR_SUCCESS) {
+-			const char *error_description = apr_psprintf(r->pool,
+-					"Logout URL malformed: %s", url);
+-			oidc_error(r, "%s", error_description);
+-			return oidc_util_html_send_error(r, c->error_template,
+-					"Malformed URL", error_description,
+-					HTTP_INTERNAL_SERVER_ERROR);
+-
+-		}
+-
+-		const char *c_host = oidc_get_current_url_host(r);
+-		if ((uri.hostname != NULL)
+-				&& ((strstr(c_host, uri.hostname) == NULL)
+-						|| (strstr(uri.hostname, c_host) == NULL))) {
+-			error_description =
+-					apr_psprintf(r->pool,
+-							"logout value \"%s\" does not match the hostname of the current request \"%s\"",
+-							apr_uri_unparse(r->pool, &uri, 0), c_host);
+-			oidc_error(r, "%s", error_description);
+-			return oidc_util_html_send_error(r, c->error_template,
+-					"Invalid Request", error_description,
+-					HTTP_INTERNAL_SERVER_ERROR);
+-		}
+-
+-		/* validate the URL to prevent HTTP header splitting */
+-		if (((strstr(url, "\n") != NULL) || strstr(url, "\r") != NULL)) {
+-			error_description =
+-					apr_psprintf(r->pool,
+-							"logout value \"%s\" contains illegal \"\n\" or \"\r\" character(s)",
+-							url);
+-			oidc_error(r, "%s", error_description);
+-			return oidc_util_html_send_error(r, c->error_template,
+-					"Invalid Request", error_description,
+-					HTTP_INTERNAL_SERVER_ERROR);
++		if (oidc_validate_post_logout_url(r, url, &error_str,
++				&error_description) == FALSE) {
++			return oidc_util_html_send_error(r, c->error_template, error_str,
++					error_description,
++					HTTP_BAD_REQUEST);
+ 		}
+ 	}
+ 
diff -Nru libapache2-mod-auth-openidc-2.3.10.2/debian/patches/series libapache2-mod-auth-openidc-2.3.10.2/debian/patches/series
--- libapache2-mod-auth-openidc-2.3.10.2/debian/patches/series	2019-01-29 21:40:30.000000000 +0100
+++ libapache2-mod-auth-openidc-2.3.10.2/debian/patches/series	2019-11-27 11:08:14.000000000 +0100
@@ -1 +1,2 @@
 fix-parallel-build.patch
+0002-improve-validation-of-the-post-logout-URL-parameter-.patch

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 10.13

Hi,

Each of the updates referenced in these bugs was included in today's
10.13 point release.

Regards,

Adam

--- End Message ---

Reply to: