|
|
8ec399 |
From 6e811d78e2719988ae291181f5b133af32ce62d8 Mon Sep 17 00:00:00 2001
|
|
|
8ec399 |
From: Jakub Filak <jfilak@redhat.com>
|
|
|
8ec399 |
Date: Thu, 23 Apr 2015 14:46:27 +0200
|
|
|
8ec399 |
Subject: [ABRT PATCH] dbus: process only valid sub-directories of the dump
|
|
|
8ec399 |
location
|
|
|
8ec399 |
|
|
|
8ec399 |
Must have correct rights and must be a direct sub-directory of the dump
|
|
|
8ec399 |
location.
|
|
|
8ec399 |
|
|
|
8ec399 |
This issue was discovered by Florian Weimer of Red Hat Product Security.
|
|
|
8ec399 |
|
|
|
8ec399 |
Related: #1214451
|
|
|
8ec399 |
|
|
|
8ec399 |
Signed-off-by: Jakub Filak <jfilak@redhat.com>
|
|
|
8ec399 |
---
|
|
|
8ec399 |
src/dbus/abrt-dbus.c | 36 ++++++++++++++++++++++++++----------
|
|
|
8ec399 |
1 file changed, 26 insertions(+), 10 deletions(-)
|
|
|
8ec399 |
|
|
|
8ec399 |
diff --git a/src/dbus/abrt-dbus.c b/src/dbus/abrt-dbus.c
|
|
|
8ec399 |
index 308a9af..7400dff 100644
|
|
|
8ec399 |
--- a/src/dbus/abrt-dbus.c
|
|
|
8ec399 |
+++ b/src/dbus/abrt-dbus.c
|
|
|
8ec399 |
@@ -132,18 +132,34 @@ static uid_t get_caller_uid(GDBusConnection *connection, GDBusMethodInvocation *
|
|
|
8ec399 |
return caller_uid;
|
|
|
8ec399 |
}
|
|
|
8ec399 |
|
|
|
8ec399 |
-static bool allowed_problem_dir(const char *dir_name)
|
|
|
8ec399 |
+bool allowed_problem_dir(const char *dir_name)
|
|
|
8ec399 |
{
|
|
|
8ec399 |
-//HACK HACK HACK! Disabled for now until we fix clients (abrt-gui) to not pass /home/user/.cache/abrt/spool
|
|
|
8ec399 |
+ if (!dir_is_in_dump_location(dir_name))
|
|
|
8ec399 |
+ {
|
|
|
8ec399 |
+ error_msg("Bad problem directory name '%s', should start with: '%s'", dir_name, g_settings_dump_location);
|
|
|
8ec399 |
+ return false;
|
|
|
8ec399 |
+ }
|
|
|
8ec399 |
+
|
|
|
8ec399 |
+ /* We cannot test correct permissions yet because we still need to chown
|
|
|
8ec399 |
+ * dump directories before reporting and Chowing changes the file owner to
|
|
|
8ec399 |
+ * the reporter, which causes this test to fail and prevents users from
|
|
|
8ec399 |
+ * getting problem data after reporting it.
|
|
|
8ec399 |
+ *
|
|
|
8ec399 |
+ * Fortunately, libreport has been hardened against hard link and symbolic
|
|
|
8ec399 |
+ * link attacks and refuses to work with such files, so this test isn't
|
|
|
8ec399 |
+ * really necessary, however, we will use it once we get rid of the
|
|
|
8ec399 |
+ * chowning files.
|
|
|
8ec399 |
+ *
|
|
|
8ec399 |
+ * abrt-server refuses to run post-create on directories that have
|
|
|
8ec399 |
+ * incorrect owner (not "root:(abrt|root)"), incorrect permissions (other
|
|
|
8ec399 |
+ * bits are not 0) and are complete (post-create finished). So, there is no
|
|
|
8ec399 |
+ * way to run security sensitive event scripts (post-create) on crafted
|
|
|
8ec399 |
+ * problem directories.
|
|
|
8ec399 |
+ */
|
|
|
8ec399 |
#if 0
|
|
|
8ec399 |
- unsigned len = strlen(g_settings_dump_location);
|
|
|
8ec399 |
-
|
|
|
8ec399 |
- /* If doesn't start with "g_settings_dump_location[/]"... */
|
|
|
8ec399 |
- if (strncmp(dir_name, g_settings_dump_location, len) != 0
|
|
|
8ec399 |
- || (dir_name[len] != '/' && dir_name[len] != '\0')
|
|
|
8ec399 |
- /* or contains "/." anywhere (-> might contain ".." component) */
|
|
|
8ec399 |
- || strstr(dir_name + len, "/.")
|
|
|
8ec399 |
- ) {
|
|
|
8ec399 |
+ if (!dir_has_correct_permissions(dir_name))
|
|
|
8ec399 |
+ {
|
|
|
8ec399 |
+ error_msg("Problem directory '%s' isn't owned by root:abrt or others are not restricted from access", dir_name);
|
|
|
8ec399 |
return false;
|
|
|
8ec399 |
}
|
|
|
8ec399 |
#endif
|
|
|
8ec399 |
--
|
|
|
8ec399 |
1.8.3.1
|
|
|
8ec399 |
|