public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Serge E. Hallyn" <serge@hallyn.com>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Jann Horn <jann@thejh.net>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Seth Forshee <seth.forshee@canonical.com>,
	"Andrew G. Morgan" <morgan@kernel.org>,
	Kees Cook <keescook@chromium.org>,
	Michael Kerrisk-manpages <mtk.manpages@gmail.com>,
	"Serge E. Hallyn" <serge.hallyn@ubuntu.com>,
	Linux API <linux-api@vger.kernel.org>,
	Andy Lutomirski <luto@amacapital.net>,
	Linux Containers <containers@lists.linux-foundation.org>,
	serge@hallyn.com
Subject: Re: [PATCH 1/1] simplified security.nscapability xattr
Date: Mon, 16 May 2016 16:15:23 -0500	[thread overview]
Message-ID: <20160516211523.GA5282@mail.hallyn.com> (raw)
In-Reply-To: <20160511210221.GA24015@mail.hallyn.com>

Quoting Serge E. Hallyn (serge@hallyn.com):
...
> There's a problem though.  The above suffices to prevent an unprivileged user
> in a user_ns from unsharing a user_ns to write a file capability and exploit
> that capability in the ns where he is unprivileged.  With one exception, which
> is the case where the unprivileged user is mapped to the same kuid which
> created the namespace.  So if uid 1000 on the host creates a namespace
> where uid 1000 maps to 1000 in the namespace, then 1000 in the namespace
> can create a new user_ns, write the xattr, and exploit it from the
> parent namespace.  This is not an uncommon case.  I'm not sure what to do about
> it.

Ok I think I've convinced myself that requiring a kuid 0 in the container
and storing that in the security.nscapability is best solution.  The DAC
objection is imo not really valid - we don't have to give uid 0 in the
container any special privilege, we just require that the ns have a uid 0
mapping.  I have not been able to think of any other reliable way to verify
that the writer of the capability is authorized to grant privilege to the
file when executed by current.

I'm going to proceed with another POC based on the following design:

1. no new syscalls at the moment.  You can choose to set/query
security.nscapability, but can also just set security.capability from
a user_ns and have the kernel transparently set a security.nscapability
entry for you.

2. For now just a single security.nscapability entry, but in a format
that turning it into an array will be a trivial change

3. When running file foo which has a security.nscapability for kuid 100000,
then any namespace where kuid 100000 is root - or which has an ancestor ns where
that is the case - will run the file with the listed capabilities.

4. When doing getxattr of security.capability from a user_ns, if there is a
security.capability entry, that will be returned;  else if there is a valid
security.nscapability for your ns, that will be returned.

5. when doing a setxattr of security.capability from a user_ns, if there is
a security.nscapability entry, you get EBUSY;  else a security.nscapability 
with your root kuid will be written provided that (a) you are privileged
over your namespace, (b) you are privileged over your root uid, (c) the
file owner maps into your namespace.

6. when doing a getxattr of security.nscapability, the entry will be shown
with kuid mapped into your namespace or -1 if the uid does not map into
your ns.

7. when doing a setxattr of security.nscapability, if an entry exists, you
get -EBUSY;  if you are not privileged over your ns, your root uid, and
the file owner, then you get -EPERM;  the xattr includes a uid field, which
must be either 0 or a value valid in your ns.  The value will be converted
to a kuid and stored on disk.  (Seth, I'm not sure offhand how that should
mesh with your patches, we can talk about it after I send the next patch,
which I'm quite certain will handle it wrongly)

8. If a security.capability exists, it will override any security.nscapability
at execve() (so, inverse of my previous two patches).

-serge

  reply	other threads:[~2016-05-16 21:15 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-22 17:26 namespaced file capabilities serge.hallyn
2016-04-22 17:26 ` [PATCH 1/1] simplified security.nscapability xattr serge.hallyn
2016-04-26 19:46   ` Seth Forshee
2016-04-26 21:59   ` Kees Cook
2016-04-26 22:26     ` Serge E. Hallyn
2016-04-26 22:39       ` Kees Cook
2016-04-27  4:39         ` Serge E. Hallyn
2016-04-27  8:09         ` Jann Horn
2016-05-02  3:54         ` Serge E. Hallyn
2016-05-02 18:31           ` Michael Kerrisk (man-pages)
2016-05-02 21:31           ` Eric W. Biederman
     [not found]             ` <CALQRfL7mfpyudWs4Z8W5Zi8CTG-9O0OvrCnRU7pk0MXtsLBd0A@mail.gmail.com>
2016-05-03  4:50               ` Eric W. Biederman
2016-05-10 19:00                 ` Serge E. Hallyn
2016-05-03  5:19               ` Serge E. Hallyn
2016-05-03  5:54                 ` Eric W. Biederman
2016-05-03 14:25                   ` Serge E. Hallyn
2016-05-10 19:03                     ` Serge E. Hallyn
2016-05-07 23:10                   ` Jann Horn
2016-05-11 21:02                     ` Serge E. Hallyn
2016-05-16 21:15                       ` Serge E. Hallyn [this message]
2016-05-16 21:48                         ` Serge E. Hallyn
2016-05-18 21:57                           ` [PATCH RFC] user-namespaced file capabilities - now with more magic Serge E. Hallyn
2016-05-19 20:53                             ` Mimi Zohar
2016-05-20  3:40                               ` Serge E. Hallyn
2016-05-20 11:19                                 ` Mimi Zohar
2016-05-20 18:28                                   ` Eric W. Biederman
2016-05-20 19:09                                     ` Mimi Zohar
2016-05-20 19:11                                       ` Eric W. Biederman
2016-05-20 19:26                                     ` Serge E. Hallyn
2016-05-20 19:42                                       ` Eric W. Biederman
2016-05-20 19:59                                         ` Serge E. Hallyn
2016-05-20 23:23                                           ` Mimi Zohar
2016-05-20 23:32                                             ` Serge E. Hallyn

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=20160516211523.GA5282@mail.hallyn.com \
    --to=serge@hallyn.com \
    --cc=containers@lists.linux-foundation.org \
    --cc=ebiederm@xmission.com \
    --cc=jann@thejh.net \
    --cc=keescook@chromium.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=morgan@kernel.org \
    --cc=mtk.manpages@gmail.com \
    --cc=serge.hallyn@ubuntu.com \
    --cc=seth.forshee@canonical.com \
    /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