From: Vasiliy Kulikov <segoon@openwall.com>
To: Balbir Singh <bsingharora@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Al Viro <viro@zeniv.linux.org.uk>,
David Rientjes <rientjes@google.com>,
Stephen Wilson <wilsons@start.ca>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
security@kernel.org, Eric Paris <eparis@redhat.com>,
kernel-hardening@lists.openwall.com
Subject: Re: [PATCH 2/2] taskstats: restrict access to user
Date: Thu, 7 Jul 2011 20:23:11 +0400 [thread overview]
Message-ID: <20110707162311.GA3363@albatros> (raw)
In-Reply-To: <CAKTCnzn25jUOmefuTPsLwbGGoj5sgz8-CgiV6XO-dMbNuD8Mzg@mail.gmail.com>
On Thu, Jul 07, 2011 at 17:23 +0530, Balbir Singh wrote:
> On Thu, Jul 7, 2011 at 2:25 PM, Vasiliy Kulikov <segoon@openwall.com> wrote:
> > 1) unblocking netlink socket on task exit is a rather useful help to win
> > different races. E.g. if the vulnerable program has the code -
> >
> > wait(NULL);
> > do_smth_racy();
> >
> > - then the attacker's task listening for the taskstats event will be
> > effectively woken up just before the racy code. It might greatly
> > increase the chanses to win the race => to exploit the bug.
> > (The same defect exists in inotify.)
> >
>
> I don't see why taskstats is singled out, please look at proc
> notifiers as well.
Do you mean proc connector? AFAICS, it is available to root only. And
no, taskstats is not singled out - I mentioned inotify as another
example. The kernel might be vulnerable to many side channel attacks,
using different interfaces.
> I don't buy this use case, what are we trying to
> save here and why is taskstats responsible, because it notifies?
Because it notifies _asynchronously_ in sense of the subject and
synchronously in sense of the object's activity. It gives a hint when
some probable "chechpoint" occured.
Please compare in the example I've posted above the cases of "poll"
(like test -e /proc/$pid) and "wait" (taskstats). In the poll case it's
very easy to loose the moment of the race because of rescheduling. In
the wait case the attacker task wakes up very closely to the race place.
> > 2) taskstats gives the task information at the precisely specific moment
> > - task death. So, the attacker shouldn't guess whether some event
> > occured or not. The formula of gotten information is _exactly_ task
> > activity during the life. On the contrary, getting the same information
> > from procfs files might result in some inaccuracy because of measuring
> > time inaccuracy (scheduler's variability, different disks' load, etc.).
> >
> > Of cource, (2) makes sense only if some sensible information is still
> > available through taskstats.
>
> Again this makes no sense to me, at the end we send accumulated data
> and that data can be read from /proc/$pid (mostly).
Umm... If both taskstats and procfs expose some sensible information,
both should be fixed, no?
> The race is that
> while I go off to read the data the process might disappear taking all
> of its data with it, which is what taskstats tries to solve among
> other things.
Or the last succeeded measurement didn't happen after some sensible
event.
Introducing this "race" neither fixes some bug or fully prevents some
exploitation technique. It might _reduce the chance_ of exploitation.
In my ssh exploit an attacker using procfs would have to poll
/proc/PID/io while 2 other processes would run - privileged sshd and
unprivileged sshd. The scheduler would try to run both sshds
on different CPUs of 2 CPU system in parallel because sshds actively
exchange the data via pipes. So, the poller might not run on any CPU
while the unpivileged sshd is dying. By using taskstats I get the
precise information from the first attempt.
Thanks,
--
Vasiliy Kulikov
http://www.openwall.com - bringing security into open computing environments
next prev parent reply other threads:[~2011-07-07 16:23 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-24 12:09 [PATCH 2/2] taskstats: restrict access to user Vasiliy Kulikov
2011-06-29 1:27 ` Balbir Singh
2011-06-29 11:42 ` Vasiliy Kulikov
2011-06-29 20:17 ` Vasiliy Kulikov
2011-07-02 7:36 ` Vasiliy Kulikov
2011-07-04 2:57 ` Balbir Singh
2011-07-04 17:45 ` Vasiliy Kulikov
2011-07-07 8:55 ` Vasiliy Kulikov
2011-07-07 11:53 ` Balbir Singh
2011-07-07 16:23 ` Vasiliy Kulikov [this message]
2011-07-09 15:36 ` Balbir Singh
2011-07-11 14:07 ` Vasiliy Kulikov
2011-06-29 20:09 ` [Security] " Linus Torvalds
2011-06-30 7:57 ` Vasiliy Kulikov
2011-06-30 10:59 ` Balbir Singh
2011-06-30 12:08 ` Vasiliy Kulikov
2011-06-30 16:40 ` Linus Torvalds
2011-07-01 3:02 ` Balbir Singh
2011-09-19 16:40 ` Linus Torvalds
2011-09-19 17:20 ` Balbir Singh
2011-09-19 17:39 ` Vasiliy Kulikov
2011-09-19 17:45 ` Linus Torvalds
2011-09-20 3:35 ` Eric W. Biederman
2011-09-20 5:47 ` Alexey Dobriyan
2011-09-19 17:47 ` Balbir Singh
2011-09-19 18:29 ` Andi Kleen
2011-09-19 18:32 ` Linus Torvalds
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=20110707162311.GA3363@albatros \
--to=segoon@openwall.com \
--cc=akpm@linux-foundation.org \
--cc=bsingharora@gmail.com \
--cc=eparis@redhat.com \
--cc=kernel-hardening@lists.openwall.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rientjes@google.com \
--cc=security@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
--cc=wilsons@start.ca \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).