Insecure permissions on profile directory (CVE-2019-18192)
We have become aware of a security issue for Guix on multi-user systems
that we have just fixed
(CVE-2019-18192).
Anyone running Guix on a multi-user system is encouraged to upgrade
guix-daemon
—see below for instructions.
Context
The default user profile, ~/.guix-profile
, points to
/var/guix/profiles/per-user/$USER
. Until now,
/var/guix/profiles/per-user
was world-writable, allowing the guix
command to create the $USER
sub-directory.
On a multi-user system, this allowed a malicious user to create and
populate that $USER
sub-directory for another user that had not yet
logged in. Since /var/…/$USER
is in $PATH
, the target user could
end up running attacker-provided code. See
the bug report for more information.
This issue was initially reported by Michael Orlitzky for Nix (CVE-2019-17365).
Fix
The fix
consists in letting
guix-daemon
create these directories on behalf of users and removing
the world-writable permissions on per-user
.
For cluster
setups
where clients connect to the daemon over TCP (thanks to the --listen
option of
guix-daemon
),
the fix requires guix-daemon
to be able to resolve user names so
that it can create /var/…/per-user/$USER
with the right ownership.
Note also that the guix
command prior to this fix would not
communicate the user name it’s running under to the daemon, thereby
preventing it from creating that directory on its behalf.
Upgrading
On multi-user systems, we recommend upgrading the daemon now.
To upgrade the daemon on Guix System, run:
guix pull
sudo guix system reconfigure /etc/config.scm
sudo herd restart guix-daemon
On other distros, run something along these lines:
sudo guix pull
sudo systemctl restart guix-daemon.service
Once you’ve run guix build hello
or any other guix
command, you
should see that /var/guix/profiles/per-user
is no longer
world-writable:
$ ls -ld /var/guix/profiles/per-user
drwxr-xr-x 5 root root 4096 Jun 23 2017 /var/guix/profiles/per-user
Please report any issues you may have to
guix-devel@gnu.org
. See the
security web page for information on
how to report security issues.
About GNU Guix
GNU Guix is a transactional package manager and an advanced distribution of the GNU system that respects user freedom. Guix can be used on top of any system running the kernel Linux, or it can be used as a standalone operating system distribution for i686, x86_64, ARMv7, and AArch64 machines.
In addition to standard package management features, Guix supports transactional upgrades and roll-backs, unprivileged package management, per-user profiles, and garbage collection. When used as a standalone GNU/Linux distribution, Guix offers a declarative, stateless approach to operating system configuration management. Guix is highly customizable and hackable through Guile programming interfaces and extensions to the Scheme language.
Unless otherwise stated, blog posts on this site are copyrighted by their respective authors and published under the terms of the CC-BY-SA 4.0 license and those of the GNU Free Documentation License (version 1.3 or later, with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts).