From: Ryan Mallon <rmallon@gmail.com>
To: Joe Perches <joe@perches.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
eldad@fogrefinery.com, Jiri Kosina <jkosina@suse.cz>,
jgunthorpe@obsidianresearch.com,
Dan Rosenberg <dan.j.rosenberg@gmail.com>,
Kees Cook <keescook@chromium.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
"Eric W. Biederman" <ebiederm@xmission.com>,
George Spelvin <linux@horizon.com>,
"kernel-hardening@lists.openwall.com"
<kernel-hardening@lists.openwall.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [kernel-hardening] Re: [PATCH v3] vsprintf: Check real user/group id for %pK
Date: Thu, 10 Oct 2013 09:04:45 +1100 [thread overview]
Message-ID: <5255D2FD.6050705@gmail.com> (raw)
In-Reply-To: <1381356014.2050.28.camel@joe-AO722>
On 10/10/13 09:00, Joe Perches wrote:
> On Thu, 2013-10-10 at 08:52 +1100, Ryan Mallon wrote:
>> Some setuid binaries will allow reading of files which have read
>> permission by the real user id. This is problematic with files which
>> use %pK because the file access permission is checked at open() time,
>> but the kptr_restrict setting is checked at read() time. If a setuid
>> binary opens a %pK file as an unprivileged user, and then elevates
>> permissions before reading the file, then kernel pointer values may be
>> leaked.
>
> Please review the patch I sent you a little more.
>
>> Fix this by adding a check that in addition to the current process
>> having CAP_SYSLOG, that effective user and group ids are equal to the
>> real ids. If a setuid binary reads the contents of a file which uses
>> %pK then the pointer values will be printed as NULL if the real user
>> is unprivileged.
>
> []
>
>> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> []
>> @@ -1312,11 +1313,37 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
>> spec.field_width = default_width;
>> return string(buf, end, "pK-error", spec);
>> }
>
> Move the interrupt tests and pK-error printk
> into case 1:
>
> It's the only case where CAP_SYSLOG needs to be
> tested so it doesn't need to be above the switch.
Like I said, I think it is useful to do the pK-error check anyway. It is
checking for internal kernel bugs, since if 'pK-error' ever gets
printed, then some kernel code is doing the wrong thing. Therefore, I
think it is useful to print it always (I would argue it even makes sense
when kptr_restrict=0). I decided to just leave that part of the code alone.
~Ryan
WARNING: multiple messages have this Message-ID (diff)
From: Ryan Mallon <rmallon@gmail.com>
To: Joe Perches <joe@perches.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
eldad@fogrefinery.com, Jiri Kosina <jkosina@suse.cz>,
jgunthorpe@obsidianresearch.com,
Dan Rosenberg <dan.j.rosenberg@gmail.com>,
Kees Cook <keescook@chromium.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
"Eric W. Biederman" <ebiederm@xmission.com>,
George Spelvin <linux@horizon.com>,
"kernel-hardening@lists.openwall.com"
<kernel-hardening@lists.openwall.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3] vsprintf: Check real user/group id for %pK
Date: Thu, 10 Oct 2013 09:04:45 +1100 [thread overview]
Message-ID: <5255D2FD.6050705@gmail.com> (raw)
In-Reply-To: <1381356014.2050.28.camel@joe-AO722>
On 10/10/13 09:00, Joe Perches wrote:
> On Thu, 2013-10-10 at 08:52 +1100, Ryan Mallon wrote:
>> Some setuid binaries will allow reading of files which have read
>> permission by the real user id. This is problematic with files which
>> use %pK because the file access permission is checked at open() time,
>> but the kptr_restrict setting is checked at read() time. If a setuid
>> binary opens a %pK file as an unprivileged user, and then elevates
>> permissions before reading the file, then kernel pointer values may be
>> leaked.
>
> Please review the patch I sent you a little more.
>
>> Fix this by adding a check that in addition to the current process
>> having CAP_SYSLOG, that effective user and group ids are equal to the
>> real ids. If a setuid binary reads the contents of a file which uses
>> %pK then the pointer values will be printed as NULL if the real user
>> is unprivileged.
>
> []
>
>> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> []
>> @@ -1312,11 +1313,37 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
>> spec.field_width = default_width;
>> return string(buf, end, "pK-error", spec);
>> }
>
> Move the interrupt tests and pK-error printk
> into case 1:
>
> It's the only case where CAP_SYSLOG needs to be
> tested so it doesn't need to be above the switch.
Like I said, I think it is useful to do the pK-error check anyway. It is
checking for internal kernel bugs, since if 'pK-error' ever gets
printed, then some kernel code is doing the wrong thing. Therefore, I
think it is useful to print it always (I would argue it even makes sense
when kptr_restrict=0). I decided to just leave that part of the code alone.
~Ryan
next prev parent reply other threads:[~2013-10-09 22:04 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-09 21:52 [kernel-hardening] [PATCH v3] vsprintf: Check real user/group id for %pK Ryan Mallon
2013-10-09 21:52 ` Ryan Mallon
2013-10-09 22:00 ` [kernel-hardening] " Joe Perches
2013-10-09 22:00 ` Joe Perches
2013-10-09 22:04 ` Ryan Mallon [this message]
2013-10-09 22:04 ` Ryan Mallon
2013-10-09 22:14 ` [kernel-hardening] " Joe Perches
2013-10-09 22:14 ` Joe Perches
2013-10-09 22:25 ` [kernel-hardening] " Ryan Mallon
2013-10-09 22:25 ` Ryan Mallon
2013-10-09 22:33 ` [kernel-hardening] " Joe Perches
2013-10-09 22:33 ` Joe Perches
2013-10-09 22:42 ` [kernel-hardening] " Ryan Mallon
2013-10-09 22:42 ` Ryan Mallon
2013-10-09 23:09 ` [kernel-hardening] [PATCH v3a] " Joe Perches
2013-10-09 23:09 ` Joe Perches
2013-10-09 23:18 ` [kernel-hardening] " Ryan Mallon
2013-10-09 23:18 ` Ryan Mallon
2013-10-09 23:21 ` [kernel-hardening] " Joe Perches
2013-10-09 23:21 ` Joe Perches
2013-10-11 2:20 ` [kernel-hardening] " Eric W. Biederman
2013-10-11 2:20 ` Eric W. Biederman
2013-10-11 3:19 ` [kernel-hardening] " Ryan Mallon
2013-10-11 3:19 ` Ryan Mallon
2013-10-11 3:34 ` [kernel-hardening] " Eric W. Biederman
2013-10-11 3:34 ` Eric W. Biederman
2013-10-14 10:17 ` [kernel-hardening] " Djalal Harouni
2013-10-14 10:17 ` Djalal Harouni
2013-10-14 12:21 ` [kernel-hardening] " Djalal Harouni
2013-10-14 12:21 ` Djalal Harouni
2013-10-14 20:41 ` [kernel-hardening] " Ryan Mallon
2013-10-14 20:41 ` Ryan Mallon
2013-10-11 4:42 ` [kernel-hardening] " George Spelvin
2013-10-11 4:42 ` George Spelvin
2013-10-11 5:19 ` [kernel-hardening] " Ryan Mallon
2013-10-11 5:19 ` Ryan Mallon
2013-10-11 5:29 ` [kernel-hardening] " Joe Perches
2013-10-11 5:29 ` Joe Perches
2013-10-11 22:04 ` [kernel-hardening] " Ryan Mallon
2013-10-11 22:04 ` Ryan Mallon
2013-10-11 22:37 ` [kernel-hardening] " Eric W. Biederman
2013-10-11 22:37 ` Eric W. Biederman
2013-10-14 9:18 ` [kernel-hardening] " Ryan Mallon
2013-10-14 9:18 ` Ryan Mallon
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=5255D2FD.6050705@gmail.com \
--to=rmallon@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=dan.j.rosenberg@gmail.com \
--cc=ebiederm@xmission.com \
--cc=eldad@fogrefinery.com \
--cc=jgunthorpe@obsidianresearch.com \
--cc=jkosina@suse.cz \
--cc=joe@perches.com \
--cc=keescook@chromium.org \
--cc=kernel-hardening@lists.openwall.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@horizon.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.