-
Notifications
You must be signed in to change notification settings - Fork 733
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add patch to fix CVE-2021-4115 Also, add a support patch to cleanly apply CVE patch Link: https://gitlab.freedesktop.org/polkit/polkit/-/merge_requests/109 Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> Signed-off-by: Ranjitsinh Rathod <ranjitsinhrathod1991@gmail.com> Signed-off-by: Armin Kuster <akuster808@gmail.com>
- Loading branch information
Showing
3 changed files
with
121 additions
and
0 deletions.
There are no files selected for viewing
32 changes: 32 additions & 0 deletions
32
...pes-extended/polkit/files/0001-GHSL-2021-074-authentication-bypass-vulnerability-in.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
From a04d13affe0fa53ff618e07aa8f57f4c0e3b9b81 Mon Sep 17 00:00:00 2001 | ||
From: Jan Rybar <jrybar@redhat.com> | ||
Date: Wed, 2 Jun 2021 15:43:38 +0200 | ||
Subject: [PATCH] GHSL-2021-074: authentication bypass vulnerability in polkit | ||
|
||
initial values returned if error caught | ||
|
||
Upstream-Status: Backport [https://gitlab.freedesktop.org/polkit/polkit/-/commit/a04d13affe0fa53ff618e07aa8f57f4c0e3b9b81.patch] | ||
CVE: CVE-2021-4115 | ||
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> | ||
|
||
--- | ||
src/polkit/polkitsystembusname.c | 3 +++ | ||
1 file changed, 3 insertions(+) | ||
|
||
diff --git a/src/polkit/polkitsystembusname.c b/src/polkit/polkitsystembusname.c | ||
index 8daa12c..8ed1363 100644 | ||
--- a/src/polkit/polkitsystembusname.c | ||
+++ b/src/polkit/polkitsystembusname.c | ||
@@ -435,6 +435,9 @@ polkit_system_bus_name_get_creds_sync (PolkitSystemBusName *system_bus | ||
while (!((data.retrieved_uid && data.retrieved_pid) || data.caught_error)) | ||
g_main_context_iteration (tmp_context, TRUE); | ||
|
||
+ if (data.caught_error) | ||
+ goto out; | ||
+ | ||
if (out_uid) | ||
*out_uid = data.uid; | ||
if (out_pid) | ||
-- | ||
GitLab | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
From 41cb093f554da8772362654a128a84dd8a5542a7 Mon Sep 17 00:00:00 2001 | ||
From: Jan Rybar <jrybar@redhat.com> | ||
Date: Mon, 21 Feb 2022 08:29:05 +0000 | ||
Subject: [PATCH] CVE-2021-4115 (GHSL-2021-077) fix | ||
|
||
Upstream-Status: Backport [https://gitlab.freedesktop.org/polkit/polkit/-/commit/41cb093f554da8772362654a128a84dd8a5542a7.patch] | ||
CVE: CVE-2021-4115 | ||
Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> | ||
|
||
--- | ||
src/polkit/polkitsystembusname.c | 38 ++++++++++++++++++++++++++++---- | ||
1 file changed, 34 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/src/polkit/polkitsystembusname.c b/src/polkit/polkitsystembusname.c | ||
index 8ed1363..2fbf5f1 100644 | ||
--- a/src/polkit/polkitsystembusname.c | ||
+++ b/src/polkit/polkitsystembusname.c | ||
@@ -62,6 +62,10 @@ enum | ||
PROP_NAME, | ||
}; | ||
|
||
+ | ||
+guint8 dbus_call_respond_fails; // has to be global because of callback | ||
+ | ||
+ | ||
static void subject_iface_init (PolkitSubjectIface *subject_iface); | ||
|
||
G_DEFINE_TYPE_WITH_CODE (PolkitSystemBusName, polkit_system_bus_name, G_TYPE_OBJECT, | ||
@@ -364,6 +368,7 @@ on_retrieved_unix_uid_pid (GObject *src, | ||
if (!v) | ||
{ | ||
data->caught_error = TRUE; | ||
+ dbus_call_respond_fails += 1; | ||
} | ||
else | ||
{ | ||
@@ -405,6 +410,8 @@ polkit_system_bus_name_get_creds_sync (PolkitSystemBusName *system_bus | ||
tmp_context = g_main_context_new (); | ||
g_main_context_push_thread_default (tmp_context); | ||
|
||
+ dbus_call_respond_fails = 0; | ||
+ | ||
/* Do two async calls as it's basically as fast as one sync call. | ||
*/ | ||
g_dbus_connection_call (connection, | ||
@@ -432,11 +439,34 @@ polkit_system_bus_name_get_creds_sync (PolkitSystemBusName *system_bus | ||
on_retrieved_unix_uid_pid, | ||
&data); | ||
|
||
- while (!((data.retrieved_uid && data.retrieved_pid) || data.caught_error)) | ||
- g_main_context_iteration (tmp_context, TRUE); | ||
+ while (TRUE) | ||
+ { | ||
+ /* If one dbus call returns error, we must wait until the other call | ||
+ * calls _call_finish(), otherwise fd leak is possible. | ||
+ * Resolves: GHSL-2021-077 | ||
+ */ | ||
|
||
- if (data.caught_error) | ||
- goto out; | ||
+ if ( (dbus_call_respond_fails > 1) ) | ||
+ { | ||
+ // we got two faults, we can leave | ||
+ goto out; | ||
+ } | ||
+ | ||
+ if ((data.caught_error && (data.retrieved_pid || data.retrieved_uid))) | ||
+ { | ||
+ // we got one fault and the other call finally finished, we can leave | ||
+ goto out; | ||
+ } | ||
+ | ||
+ if ( !(data.retrieved_uid && data.retrieved_pid) ) | ||
+ { | ||
+ g_main_context_iteration (tmp_context, TRUE); | ||
+ } | ||
+ else | ||
+ { | ||
+ break; | ||
+ } | ||
+ } | ||
|
||
if (out_uid) | ||
*out_uid = data.uid; | ||
-- | ||
GitLab | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters