Web lists-archives.com

Re: Limiting the power of packages




Hi!

On Thu, 2018-10-04 at 08:38:09 +0800, Paul Wise wrote:
> On Thu, Oct 4, 2018 at 1:19 AM Lars Wirzenius wrote:
> > The problem: when a .deb package is installed, upgraded, or removed,
> > the maintainer scripts are run as root and can thus do anything.

Paul prompted a similar discussion the other day on #debian-apt after
posting a link to
<https://news.softpedia.com/news/skype-for-debian-could-allow-attackers-to-completely-takeover-machines-523013.shtml>
(which BTW seems like a complete bogus report to me, but oh well).

> anarcat wrote this related wiki page that covers this general topic:
> 
> https://wiki.debian.org/UntrustedDebs
> 
> The maintainer scripts are just the first problem that comes up when
> installing untrusted packages.
> 
> There are myriad ways a package could install files that allow it to
> get root. setuid binaries, cron jobs, systemd units, apt keyring
> information, sudoers files and so on. The amount of stuff that can
> lead to root completely depends on the packages one already has
> installed. Then there are myriad other things that don't allow root
> that untrusted applications should not get hold of (like your private
> diary, some keys or passwords etc).

IMO the whole premise is flawed. If you do not trust the .deb, then you
should not be even installing it using dpkg, less running it unconfined,
as its paradigm is based on fully trusting the .debs, on using shared
resources, and on system integration. Let me expand:

 * To "safely" install an untrusted .deb we'd need (at least) to disarm
   the following (current or future) features:
   - any dependency (Provides, Replaces, (Pre-)Depends, Conflicts, Breaks).
     + can be used to pull in new attack vectors, for their interfaces,
       vulnerabilities, or to interpose functionality for some of their
       optional features, f.ex.
   - any maintainer script.
   - any trigger activation.
   - any future declarative diversions, alternatives or user creation.
   - any char/block device.
   - any symlink.
   - any suid bit.
   - any future xattrs, acls.
   - installation on anything that is part of the standard paths,
     including **/usr**, /var, /etc, /bin, /sbin, /lib, etc.
     + installing under /usr, means you can interpose programs, or
       takeover names for optional functionality used by other
       privileged programs, or install things that might end up being
       used by a privileged user.
     + the only viable candidate might be /opt, and existing programs
       might be even trying to read from there, so it might not even
       be safe.

 * To "safely" (perhaps, but I'd rather not) run these untrusted
   programs, you'd better contain this as much as possible, different
   real users, namespaces, virtualization, whatever, but definitely
   not running these directly from the PATH unconfined.

   (But then, I'm personally not very impressed with the security state
   of Linux (or any Unix) due to layers upon layers of complexity and
   patchwork to plug the holes. IMO any systems that is not founded
   upon a capabillity-based security paradigm is doomed.
   <https://en.wikipedia.org/wiki/Capability-based_security>.)

 * Would need to define some way to denote these .debs as untrusted,
   but that should be done only by a trusted component, which (apt)?
   What happens if a user gets hold of such .deb and installs it
   manually with dpkg, not triggering the "untrusted mode"? Or we
   start signing the .deb container itself, and use debsig-verify to
   distinguish them.

 * Would need to define some kind of new metadata, that gets strongly
   validated, so that these stripped packages can get back some kind
   of integration in the system.

 * The only parts that have been "audited" and are considered attack
   vectors in dpkg are dpkg-deb and dpkg-source, as they can be used
   to analyze untrusted data. Everything else assumes fully trusted
   data.

So, while most of the above list could be implemented, what you get
left after stripping/disarming all the features, and adding back the
integration, etc., does not resemble a standard .deb, except for the
container format. :)

> To fully solve the problem you need a whitelist based approach that
> ends up something completely different like Flatpak.

Exactly, if you do not consider the original premise flawed, you might
as well use one of the tools that has been designed precisely for that
purpose?

Thanks,
Guillem