Dependency cooldowns turn you into a free-rider
Posted by pabs3 6 days ago
Comments
Comment by dominicq 6 days ago
This is wrong to an extent.
This plan works by letting software supply chain companies find security issues in new releases. Many security companies have automated scanners for popular and less popular libraries, with manual triggers for those libraries which are not in the top N.
Their incentive is to be the first to publish a blog post about a cool new attack that they discovered and that their solution can prevent.
Comment by riknos314 6 days ago
Status quo (at least in most language's package managers) + cooldowns basically means that running those checks happens in parallel with the new version becoming the implicit default version shipped to the public. Isn't it better to run the safety and security checks before making it the default?
Comment by Ozzie_osman 6 days ago
Comment by crabmusket 5 days ago
Comment by kibwen 5 days ago
This is the wrong framing.
There's no free lunch here. Delays in publishing not only slow down attacks, they also slow down critical security patches. There's no one-size-fits-all policy here, you're at risk either way.
Comment by aragilar 6 days ago
Comment by Zababa 6 days ago
This is true but that doesn't make "Dependency cooldowns turn you into a free-rider", the title of the article and the subject of the first part, true.
Comment by kstenerud 6 days ago
That's a lot less work than putting an extra validation step into the publishing pipeline. And with sane defaults it lets the user make an informed decision when special circumstances arise.
Comment by ghighi7878 5 days ago
Comment by absynth 6 days ago
Comment by SAI_Peregrinus 5 days ago
Comment by arianvanp 6 days ago
They do do original work sometimes. But most of it feels like reposted stuff from the open source community or even other vendors
Comment by weinzierl 5 days ago
If it was that easy we'd simply find all vulnerabilities before the release. If the supply chain companies can run the scanners you can (and should) run them too. Even if we assume there is more to it, it would make sense to let those companies do the work before GA.
But it is not that easy. The true value comes from many eye balls and then we are back at cooldowns being some eye balls grifting others.
Comment by codebje 5 days ago
No-one is hurt by having the cooldown. Hackers could choose to also have a cooldown, but must balance the risk of competing groups exploiting vulnerabilities first against the reward of a bigger pool of victims to exploit, and without collusion that still favours early exploits over held ones.
Comment by weinzierl 5 days ago
No, but they are the reason software supply chain companies look into the releases. Cool downs very well shift the priorities and therefore hurt the ones not doing them, or doing shorter periods.
Comment by renewiltord 6 days ago
Comment by bnjemian 6 days ago
If you instead decide that the Upload Queue can't be circumvented, now you're increasing the duration a patch for a CVE is visible. Even if the CVE disclosure is not made public, the patch sitting in the Upload Queue makes it far more discoverable.
Best as I can tell, neither one of these fairly obvious issues are covered in this blog post, but they clearly need to be addressed for Upload Queues to be a good alternative.
--
Separately, at least with NPM, you can define a cooldown in your global .npmrc, so the argument that cooldowns need to be implemented per project is, for at least one (very) common package manger, patently untrue.
# Wait 7 days before installing > npm config set min-release-age 7
Comment by vlovich123 6 days ago
There’s a bunch of other improvements they call out like automated scanners before distribution and exactly what changed between two distributed versions.
The only oversight I think in the proposal is staggered distributions so that projects declare a UUID and the distribution queue progressively makes it available rather than all or nothing
Comment by calpaterson 6 days ago
That is indeed an oversight - I wish I had thought of that idea!
Comment by vlovich123 5 days ago
Comment by vlovich123 4 days ago
Comment by LtWorf 5 days ago
Comment by xg15 6 days ago
I'm pretty sure, once cooldowns are widely implemented, the first priority of attackers will become to convince people to make an exception for their update because "this is really really urgent" etc.
Comment by iainmerrick 6 days ago
Comment by ryanjshaw 6 days ago
We need to revitalize research into capabilities-based security on consumer OSs, which AFAIK is the only thing that solves this problem. (Web browsers - literally user “agents” - solve this problem with capabilities too: webapps get explicit access to resources, no ambient authority to files, etc.)
Solving this problem will only become more pressing as we have more agents acting on our behalf.
Comment by _3u10 6 days ago
Comment by endymi0n 6 days ago
Comment by okanat 6 days ago
Comment by johnny22 6 days ago
Comment by skeeter2020 5 days ago
min-release-age=7 # days
ignore-scripts=true
Comment by onionisafruit 6 days ago
Comment by kibwen 5 days ago
And, you know, all the downstream users trying to install fixes for zero-days.
Comment by dingdongditchme 6 days ago
Comment by therealpygon 5 days ago
Comment by swiftcoder 6 days ago
Comment by dingdongditchme 6 days ago
Comment by 8cvor6j844qw_d6 6 days ago
Comment by suzzer99 6 days ago
Comment by thaumasiotes 6 days ago
Yes, that's what free-riding is.
And the major problem, which the article touches on but doesn't do much to explore, is that if you characterize this as "responsible behavior", it will automatically cause itself to fail, because all of the benefits come from free-riding. The only benefit of waiting is that other people might not do it, and those people will drive improvements. If everyone waits, the only thing that happens is that (1) improvements will take longer to be developed, and (2) everyone experiences exactly the same problems as they would have if no one waited. There's no benefit, but increased cost.
Imagine you and everyone you know are inside a minefield. You need to leave, because you have no water.
Does waiting until enough people have killed themselves to establish the outline of a safe path out make you a free-rider?
What is there to be gained by instituting a waiting period before any attempt to leave?
Comment by skeeter2020 5 days ago
Comment by pamcake 6 days ago
Not to mention the (apparently not obvious?) option of detaching review- and release versions. We still look at the diff of latest versions of dependencies before they reach our codebase. That seems like the most responsible.
Besides, why stop there? Everyone installing packaged builds from NPM are already freeriding from those installing sources straight from Github releases. smh
Comment by p0w3n3d 6 days ago
Servants! Just do your open source magic, We're impatient! Ah and thanks for all the code, our hungry hungry LLMs were starving.
Comment by LtWorf 5 days ago
Comment by duskdozer 6 days ago
>And the PSF even recently took in $1.5m from Anthropic for, among other things: supply-chain security.
Comment by p0w3n3d 6 days ago
Maybe it's only mine feeling, so I hope you guys have different experience.
Comment by duskdozer 5 days ago
Comment by LtWorf 5 days ago
Basically they got some free tokens, not actual "money".
Also I got a 2 week ban on the python discuss for suggesting that people who contribute on behalf of companies (such as microsoft) should be disclosing it. So PSF is as corporate as it gets in my eyes.
Comment by duskdozer 5 days ago
Comment by ArcHound 6 days ago
I'd argue for intentional dependency updates. It just so happens that it's identified in one sprint and planned for the next one, giving the team a delay.
First of all, sometimes you can reject the dependency update. Maybe there is no benefit in updating. Maybe there are no important security fixes brought by an update. Maybe it breaks the app in one way or another (and yes, even minor versions do that).
After you know why you want to update the dependency, you can start testing. In an ideal world, somebody would look at the diff before applying this to production. I know how this works in the real world, don't worry. But you have the option of catching this. If you automatically update to newest you don't have this option.
And again, all these rituals give you time - maybe someone will identify attacks faster. If you perform these rituals, maybe that someone will be you. Of course, it is better for the business to skip this effort because it saves time and money.
Comment by internet_points 6 days ago
Dependency cooldowns, like staged update rollouts, mean less brittleness / more robustness in that not every part of society is hit at once. And the fact that cooldowns are not evenly distributed is a good thing. Early adopters and vibe coders take more chances, banks should take less.
But yeah, upload queues also make sense. We should have both!
Comment by ball_of_lint 5 days ago
Dependency cooldowns are how you can improve your security on an individual level. Using them does not make you a free rider any more than using Debian instead of Ubuntu instead of Arch does. Different people/companies/machines have different levels of acceptable risk - cooldowns let you tune that to your use case. Using open source software does not come with a contract or responsibility for free, implicit pentesting.
Upload queues are how a package manager/registry can collectively improve security for it's users. I cannot implement an upload queue for just me - the value comes from it being done in a centralized way.
I'm in favor of both, though hopefully with upload queues the broader practice of long dependency cooldowns would become more limited to security-focused applications.
Comment by JR1427 6 days ago
The main reason for the cooldown is so security companies can find the issues, not that unwitting victims will find them.
One problem of the central cooldown is that it restricts the choice to be able to consume a package immediately, and some people might think that a problem.
Comment by Cthulhu_ 6 days ago
Of course the problem there is that security audits are fallible. Some issues are so subtle that they are only revealed years after they're introduced, despite them being open source and subject to potentially all the tools and eyes.
Comment by ball_of_lint 5 days ago
I can implement a dependency cooldown for my org and benefit from it immediately. An upload queue gets its value from being done centrally and allowing security researchers early access and the ability to coordinate.
Comment by crabmusket 5 days ago
Huh? The article specifically suggests there could be an opt-in to early releases, and that the published revisions are available (e.g. for researchers) just not distributed by default.
Comment by antonvs 6 days ago
"Free riding" is not the right term here. It's more a case of being the angels in the saying "fools rush in where angels fear to tread".
If the industry as a whole were mature (in the sense of responsibility, not age), upgrades would be tested in offline environments and rolled out once they pass that process.
Of course, not everyone has the resources for that, so there's always going to be some "free riding" in that sense.
That dilutes the term, though. Different organizations have different tolerance for risk, different requirements for running the latest stuff, different resources. There's always going to be asymmetry there. This isn't free riding.
Comment by asdfasgasdgasdg 6 days ago
Then again, there are other areas where I feel that Kantian ethics also fail on collective action problems. The use of index funds for example can be argued against on the same line as we argue against waiting to update. (That is, if literally everyone uses index funds then price discovery stops working.) I wonder if this argument fails because it ignores that there are a diversity of preferences. Some organizations might be more risk averse, some less so. Maybe that's the only observation that needs to be made to defeat the argument.
Comment by Calazon 6 days ago
It seems like a helpful efficiency to spread out the testing burden (both deliberate testing and just updating and running into unexpected issues). If everyone updated everything immediately, everyone would be impacted by the same problems at the same time, which seems suboptimal.
Comment by antonvs 6 days ago
I addressed that in my comment, and you essentially repeated that point:
> I wonder if this argument fails because it ignores that there are a diversity of preferences.
The stalemate you described is only an issue if everyone is in the same circumstances and operating under the same criteria, but reality is very far from that situation.
Comment by usefulcat 6 days ago
I suspect there are some reasonable points to be made here, but frankly, I pretty much stopped reading after that. Way too simple minded.
Comment by BlackFly 6 days ago
It seems to me that many organizations are relying on other companies to do their auditing in any case, why not just admit that and explicitly rely on that? Choose who you trust, accept their audits. Organizations can perform or even outsource their own auditing and publish that.
Comment by pabs3 5 days ago
Comment by regularfry 6 days ago
That means there's an incentivised slot in the ecosystem for a group of package consumers who are motivated to find security problems quickly. It's not all on the wider development community.
Comment by darkamaul 5 days ago
They are already complex beasts of software, extremely important for the ecosystems, and not always well funded. Adding all this extra complexity, with official bypasses (for security reasons), monitoring APIs (for security review while a new version is in the queue), and others is not cheap.
And if somehow, they get the funding to do this, will they also get the funding for the maintenance in the long term?
I don't think the benefits here (which is only explicitly model the cooldown) are enough to offset the downsides.
Comment by 2001zhaozhao 6 days ago
Avg tech company: "that's perfect, we love to be free riders."
Comment by Dumbledumb 6 days ago
Comment by skybrian 6 days ago
If you're not doing the work yourself, it makes sense to give the people who review and test their dependencies some time to do their work.
Comment by qsera 6 days ago
Comment by JoshTriplett 6 days ago
Comment by gleenn 6 days ago
Comment by nikanj 6 days ago
Comment by fendy3002 6 days ago
Comment by nkrisc 6 days ago
Ever decided to not buy some new technology or video game or product right away and to wait and see if it’s worth it? You’re an immoral freeloader benefiting from the suffering of others who bought it right away.
Comment by unethical_ban 6 days ago
Anyone in the IT Ops side of things knows the adage that you don't run ".0" software. You wait for a while to let the kinks get worked out by those who can afford the risk of downtime, and of the vendors to find and work out bugs in new software on their own.
Are conservative, uptime-oriented organizations "free-riders" for waiting to install new software on critical systems? Is that a sin, as this implies?
The answer is no. It's certainly a quandry - someone has to run it first. But a little time to let it bake in labs and low-risk environments is worth it.
Comment by Terr_ 6 days ago
All else being equal, I'd rather the people who desire the new features be the earlier-adopters, because they're more likely to be the ones pushing for changes and because they're more likely to be watching what happens.
Comment by duskdozer 6 days ago
Comment by cush 5 days ago
Is the idea I’d point my security scanner at preview.registry.npmjs.org/ and npmjs.org would wait 7 days before the package would publish on the main registry?
Comment by bob1029 6 days ago
Think about how much cumulative human suffering must be experienced to bring you stable and effective products like this. Why hit the reset button right when things start getting good every time?
Comment by mr_mitm 6 days ago
Comment by taeric 5 days ago
Which, honestly, I think it is fair to say that a lot of supply chains are lulling people into a false sense of what they do. Your supply chain for groceries puts a lot of effort into making itself safe. Your supply chain for software dependencies is run more like a playground.
Comment by zarzavat 6 days ago
The real owner will (hopefully) notice when a malicious version is published.
If you use a cooldown then it gives the real owner of the account enough time to report the hack and get the malicious version taken down.
Comment by skeeter2020 5 days ago
Comment by absynth 6 days ago
Have a normal path, eg days, a week or more (a month!). Have a selection of fast paths. Much shorter time. Days or even hours. Exceptions require higher trust. Indicators like money / reputation / history could be useful signals even if its only part of a paper trail. Treat exceptions as acceptable but requiring good reasons and explanation. This means a CVE fix from someone with high reputation could go through faster. While exceptions don't reduce the need for scrutiny they do enable clarity about the alternative chosen. Mainly because someone had to justify it away from the normal path. That's valuable in itself.
There's no perfection here. Credit cards and credentials get stolen. Reputation drifts since people change for all kinds of reasons.
Queues buy time. Time to find out. Time to back out.
Comment by flemhans 5 days ago
But as others have noted, people having different cooldown settings means a nice staggered rollout.
Comment by rldjbpin 5 days ago
We used to focus more on finding issues before a new release, and while it remains common to find bugs in older ones, not having enough users should not be used as a crutch for testing.
> (dependency cooldowns) don't address the core issue: publishing and distribution are different things and it's not clear why they have to be coupled together.
Besides some edge cases for a large project, the core issue remains code quality and maintainability practices. The rush to push several patches per day is insane to me, especially in current AI ecosystem.
Breaking changes used to have enough transitionary period, see Python 2 to 3, while today it is done on a whim, even by SaaS folks who should provide better DX for their customers. Regardless, open-source/source-available projects now expect more from their users, and I wonder how much of it remains reasonable.
Comment by jcalvinowens 6 days ago
I think the key is to differentiate testing from deployment: you don't need to run bleeding edge everywhere to find bugs and contribute. Even running nightly releases on one production instance will surface real problems.
Comment by 8note 6 days ago
idk if one of the touted benefits is really real - you need to be able to jump changes to the front of the queue and get them out asap sometimes.
hacked credentials will definitely be using that path. it gives you another risk signal sure, but the power sticks around
Comment by snthpy 6 days ago
Upload queues are better than cooldowns
I almost didn't read it because I wasn't interested in a rant. This is a genuinely good idea though so I'm glad I did.
Alas, I did click through so perhaps the title is more effective than my sentiments.
Comment by twotwotwo 6 days ago
- One idea is for projects not to update each dep just X hours after release, but on their own cycles, every N weeks or such. Someone still gets bit first, of course, but not everyone at once, and for those doing it, any upgrade-related testing or other work also ends up conveniently batched.
- Developers legitimately vary in how much they value getting the newest and greatest vs. minimizing risk. Similar logic to some people taking beta versions of software. A brand new or hobby project might take the latest version of something; a big project might upgrade occasionally and apply a strict cooldown. For users' sake, there is value in any projects that get bit not being the widely-used ones!
- Time (independent of usage) does catch some problems. A developer realizes they were phished and reports, for example, or the issue is caught by someone looking at a repo or commit stream.
As I lamented in the other post, it's unfortunate that merely using an upgraded package for a test run often exposes a bunch of a project's keys and so on. There are more angles to attack this from than solely when to upgrade packages.
Comment by direwolf20 5 days ago
Comment by kazinator 4 days ago
However, a randomized cooldown may be a good idea. To borrow a pandemic term, it flattens the curve.
Comment by 12_throw_away 5 days ago
Good thing the internet is here to lecture me about all the secret obligations I have incurred by creating and using open source software!
Comment by leni536 6 days ago
Comment by hunterpayne 5 days ago
Comment by zmmmmm 6 days ago
Comment by groby_b 5 days ago
Early participation and beta programs are outsourcing careful engineering via making everybody else guinea pigs. If we want to sling around accusations of free-riding (really?!), you're slacking on testing and free-riding on your early users.
Comment by BrenBarn 6 days ago
Comment by collabs 6 days ago
Here is one example
https://www.nuget.org/packages/System.CommandLine#versions-b...
2.0.6 was released less than a day ago. How long will you wait? I'd argue any wait is unwarranted.
It sounds nice to people because we are used to thinking in terms of Microsoft Windows and Microsoft SQL Server releases where people wait for months after a new version is released to update. Except companies actually pay for these! So somehow this kind of illogical action or I would argue learned helplessness that happens with flagship Microsoft product releases is what we are now advocating as the default everywhere which is a terrible idea.
Dependency cooldowns should NOT be the default. I don't know what a proper solution is but I know this isn't it.
Comment by ajross 5 days ago
You find attacks via cross-organization auditing, like you do in Linux distros, and this doesn't do that.
Comment by burnto 6 days ago
But you’re not a “free-rider” if you intentionally let others leap before you. You’re just being cautious, which is rational behavior and should be baked into assumptions about how any ecosystem actually works.
Comment by whoamii 6 days ago
Comment by throwatdem12311 5 days ago
Comment by GuB-42 5 days ago
There are nuances of course, and things that are broken should be fixed, and unfortunately, they often don't want you to just fix what needs to be fixed, like security vulnerabilities. That's how stuff break constantly, you just wanted a patch for a buffer overflow, and you get an AI chatbot and your keyboard shortcuts disappeared.
Sometimes, they let you get only the things you want (i.e. actual fixes), it is important for companies that do serious business like banks, production lines, etc... They know it and charge good money for the privilege.
Comment by dmitrygr 5 days ago
Me choosing to NOT download something places NO burden on anyone else. There is no logic by which you'll convince me otherwise.
Comment by xacky 5 days ago
Comment by aitchnyu 6 days ago
Comment by vasco 6 days ago
But alas.
Comment by usernametaken29 6 days ago
Comment by UqWBcuFx6NV4r 6 days ago
Comment by charcircuit 6 days ago
Comment by jgalt212 5 days ago
Comment by renewiltord 6 days ago
Comment by philipallstar 6 days ago
Comment by joeframbach 6 days ago
No, nobody _has to_ implement it, and if only one did, then users who wanted cooldowns can migrate to that package manager.
Comment by chanux 6 days ago
But I get the point, it's a numbers game so any and all usage can help catching issues.
Comment by _kulang 6 days ago
Comment by hanspagel 5 days ago
Comment by kartika36363 6 days ago
Comment by woodruffw 5 days ago
[1]: https://lobste.rs/s/dl4jb6/dependency_cooldowns_turn_you_int...
Comment by axismundi 6 days ago
Snyk and socket.dev take money for the pain and suffering...
Comment by jimmypk 5 days ago
Comment by Egonex 6 days ago
Comment by agent-kay 5 days ago
Comment by moron4hire 6 days ago
Comment by Dedime 6 days ago
Users who want take the extra precaution of waiting an additional period of time must decide to manually configure this with their tooling.
This practice has been a thing in the sysadmin community for years and years - most sysadmins know that you never install Windows updates on the day they release.
Having a step before publication means that's it's essentially opt-in pre-release software, and that comes with baggage - I have zero doubts that many entities who download packages to scan for malware explicitly exclude pre-release software, or don't discover it at all until it's released through normal channels.