proc/sysctl: make protected_* world readable
diff mbox series

Message ID 20200709235115.56954-1-jpitti@cisco.com
State New
Headers show
Series
  • proc/sysctl: make protected_* world readable
Related show

Commit Message

Julius Hemanth Pitti July 9, 2020, 11:51 p.m. UTC
protected_* files have 600 permissions which prevents
non-superuser from reading them.

Container like "AWS greengrass" refuse to launch unless
protected_hardlinks and protected_symlinks are set. When
containers like these run with "userns-remap" or "--user"
mapping container's root to non-superuser on host, they
fail to run due to denied read access to these files.

As these protections are hardly a secret, and do not
possess any security risk, making them world readable.

Though above greengrass usecase needs read access to
only protected_hardlinks and protected_symlinks files,
setting all other protected_* files to 644 to keep
consistency.

Fixes: 800179c9b8a1 ("fs: add link restrictions")
Signed-off-by: Julius Hemanth Pitti <jpitti@cisco.com>
---
 kernel/sysctl.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

Comments

Kees Cook July 10, 2020, 4:31 a.m. UTC | #1
On Thu, Jul 09, 2020 at 04:51:15PM -0700, Julius Hemanth Pitti wrote:
> protected_* files have 600 permissions which prevents
> non-superuser from reading them.
> 
> Container like "AWS greengrass" refuse to launch unless
> protected_hardlinks and protected_symlinks are set. When
> containers like these run with "userns-remap" or "--user"
> mapping container's root to non-superuser on host, they
> fail to run due to denied read access to these files.
> 
> As these protections are hardly a secret, and do not
> possess any security risk, making them world readable.
> 
> Though above greengrass usecase needs read access to
> only protected_hardlinks and protected_symlinks files,
> setting all other protected_* files to 644 to keep
> consistency.
> 
> Fixes: 800179c9b8a1 ("fs: add link restrictions")
> Signed-off-by: Julius Hemanth Pitti <jpitti@cisco.com>

Acked-by: Kees Cook <keescook@chromium.org>

I had originally proposed it as 0644, but Ingo asked that it have
a more conservative default value[1]. I figured that given the settings
can be discovered easily, it's not worth much. And if there are legit
cases where things are improved, I don't have a problem switching this
back.

Ingo, any thoughts on this now, 8 years later in the age of containers?
:)

(One devil's advocate question: as a workaround, you are able to just
change those files to 0644 after mounting /proc, yes? But regardless,
why get in people's way for no justifiable reason.)

-Kees

[1] https://lore.kernel.org/lkml/20120105091704.GB3249@elte.hu/
Luis Chamberlain July 29, 2020, 12:03 a.m. UTC | #2
On Thu, Jul 09, 2020 at 09:31:37PM -0700, Kees Cook wrote:
> On Thu, Jul 09, 2020 at 04:51:15PM -0700, Julius Hemanth Pitti wrote:
> > protected_* files have 600 permissions which prevents
> > non-superuser from reading them.
> > 
> > Container like "AWS greengrass" refuse to launch unless
> > protected_hardlinks and protected_symlinks are set. When
> > containers like these run with "userns-remap" or "--user"
> > mapping container's root to non-superuser on host, they
> > fail to run due to denied read access to these files.
> > 
> > As these protections are hardly a secret, and do not
> > possess any security risk, making them world readable.
> > 
> > Though above greengrass usecase needs read access to
> > only protected_hardlinks and protected_symlinks files,
> > setting all other protected_* files to 644 to keep
> > consistency.
> > 
> > Fixes: 800179c9b8a1 ("fs: add link restrictions")
> > Signed-off-by: Julius Hemanth Pitti <jpitti@cisco.com>
> 
> Acked-by: Kees Cook <keescook@chromium.org>
> 
> I had originally proposed it as 0644, but Ingo asked that it have
> a more conservative default value[1]. I figured that given the settings
> can be discovered easily, it's not worth much. And if there are legit
> cases where things are improved, I don't have a problem switching this
> back.

If we're going to to do this, can we please document why these are
"protected" then?

  Luis

> 
> Ingo, any thoughts on this now, 8 years later in the age of containers?
> :)
> 
> (One devil's advocate question: as a workaround, you are able to just
> change those files to 0644 after mounting /proc, yes? But regardless,
> why get in people's way for no justifiable reason.)
> 
> -Kees
> 
> [1] https://lore.kernel.org/lkml/20120105091704.GB3249@elte.hu/
> 
> -- 
> Kees Cook

Patch
diff mbox series

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index db1ce7a..aeca2fd 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -3223,7 +3223,7 @@  int proc_do_static_key(struct ctl_table *table, int write,
 		.procname	= "protected_symlinks",
 		.data		= &sysctl_protected_symlinks,
 		.maxlen		= sizeof(int),
-		.mode		= 0600,
+		.mode		= 0644,
 		.proc_handler	= proc_dointvec_minmax,
 		.extra1		= SYSCTL_ZERO,
 		.extra2		= SYSCTL_ONE,
@@ -3232,7 +3232,7 @@  int proc_do_static_key(struct ctl_table *table, int write,
 		.procname	= "protected_hardlinks",
 		.data		= &sysctl_protected_hardlinks,
 		.maxlen		= sizeof(int),
-		.mode		= 0600,
+		.mode		= 0644,
 		.proc_handler	= proc_dointvec_minmax,
 		.extra1		= SYSCTL_ZERO,
 		.extra2		= SYSCTL_ONE,
@@ -3241,7 +3241,7 @@  int proc_do_static_key(struct ctl_table *table, int write,
 		.procname	= "protected_fifos",
 		.data		= &sysctl_protected_fifos,
 		.maxlen		= sizeof(int),
-		.mode		= 0600,
+		.mode		= 0644,
 		.proc_handler	= proc_dointvec_minmax,
 		.extra1		= SYSCTL_ZERO,
 		.extra2		= &two,
@@ -3250,7 +3250,7 @@  int proc_do_static_key(struct ctl_table *table, int write,
 		.procname	= "protected_regular",
 		.data		= &sysctl_protected_regular,
 		.maxlen		= sizeof(int),
-		.mode		= 0600,
+		.mode		= 0644,
 		.proc_handler	= proc_dointvec_minmax,
 		.extra1		= SYSCTL_ZERO,
 		.extra2		= &two,