1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
From daf3d5c2d15466a267221fcb099c59c870098e03 Mon Sep 17 00:00:00 2001
From: Philip Withnall <philip.withnall@collabora.co.uk>
Date: Thu, 19 May 2016 10:08:08 +0100
Subject: [PATCH 05/16] data: Set GIO_USE_VFS=local in the environment
There is no need for polkit to ever use GVFS to load files from
non-local sources, so it's best to avoid loading GVFS code, and to just
rely on the local implementation in GIO instead. This reduces the attack
surface of polkit.
Implemented for the daemon, pkaction, pkcheck, pkexec and pkttyagent,
because none of them need remote file access.
https://bugs.freedesktop.org/show_bug.cgi?id=95487
---
src/polkitbackend/polkitd.c | 4 ++++
src/programs/pkaction.c | 4 ++++
src/programs/pkcheck.c | 4 ++++
src/programs/pkexec.c | 3 +++
src/programs/pkttyagent.c | 4 ++++
5 files changed, 19 insertions(+)
diff --git a/src/polkitbackend/polkitd.c b/src/polkitbackend/polkitd.c
index d1527fb..8d54ed7 100644
--- a/src/polkitbackend/polkitd.c
+++ b/src/polkitbackend/polkitd.c
@@ -22,6 +22,7 @@
#include "config.h"
#include <signal.h>
+#include <stdlib.h>
#include <glib-unix.h>
@@ -169,6 +170,9 @@ main (int argc,
sigint_id = 0;
registration_id = NULL;
+ /* Disable remote file access from GIO. */
+ setenv ("GIO_USE_VFS", "local", 1);
+
g_type_init ();
opt_context = g_option_context_new ("polkit system daemon");
diff --git a/src/programs/pkaction.c b/src/programs/pkaction.c
index f17a7dc..221662a 100644
--- a/src/programs/pkaction.c
+++ b/src/programs/pkaction.c
@@ -24,6 +24,7 @@
#endif
#include <stdio.h>
+#include <stdlib.h>
#include <glib/gi18n.h>
#include <polkit/polkit.h>
@@ -121,6 +122,9 @@ main (int argc, char *argv[])
actions = NULL;
ret = 1;
+ /* Disable remote file access from GIO. */
+ setenv ("GIO_USE_VFS", "local", 1);
+
g_type_init ();
opt_show_version = FALSE;
diff --git a/src/programs/pkcheck.c b/src/programs/pkcheck.c
index 5781893..33db128 100644
--- a/src/programs/pkcheck.c
+++ b/src/programs/pkcheck.c
@@ -24,6 +24,7 @@
#endif
#include <stdio.h>
+#include <stdlib.h>
#include <glib/gi18n.h>
#include <polkit/polkit.h>
#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE
@@ -362,6 +363,9 @@ main (int argc, char *argv[])
local_agent_handle = NULL;
ret = 126;
+ /* Disable remote file access from GIO. */
+ setenv ("GIO_USE_VFS", "local", 1);
+
g_type_init ();
details = polkit_details_new ();
diff --git a/src/programs/pkexec.c b/src/programs/pkexec.c
index 50de92c..3b29b24 100644
--- a/src/programs/pkexec.c
+++ b/src/programs/pkexec.c
@@ -503,6 +503,9 @@ main (int argc, char *argv[])
opt_user = NULL;
local_agent_handle = NULL;
+ /* Disable remote file access from GIO. */
+ setenv ("GIO_USE_VFS", "local", 1);
+
/* check for correct invocation */
if (geteuid () != 0)
{
diff --git a/src/programs/pkttyagent.c b/src/programs/pkttyagent.c
index 423b728..8aac7dd 100644
--- a/src/programs/pkttyagent.c
+++ b/src/programs/pkttyagent.c
@@ -24,6 +24,7 @@
#endif
#include <stdio.h>
+#include <stdlib.h>
#include <glib/gi18n.h>
#include <polkit/polkit.h>
#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE
@@ -74,6 +75,9 @@ main (int argc, char *argv[])
guint ret = 126;
GVariantBuilder builder;
+ /* Disable remote file access from GIO. */
+ setenv ("GIO_USE_VFS", "local", 1);
+
g_type_init ();
error = NULL;
--
2.13.0
|