[ 
https://issues.apache.org/jira/browse/YARN-7430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16243982#comment-16243982
 ] 

Shane Kumpf commented on YARN-7430:
-----------------------------------

{quote}
This is not true, see the following examples:
{quote}

I guess I don't understand what those examples are trying to convey. I become 
root with or without privileged if I don't supply the --user/uid flags. The 
centos image has no USER entry, so this is what I would expect.

{code}
[foo@localhost ~]$ docker run -it centos:latest bash
[root@00f0c3ac84cf /]# id
uid=0(root) gid=0(root) groups=0(root)

[foo@localhost ~]$ docker run -it --privileged centos:latest bash
[root@955eb326cb66 /]# id
uid=0(root) gid=0(root) groups=0(root)
{code}

With user remapping disabled, which is the default, the {{docker run}} form is 
different than what you are testing. It is {{docker run --detach=true 
--user=<username> ...}} (not --user=<uid>) - that doesn't seem to suffer from 
the issue you call out where the primary group is missing, since the container 
fails to start if the user doesn't exist in the container.

{code:java}
[foo@localhost ~]$ docker run -it --user=foo centos:latest bash
docker: Error response from daemon: linux spec user: unable to find user foo: 
no matching entries in passwd file
{code}

At this point, I'm confused on exactly what conditions result in this exploit. 
Can you clarify? I've yet to see the form you tested occur anywhere. I see the 
following: 

* Without user remapping: docker run --user='skumpf' ... 
* With user remapping: docker run --user='501:502' --group-add='502' ... 

{quote}
When --privileged=true and --user are set, the container is started with root 
privilegs and drop to the user privileges. If there is sticky bits binary in 
the container file system, it is possible for process to resume root 
privileges. If the container filesystem can be tainted by pushing custom image 
with sticky bits, then jailbreak is possible.
{quote}

I don't understand how that is exploitable. The ENTRYPOINT/CMD will be run as 
the user supplied by YARN. If the ENTRYPOINT/CMD is a setuid binary that gives 
that user root access in the container, this becomes true, but I can do that 
without a privileged container.

{quote}
Docker does not make any change to the file permission.
{quote}

That's my point. Consider the following Dockerfile:
{code}
FROM centos

USERADD foo

USER foo

COPY run.sh /

CMD /run.sh
{code}

I then submit an application as user "skumpf" that uses the image above. The 
localized resources and container launch script is owned by "skumpf" on the 
host and will be bind mounted into the container. With the current behavior 
using {{docker run}} and {{--user}} the the launch script will be ran as 
"skumpf" (per our docs skumpf must exist in the container and have the same UID 
as the host), even in the privileged case. If we remove {{--user}} from 
{{docker run}} in the the privileged case, then now the the launch script will 
be executed by user "foo" in my container, using whatever UID "foo" has in the 
container. User "foo" in the container does not have permission to execute the 
launch script owned by "skumpf" and thus the container will fail to launch with 
a permission denied error. We need the {{--user/uid}} option even if privileged 
is requested, because without it, we have no idea what user the container will 
run as.

> User and Group mapping are incorrect in docker container
> --------------------------------------------------------
>
>                 Key: YARN-7430
>                 URL: https://issues.apache.org/jira/browse/YARN-7430
>             Project: Hadoop YARN
>          Issue Type: Sub-task
>          Components: security, yarn
>    Affects Versions: 2.9.0, 3.0.0
>            Reporter: Eric Yang
>            Assignee: Eric Yang
>            Priority: Blocker
>         Attachments: YARN-7430.001.patch
>
>
> In YARN-4266, the recommendation was to use -u [uid]:[gid] numeric values to 
> enforce user and group for the running user.  In YARN-6623, this translated 
> to --user=test --group-add=group1.  The code no longer enforce group 
> correctly for launched process.  
> In addition, the implementation in YARN-6623 requires the user and group 
> information to exist in container to translate username and group to uid/gid. 
>  For users on LDAP, there is no good way to populate container with user and 
> group information. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to