| ▲ | lelanthran 4 days ago |
| > The problem is email as it’s used currently. The solution is to not use email. No. The problem is unsigned package repositories. The solution is to tie a package to an identity using a certificate. Quickest way I can think off would be requiring packages to be linked to a domain so that the repository can always check incoming changes to packages using the incoming signature against the domain certificate. |
|
| ▲ | benchloftbrunch 3 days ago | parent | next [-] |
| As long as you're OK with self signed certificates or PGP keys, I'd be on board with this. I really, really dislike the idea of using TLS certificates as we know them for this purpose, because the certificate authority system is too centralized, hierarchical, and bureaucratic, tightly coupled to the DNS. That system is great for the centralized, hierarchical, bureaucratic enterprises who designed it in the 90s, but would be a pain in the ass for a solo developer, especially with the upcoming change to 45 day lifetimes. |
| |
| ▲ | lelanthran 3 days ago | parent [-] | | > As long as you're OK with self signed certificates or PGP keys, I'd be on board with this. I am with PGP but more wary of self-signed certs, though even self-signed certs allow mass revocation of packages when an author's cert is compromised. |
|
|
| ▲ | cluckindan 4 days ago | parent | prev | next [-] |
| And one pwned domain later, we are back in square one. |
| |
| ▲ | lelanthran 3 days ago | parent [-] | | > And one pwned domain later, we are back in square one. 1. It's an extra step: before you pwn the package, you need to pwn a domain. 2. When a domain is pwned, the packages it signs can be revoked with a single command. |
|
|
| ▲ | dabockster 4 days ago | parent | prev | next [-] |
| That wouldn't work against a really sophisticated attacker. Especially for something that's clearly being maintained for free by one overworked person in their spare time (yet again). You'd need some kind of offline verification method as well for these widely used infrastructure libraries. |
| |
| ▲ | lelanthran 3 days ago | parent [-] | | > That wouldn't work against a really sophisticated attacker. Nothing "really works" against a sophisticated hacker :-/ Doesn't mean that "defense in depth" does not apply. > You'd need some kind of offline verification method as well for these widely used infrastructure libraries. I don't understand why this is an issue, or even what it means: uploading a new package to the repository requires the contributor to be online anyway. The new/updated/replacement package will have to be signed. The signature must be verified by the upload script/handler. The verification can be done using the X509 certificate issued for the domain of the contributor. 1. If the contributor cannot afford the few dollars a year for a domain, they are extremely vulnerable to the supply chain attack anyway (by selling the maintenance of the package to a bad actor), and you shouldn't trust them anyway. 2. If the contributor's domain gets compromised you only have to revoke that specific certificate, and all packages signed with that certificate, in the past or in the future, would not be installable. As I have repeatedly said in the past, NPM (and the JS tools development community in general) had no adults in the room during the design phase. Everything about JS stacks feels like it was designed by children who had never programmed in anything else before. It's a total clown show. | | |
| ▲ | benchloftbrunch 3 days ago | parent | next [-] | | > X509 certificate It should be a PGP or SSH key, absolutely not an X509 certificate (unless you allow self signed). Personal identity keys should be fully autonomous and not contingent on the formal recognition of any external authority. | |
| ▲ | idiotsecant 3 days ago | parent | prev [-] | | If only they would have had the benefit of you being around to do all that work with your glorious hindsight. | | |
| ▲ | lelanthran 3 days ago | parent [-] | | > If only they would have had the benefit of you being around to do all that work with your glorious hindsight. They didn't need me; plenty of repositories doing signed packages existed well before npm was created. Which is why I likened them to a bunch of kids - they didn't look around at how the existing repos were designed, they just did the first thing that popped into their head. | | |
| ▲ | idiotsecant 3 days ago | parent [-] | | On the other hand, they did the actual work when nobody else did. It's so easy to take potshots, when you've never done anything consequential enough for the results to matter as much as they do for npm. |
|
|
|
|
|
| ▲ | rollcat 3 days ago | parent | prev [-] |
| > The solution is to tie a package to an identity using a certificate. Identity on the Internet is a lie. Nobody knows you're a dog. The solution is to make security easy and accessible, so that the user can't be confused into doing the insecure thing. |
| |
| ▲ | lelanthran 3 days ago | parent [-] | | > Identity on the Internet is a lie. What do you think HTTPS is? | | |
| ▲ | mdaniel 3 days ago | parent | next [-] | | Transport Layer Security, and has nothing to do with Identity. Take for example the perfectly valid certificate that was issued for npmjs[.]help which unquestionably does not belong to Microsoft/GitHub. Hell, even the certificate for npmjs.com is 'O=Google Trust Services' which doesn't sound like any of the business entities one would expect to own that cert | |
| ▲ | rollcat 2 days ago | parent | prev [-] | | "Whoever was on the cacert list that ships with your browser" has signed "I claim to be Acme Widgets Inc. and I own microsoft.com". |
|
|