On July 24, 2014 at 11:58:01 AM, Justin Cappos (jcap...@nyu.edu) wrote:
FYI: PEP 458 provides a way to address most of the security issues with this as
well. (We call these "provides-everything" attacks in some of our prior work:
https://isis.poly.edu/~jcappos/papers/cappos_pmsec_tr08-02.pdf)
One way of handling this is that whomever registers the name can choose what
other packages can be registered that meet that dependency. Another is that
PyPI could automatically manage the metadata for this. Clearly someone has to
be responsible for making sure that this is 'off-by-default' so that a
malicious party cannot claim to provide a popular package and get their
software installed instead. What do you think makes the most sense?
Even if only "the right" projects can create trusted packages for a dependency,
there are security issues also with respect to which package should be trusted.
Suppose you have projects zap and bar, which should be chosen to meet a
dependency. Which should be used?
With TUF we currently support them choosing a fixed project (zap or bar), but
supporting the most recent upload is also possible. We had an explicit tag
and type of delegation in Stork for this case (the timestamp tag), but I think
we can get equivalent functionality with threshold signatures in TUF.
Once we understand more about how people would like to use it, we can make sure
PEP 458 explains how this is supported in a clean way while minimizing the
security impact.
Thanks,
Justin
Sorry, I think the provides functionality is outside of the scope of what we
would use TUF for. It is *only* respected if you have that project installed.
In other words if there is a package “FakeDjango” which provides “Django”, then
``pip install Django`` will *never* install “FakeDjango”. However if you’ve
already done ``pip install FakeDjango`` then later on you do ``pip install
Django`` it will see that it is already installed (because “FakeDjango”
provides it).
IOW it only matters once you’ve already chosen to trust that package and have
installed it. This is to prevent any sort of spoofing attacks and to simplify
the interface. This doesn’t prevent a project which you’ve elected to trust by
installing it from spoofing itself, but it’s impossible to prevent them from
doing that anyways without hobbling our package formats so much that they are
useless. For instance any ability to execute code (such as setup.py!) means
that FakeDjango could, once installed, spoof Django just by dropping the
relevant metadata files to say it is already installed.
--
Donald Stufft
PGP: 0x6E3CBCE93372DCFA // 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA
_______________________________________________
Distutils-SIG maillist - Distutils-SIG@python.org
https://mail.python.org/mailman/listinfo/distutils-sig