All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: Pavel Begunkov <asml.silence@gmail.com>,
	Stefan Metzmacher <metze@samba.org>
Cc: io-uring <io-uring@vger.kernel.org>,
	Linux API Mailing List <linux-api@vger.kernel.org>
Subject: Re: IORING_REGISTER_CREDS[_UPDATE]() and credfd_create()?
Date: Tue, 28 Jan 2020 13:56:00 -0700	[thread overview]
Message-ID: <43a57f2a-16da-e657-3dca-5aa3afe31318@kernel.dk> (raw)
In-Reply-To: <60253bd9-93a7-4d76-93b6-586e4f55138c@gmail.com>

On 1/28/20 1:50 PM, Pavel Begunkov wrote:
> On 28/01/2020 23:19, Jens Axboe wrote:
>> On 1/28/20 1:16 PM, Pavel Begunkov wrote:
>>> On 28/01/2020 22:42, Jens Axboe wrote:
>>>> On 1/28/20 11:04 AM, Jens Axboe wrote:
>>>>> On 1/28/20 10:19 AM, Jens Axboe wrote:
>>>>>> On 1/28/20 9:19 AM, Jens Axboe wrote:
>>>>>>> On 1/28/20 9:17 AM, Stefan Metzmacher wrote:
>>>>>> OK, so here are two patches for testing:
>>>>>>
>>>>>> https://git.kernel.dk/cgit/linux-block/log/?h=for-5.6/io_uring-vfs-creds
>>>>>>
>>>>>> #1 adds support for registering the personality of the invoking task,
>>>>>> and #2 adds support for IORING_OP_USE_CREDS. Right now it's limited to
>>>>>> just having one link, it doesn't support a chain of them.
>>>>>>
>>>>>> I'll try and write a test case for this just to see if it actually works,
>>>>>> so far it's totally untested. 
>>>>>>
>>>>>> Adding Pavel to the CC.
>>>>>
>>>>> Minor tweak to ensuring we do the right thing for async offload as well,
>>>>> and it tests fine for me. Test case is:
>>>>>
>>>>> - Run as root
>>>>> - Register personality for root
>>>>> - create root only file
>>>>> - check we can IORING_OP_OPENAT the file
>>>>> - switch to user id test
>>>>> - check we cannot IORING_OP_OPENAT the file
>>>>> - check that we can open the file with IORING_OP_USE_CREDS linked
>>>>
>>>> I didn't like it becoming a bit too complicated, both in terms of
>>>> implementation and use. And the fact that we'd have to jump through
>>>> hoops to make this work for a full chain.
>>>>
>>>> So I punted and just added sqe->personality and IOSQE_PERSONALITY.
>>>> This makes it way easier to use. Same branch:
>>>>
>>>> https://git.kernel.dk/cgit/linux-block/log/?h=for-5.6/io_uring-vfs-creds
>>>>
>>>> I'd feel much better with this variant for 5.6.
>>>>
>>>
>>> To be honest, sounds pretty dangerous. Especially since somebody started talking
>>> about stealing fds from a process, it could lead to a nasty loophole somehow.
>>> E.g. root registers its credentials, passes io_uring it to non-privileged
>>> children, and then some process steals the uring fd (though, it would need
>>> priviledged mode for code-injection or else). Could we Cc here someone really
>>> keen on security?
>>
>> Link? If you can steal fds, then surely you've already lost any sense of
> 
> https://lwn.net/Articles/808997/
> But I didn't looked up it yet.

This isn't new by any stretch, it's always been possible to pass file
descriptors through SCM_RIGHTS. This just gives you a new way to do it.
That's not stealing or leaking, it's deliberately passing it to someone
else.

>> security in the first place? Besides, if root registered the ring, the root
>> credentials are already IN the ring. I don't see how this adds any extra
>> holes.
> 
> Isn't it what you fixed in ("don't use static creds/mm assignments") ?

Sure, but SQPOLL still uses it.

> I'm not sure what capability (and whether any) it would need, but
> better to think such cases through. Just saying, I would prefer to ask
> a person with extensive security experience, unlike me.

I don't disagree, but I really don't think this is any different than
what we already allow.

-- 
Jens Axboe


WARNING: multiple messages have this Message-ID (diff)
From: Jens Axboe <axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
To: Pavel Begunkov
	<asml.silence-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Stefan Metzmacher <metze-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
Cc: io-uring <io-uring-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Linux API Mailing List
	<linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: IORING_REGISTER_CREDS[_UPDATE]() and credfd_create()?
Date: Tue, 28 Jan 2020 13:56:00 -0700	[thread overview]
Message-ID: <43a57f2a-16da-e657-3dca-5aa3afe31318@kernel.dk> (raw)
In-Reply-To: <60253bd9-93a7-4d76-93b6-586e4f55138c-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

