From: "Tobin C. Harding" <me@tobin.cc>
To: Salvatore Mesoraca <s.mesoraca16@gmail.com>
Cc: linux-kernel@vger.kernel.org,
Kernel Hardening <kernel-hardening@lists.openwall.com>,
linux-fsdevel@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
Jann Horn <jannh@google.com>, Kees Cook <keescook@chromium.org>,
Solar Designer <solar@openwall.com>,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: Re: [kernel-hardening] [PATCH v3 1/2] Protected FIFOs and regular files
Date: Fri, 24 Nov 2017 09:43:54 +1100 [thread overview]
Message-ID: <20171123224354.GJ12736@eros> (raw)
In-Reply-To: <1511337706-8297-2-git-send-email-s.mesoraca16@gmail.com>
On Wed, Nov 22, 2017 at 09:01:45AM +0100, Salvatore Mesoraca wrote:
Please take these comments in all humility, my English is a long way
from perfect. These are English grammar comments only. If this is viewed
as trivial please stop reading now and ignore.
> Disallows open of FIFOs or regular files not owned by the user in world
> writable sticky directories, unless the owner is the same as that of
> the directory or the file is opened without the O_CREAT flag.
> The purpose is to make data spoofing attacks harder.
> This protection can be turned on and off separately for FIFOs and regular
> files via sysctl, just like the symlinks/hardlinks protection.
> This patch is based on Openwall's "HARDEN_FIFO" feature by Solar
> Designer.
>
> This is a brief list of old vulnerabilities that could have been prevented
> by this feature, some of them even allow for privilege escalation:
> CVE-2000-1134
> CVE-2007-3852
> CVE-2008-0525
> CVE-2009-0416
> CVE-2011-4834
> CVE-2015-1838
> CVE-2015-7442
> CVE-2016-7489
>
> This list is not meant to be complete. It's difficult to track down
> all vulnerabilities of this kind because they were often reported
> without any mention of this particular attack vector.
> In fact, before symlinks restrictions, fifos/regular files were not the
> favorite vehicle to exploit them.
>
> Suggested-by: Solar Designer <solar@openwall.com>
> Suggested-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Salvatore Mesoraca <s.mesoraca16@gmail.com>
> ---
> Documentation/sysctl/fs.txt | 36 ++++++++++++++++++++++++++
> fs/namei.c | 61 ++++++++++++++++++++++++++++++++++++++++++---
> include/linux/fs.h | 2 ++
> kernel/sysctl.c | 18 +++++++++++++
> 4 files changed, 114 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/sysctl/fs.txt b/Documentation/sysctl/fs.txt
> index 6c00c1e..f3cf2cd 100644
> --- a/Documentation/sysctl/fs.txt
> +++ b/Documentation/sysctl/fs.txt
> @@ -34,7 +34,9 @@ Currently, these files are in /proc/sys/fs:
> - overflowgid
> - pipe-user-pages-hard
> - pipe-user-pages-soft
> +- protected_fifos
> - protected_hardlinks
> +- protected_regular
> - protected_symlinks
> - suid_dumpable
> - super-max
> @@ -182,6 +184,24 @@ applied.
>
> ==============================================================
>
> +protected_fifos:
> +
> +The intent of this protection is to avoid unintentional writes to
> +an attacker-controlled FIFO, where a program expected to create a regular
> +file.
> +
> +When set to "0", FIFOs writing is unrestricted.
When set to "0", writing to FIFOs is unrestricted.
> +When set to "1" don't allow O_CREAT open on FIFOs that we don't own
> +in world writable sticky directories, unless they are owned by the
> +owner of the directory.
> +
> +When set to "2" it also applies to group writable sticky directories.
> +
> +This protection is based on the restrictions in Openwall.
> +
> +==============================================================
> +
> protected_hardlinks:
>
> A long-standing class of security issues is the hardlink-based
> @@ -202,6 +222,22 @@ This protection is based on the restrictions in Openwall and grsecurity.
>
> ==============================================================
>
> +protected_regular:
> +
> +This protection is similar to protected_fifos, but it
> +avoids writes to an attacker-controlled regular file, where a program
> +expected to create one.
> +
> +When set to "0", regular files writing is unrestricted.
When set to "0", writing to regular files is unrestricted.
> +When set to "1" don't allow O_CREAT open on regular files that we
> +don't own in world writable sticky directories, unless they are
> +owned by the owner of the directory.
> +
> +When set to "2" it also applies to group writable sticky directories.
> +
> +==============================================================
> +
> protected_symlinks:
>
> A long-standing class of security issues is the symlink-based
> diff --git a/fs/namei.c b/fs/namei.c
> index f0c7a7b..92992ad 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -902,6 +902,8 @@ static inline void put_link(struct nameidata *nd)
>
> int sysctl_protected_symlinks __read_mostly = 0;
> int sysctl_protected_hardlinks __read_mostly = 0;
> +int sysctl_protected_fifos __read_mostly;
> +int sysctl_protected_regular __read_mostly;
>
> /**
> * may_follow_link - Check symlink following for unsafe situations
> @@ -1015,6 +1017,54 @@ static int may_linkat(struct path *link)
> return -EPERM;
> }
>
> +/**
> + * may_create_in_sticky - Check whether an O_CREAT open in a sticky directory
> + * should be allowed or not, when the file already
> + * existed.
Perhaps
+ * may_create_in_sticky - Check whether an O_CREAT open, in a sticky directory,
should be allowed, or not, on files that already exist.
Hope this helps,
Tobin.
next prev parent reply other threads:[~2017-11-23 22:43 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-22 8:01 [kernel-hardening] [PATCH v3 0/2] Restrict dangerous open in sticky directories Salvatore Mesoraca
2017-11-22 8:01 ` Salvatore Mesoraca
2017-11-22 8:01 ` [kernel-hardening] [PATCH v3 1/2] Protected FIFOs and regular files Salvatore Mesoraca
2017-11-22 8:01 ` Salvatore Mesoraca
2017-11-23 22:43 ` Tobin C. Harding [this message]
2017-11-24 8:24 ` [kernel-hardening] " Salvatore Mesoraca
2017-11-22 8:01 ` [kernel-hardening] [PATCH v3 2/2] Protected O_CREAT open in sticky directories Salvatore Mesoraca
2017-11-22 8:01 ` Salvatore Mesoraca
2017-11-22 12:03 ` [kernel-hardening] " Pavel Vasilyev
2017-11-24 8:28 ` Salvatore Mesoraca
2017-11-22 13:22 ` [kernel-hardening] " Matthew Wilcox
2017-11-22 13:22 ` Matthew Wilcox
2017-11-22 14:38 ` [kernel-hardening] " Pavel Vasilyev
2017-11-24 8:29 ` Salvatore Mesoraca
2017-11-24 8:29 ` Salvatore Mesoraca
2017-11-22 16:51 ` [kernel-hardening] " Alan Cox
2017-11-22 16:51 ` Alan Cox
2017-11-24 8:31 ` [kernel-hardening] " Salvatore Mesoraca
2017-11-24 8:31 ` Salvatore Mesoraca
2017-11-24 10:53 ` [kernel-hardening] " David Laight
2017-11-24 10:53 ` David Laight
2017-11-24 11:43 ` [kernel-hardening] " Salvatore Mesoraca
2017-11-24 11:43 ` Salvatore Mesoraca
2017-11-24 11:53 ` [kernel-hardening] " David Laight
2017-11-24 11:53 ` David Laight
2017-11-26 11:29 ` [kernel-hardening] " Salvatore Mesoraca
2017-11-26 11:29 ` Salvatore Mesoraca
2017-11-27 0:26 ` [kernel-hardening] " Solar Designer
2017-11-27 0:26 ` Solar Designer
2017-11-30 14:39 ` [kernel-hardening] " Salvatore Mesoraca
2017-11-30 14:39 ` Salvatore Mesoraca
2017-11-30 14:57 ` [kernel-hardening] " Ian Campbell
2017-11-30 16:30 ` [kernel-hardening] " Solar Designer
2017-12-05 10:21 ` Salvatore Mesoraca
2017-12-07 21:47 ` Solar Designer
2017-12-11 12:08 ` Salvatore Mesoraca
2017-11-23 22:57 ` Tobin C. Harding
2017-11-24 8:34 ` Salvatore Mesoraca
2017-11-30 16:53 ` [kernel-hardening] " David Laight
2017-11-30 16:53 ` David Laight
2017-11-30 17:51 ` [kernel-hardening] " Solar Designer
2017-11-30 17:51 ` Solar Designer
2017-12-01 9:46 ` [kernel-hardening] " David Laight
2017-12-01 9:46 ` David Laight
2017-12-01 15:52 ` [kernel-hardening] " Alan Cox
2017-12-01 15:52 ` Alan Cox
2017-11-27 1:14 ` [kernel-hardening] Re: [PATCH v3 0/2] Restrict dangerous " Solar Designer
2017-11-27 13:18 ` Solar Designer
2017-11-30 14:38 ` Salvatore Mesoraca
2017-11-30 14:37 ` Salvatore Mesoraca
2017-11-30 19:05 ` Solar Designer
2017-11-30 19:14 ` Solar Designer
2017-12-05 10:13 ` Salvatore Mesoraca
2017-12-07 22:23 ` Solar Designer
2017-12-08 12:17 ` Solar Designer
2017-12-11 12:07 ` Salvatore Mesoraca
2017-12-11 15:33 ` Solar Designer
2017-12-12 18:00 ` Salvatore Mesoraca
2017-12-11 16:07 ` Solar Designer
2017-12-12 18:01 ` Salvatore Mesoraca
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171123224354.GJ12736@eros \
--to=me@tobin.cc \
--cc=ebiederm@xmission.com \
--cc=jannh@google.com \
--cc=keescook@chromium.org \
--cc=kernel-hardening@lists.openwall.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=s.mesoraca16@gmail.com \
--cc=solar@openwall.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.