On 1/28/20 1:50 PM, Pavel Begunkov wrote:
> On 28/01/2020 23:19, Jens Axboe wrote:
>> On 1/28/20 1:16 PM, Pavel Begunkov wrote:
>>> On 28/01/2020 22:42, Jens Axboe wrote:
>>>> On 1/28/20 11:04 AM, Jens Axboe wrote:
>>>>> On 1/28/20 10:19 AM, Jens Axboe wrote:
>>>>>> On 1/28/20 9:19 AM, Jens Axboe wrote:
>>>>>>> On 1/28/20 9:17 AM, Stefan Metzmacher wrote:
>>>>>> OK, so here are two patches for testing:
>>>>>>
>>>>>> https://git.kernel.dk/cgit/linux-block/log/?h=for-5.6/io_uring-vfs-creds
>>>>>>
>>>>>> #1 adds support for registering the personality of the invoking task,
>>>>>> and #2 adds support for IORING_OP_USE_CREDS. Right now it's limited to
>>>>>> just having one link, it doesn't support a chain of them.
>>>>>>
>>>>>> I'll try and write a test case for this just to see if it actually works,
>>>>>> so far it's totally untested. 
>>>>>>
>>>>>> Adding Pavel to the CC.
>>>>>
>>>>> Minor tweak to ensuring we do the right thing for async offload as well,
>>>>> and it tests fine for me. Test case is:
>>>>>
>>>>> - Run as root
>>>>> - Register personality for root
>>>>> - create root only file
>>>>> - check we can IORING_OP_OPENAT the file
>>>>> - switch to user id test
>>>>> - check we cannot IORING_OP_OPENAT the file
>>>>> - check that we can open the file with IORING_OP_USE_CREDS linked
>>>>
>>>> I didn't like it becoming a bit too complicated, both in terms of
>>>> implementation and use. And the fact that we'd have to jump through
>>>> hoops to make this work for a full chain.
>>>>
>>>> So I punted and just added sqe->personality and IOSQE_PERSONALITY.
>>>> This makes it way easier to use. Same branch:
>>>>
>>>> https://git.kernel.dk/cgit/linux-block/log/?h=for-5.6/io_uring-vfs-creds
>>>>
>>>> I'd feel much better with this variant for 5.6.
>>>>
>>>
>>> To be honest, sounds pretty dangerous. Especially since somebody started talking
>>> about stealing fds from a process, it could lead to a nasty loophole somehow.
>>> E.g. root registers its credentials, passes io_uring it to non-privileged
>>> children, and then some process steals the uring fd (though, it would need
>>> priviledged mode for code-injection or else). Could we Cc here someone really
>>> keen on security?
>>
>> Link? If you can steal fds, then surely you've already lost any sense of
> 
> https://lwn.net/Articles/808997/
> But I didn't looked up it yet.

This isn't new by any stretch, it's always been possible to pass file
descriptors through SCM_RIGHTS. This just gives you a new way to do it.
That's not stealing or leaking, it's deliberately passing it to someone
else.

>> security in the first place? Besides, if root registered the ring, the root
>> credentials are already IN the ring. I don't see how this adds any extra
>> holes.
> 
> Isn't it what you fixed in ("don't use static creds/mm assignments") ?

Sure, but SQPOLL still uses it.

> I'm not sure what capability (and whether any) it would need, but
> better to think such cases through. Just saying, I would prefer to ask
> a person with extensive security experience, unlike me.

I don't disagree, but I really don't think this is any different than
what we already allow.

-- 
Jens Axboe

  reply	other threads:[~2020-01-28 20:56 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-28 10:18 IORING_REGISTER_CREDS[_UPDATE]() and credfd_create()? Stefan Metzmacher
2020-01-28 10:18 ` Stefan Metzmacher
2020-01-28 16:10 ` Jens Axboe
2020-01-28 16:10   ` Jens Axboe
2020-01-28 16:17   ` Stefan Metzmacher
2020-01-28 16:17     ` Stefan Metzmacher
2020-01-28 16:19     ` Jens Axboe
2020-01-28 16:19       ` Jens Axboe
2020-01-28 17:19       ` Jens Axboe
2020-01-28 17:19         ` Jens Axboe
2020-01-28 18:04         ` Jens Axboe
2020-01-28 18:04           ` Jens Axboe
2020-01-28 19:42           ` Jens Axboe
2020-01-28 19:42             ` Jens Axboe
2020-01-28 20:16             ` Pavel Begunkov
2020-01-28 20:16               ` Pavel Begunkov
2020-01-28 20:19               ` Jens Axboe
2020-01-28 20:19                 ` Jens Axboe
2020-01-28 20:50                 ` Pavel Begunkov
2020-01-28 20:50                   ` Pavel Begunkov
2020-01-28 20:56                   ` Jens Axboe [this message]
2020-01-28 20:56                     ` Jens Axboe
2020-01-28 21:25                     ` Christian Brauner
2020-01-28 21:25                       ` Christian Brauner
2020-01-28 22:38                       ` Pavel Begunkov
2020-01-28 22:38                         ` Pavel Begunkov
2020-01-28 23:36             ` Pavel Begunkov
2020-01-28 23:36               ` Pavel Begunkov
2020-01-28 23:40               ` Jens Axboe
2020-01-28 23:40                 ` Jens Axboe
2020-01-28 23:51                 ` Jens Axboe
2020-01-28 23:51                   ` Jens Axboe
2020-01-29  0:10                   ` Pavel Begunkov
2020-01-29  0:10                     ` Pavel Begunkov
2020-01-29  0:15                     ` Jens Axboe
2020-01-29  0:15                       ` Jens Axboe
2020-01-29  0:18                       ` Jens Axboe
2020-01-29  0:18                         ` Jens Axboe
2020-01-29  0:20                     ` Jens Axboe
2020-01-29  0:20                       ` Jens Axboe
2020-01-29  0:21                       ` Pavel Begunkov
2020-01-29  0:21                         ` Pavel Begunkov
2020-01-29  0:24                         ` Jens Axboe
2020-01-29  0:24                           ` Jens Axboe
2020-01-29  0:54                           ` Jens Axboe
2020-01-29  0:54                             ` Jens Axboe
2020-01-29 10:17                             ` Pavel Begunkov
2020-01-29 10:17                               ` Pavel Begunkov
2020-01-29 13:11                               ` Stefan Metzmacher
2020-01-29 13:11                                 ` Stefan Metzmacher
2020-01-29 13:41                                 ` Pavel Begunkov
2020-01-29 13:41                                   ` Pavel Begunkov
2020-01-29 13:56                                   ` Stefan Metzmacher
2020-01-29 13:56                                     ` Stefan Metzmacher
2020-01-29 14:23                                     ` Pavel Begunkov
2020-01-29 14:23                                       ` Pavel Begunkov
2020-01-29 14:27                                       ` Stefan Metzmacher
2020-01-29 14:27                                         ` Stefan Metzmacher
2020-01-29 14:34                                         ` Pavel Begunkov
2020-01-29 14:34                                           ` Pavel Begunkov
2020-01-29 17:34                                       ` Jens Axboe
2020-01-29 17:34                                         ` Jens Axboe
2020-01-29 17:42                                         ` Jens Axboe
2020-01-29 17:42                                           ` Jens Axboe
2020-01-29 20:09                                           ` Stefan Metzmacher
2020-01-29 20:09                                             ` Stefan Metzmacher
2020-01-29 20:48                                             ` Jens Axboe
2020-01-29 20:48                                               ` Jens Axboe
2020-01-29 17:46                                         ` Pavel Begunkov
2020-01-29 17:46                                           ` Pavel Begunkov
2020-01-29 14:59             ` Jann Horn
2020-01-29 14:59               ` Jann Horn
2020-01-29 17:34               ` Jens Axboe
2020-01-29 17:34                 ` Jens Axboe
2020-01-30  1:08                 ` Jens Axboe
2020-01-30  1:08                   ` Jens Axboe
2020-01-30  2:20                   ` Jens Axboe
2020-01-30  2:20                     ` Jens Axboe
2020-01-30  3:18                     ` Jens Axboe
2020-01-30  3:18                       ` Jens Axboe
2020-01-30  6:53                   ` Stefan Metzmacher
2020-01-30  6:53                     ` Stefan Metzmacher
2020-01-30 10:11                   ` Jann Horn
2020-01-30 10:11                     ` Jann Horn
2020-01-30 10:26                     ` Christian Brauner
2020-01-30 10:26                       ` Christian Brauner
2020-01-30 14:11                       ` Jens Axboe
2020-01-30 14:11                         ` Jens Axboe
2020-01-30 14:47                         ` Stefan Metzmacher
2020-01-30 14:47                           ` Stefan Metzmacher
2020-01-30 15:34                           ` Jens Axboe
2020-01-30 15:34                             ` Jens Axboe
2020-01-30 15:13                         ` Christian Brauner
2020-01-30 15:13                           ` Christian Brauner
2020-01-30 15:29                           ` Jens Axboe
2020-01-30 15:29                             ` Jens Axboe

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=43a57f2a-16da-e657-3dca-5aa3afe31318@kernel.dk \
    --to=axboe@kernel.dk \
    --cc=asml.silence@gmail.com \
    --cc=io-uring@vger.kernel.org \
    --cc=linux-api@vger.kernel.org \
    --cc=metze@samba.org \
    /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.