6 ms·
Open source security at Astral
- darioterror 7mo ago[dead]
- darkamaul 7mo agoWith the recent incidents affecting Trivy and litellm, I find it extremely useful to have a guide on what to do to secure your release process. The advices here are really solid and actionable, and I would suggest any team to read them, and implement them if possible. The scary part with supply chain security is that we are only as secure as our dependencies, and if the platform you’re using has non secure defaults, the efforts to secure the full chain are that much higher.
- sevg 7mo agoFYI it was actually William Woodruff (the article author) and his team at Trail of Bits that worked with PyPI to implement Trusted Publishing.
- seabass-labrax 7mo agoAnd here's the video for his talk about it at PackagingCon 2023: https://www.youtube.com/watch?v=Fa9cI2Rf2qc https://www.youtube.com/watch?v=Fa9cI2Rf2qc
- ChrisArchitect 7mo agoEarlier submission from author: https://news.ycombinator.com/item?id=47691466 https://news.ycombinator.com/item?id=47691466
- raphinou 7mo agoOne (amongst other) big problem with current software supply chain is that a lot of tools and dependencies are downloaded (eg from GitHub releases) without any validation that it was published by the expected author. That's why I'm working on an open source, auditable, accountless, self hostable, multi sig file authentication solution. The multi sig approach can protect against axios-like breaches. If this is of interest to you, take a look at https://asfaload.com/ https://asfaload.com/
- darkamaul 7mo agoI’m maybe not understanding here, but isn’t it the point of release attestations (to authenticate that the release was produced by the authors)? [0] https://docs.github.com/en/actions/how-tos/secure-your-work/use-artifact-attestations/use-artifact-attestations https://docs.github.com/en/actions/how-tos/secure-your-work/...
- raphinou 7mo agoArtifact attestation are indeed another solution based on https://www.sigstore.dev/ https://www.sigstore.dev/ . I still think Asfaload is a good alternative, making different choices than sigstore: - Asfaload is accountless(keys are identity) while sigstore relies on openid connect[1], which will tie most user to a mega corp - Asfaload ' backend is a public git, making it easily auditable - Asfaload will be easy to self host, meaning you can easily deploy it internally - Asfaload is multisig, meaning event if GitHub account is breached, malevolent artifacts can be detected - validating a download is transparant to the user, which only requires the download url, contrary to sigstore [2] So Asfaload is not the only solution, but I think it has some unique characteristics that make it worth evaluating. 1:https://docs.sigstore.dev/about/security/ https://docs.sigstore.dev/about/security/ 2: https://docs.sigstore.dev/cosign/verifying/verify/ https://docs.sigstore.dev/cosign/verifying/verify/
- arianvanp 7mo agoThe problem is nobody checks. All the axios releases had attestations except for the compromised one. npm installed it anyway.
- raphinou 7mo agoYes, that's why I aim to make the checks transparant to the user. You only need to provide the download url for the authentication to take place. I really need to record a small demo of it.
- snthpy 7mo agoOverall I believe this is the right approach and something like this is what's required. I can't see any code or your product though so I'm not sure what to make of it.
- ramoz 7mo agoCreated an agent skill based on this blog. Assessing my own repos now. https://github.com/backnotprop/oss-security-audit https://github.com/backnotprop/oss-security-audit
- gauravkashyap6 7mo ago[dead]
- trashcan2137 7mo agoLengths people will go to rediscover Nix/Guix is beyond me
- 3abiton 7mo agoI don't see the connection though?
- Eufrat 7mo agoNix provides declarative, reproducible builds. So, ostensibly, if you had your build system using Nix, then some of the issues here go away. Unfortunately, Nix is also not how most people function. You have to do things the Nix way, period. The value in part comes from this strong opinion, but it also makes it inherently niche. Most people do not want to learn an entire new language/paradigm just so they can get this feature. And so it becomes a chicken and egg problem. IMHO, I think it also suffers from a little bit of snobbery and poor naming (Nix vs. NixOS vs. Nixpkgs) which makes it that much harder to get traction.
- diffeomorphism 7mo agoThere are different notions of "reproducible". Nix does not automatically make builds reproducible in the way that matters here: https://reproducible.nixos.org https://reproducible.nixos.org It is still good at that but the difference to other distros is rather small: https://reproducible-builds.org/citests/ https://reproducible-builds.org/citests/
- trashcan2137 7mo agoNix, if not used incorrectly (and they really make it hard to use it, both correctly and incorrectly lol), gives you reproducible and verifiable builds. Unfortunately I have to agree with the sibling comment that it suffers from poor naming and the docs are very hard to grok which makes it harder to get traction. I really hate the idea of `it's all sales at the end of the day` but if Nix could figure how to "sell" itself to more people then we would probably have less of those problems.
- 7mo ago
- jiusanzhou 7mo ago[dead]
- NeoBild 7mo ago[dead]
- dirkc 7mo agoThe open source ecosystem has come very far and proven to be resilient. And while trust will remain a crucial part of any ecosystem, we urgently need to improve our tools and practices when it comes to sandboxing 3rd party code. Almost every time I bump into uv in project work, the touted benefit is that it makes it easier to run projects with different python versions and avoiding clashes of 3rd dependencies - basically pyenv + venv + speed. That sends a cold shiver down my spine, because it tells me that people are running all these different tools on their host machine with zero sandboxing.
- Oxodao 7mo agomeh not always. I do use uv IN docker all the time, its quite handy
- dirkc 7mo agoHonest question - what are the main benefits for you when you use it in docker? ps. I feel like I've been doing python so long that my workflows have routed around a lot of legit problems :)
- sersi 7mo agoMain reason I now use uv is being able to specify a cool down period. pip allows it but it's with a timestamp so pretty much useless.. And that doesn't prevent me from running it into a sandbox or vm for an additional layer of security.
- zwp 7mo ago> pip allows it but it's with a timestamp A PR to be able to use a relative timestamp in pip was merged just last week https://github.com/pypa/pip/pull/13837/commits https://github.com/pypa/pip/pull/13837/commits
- Oxodao 7mo agoMainly the "project" system. I'm only developing python in my free time, not professionally so I'm not as well versed in its ecosystem as I would be in PHP. The fact that there's tons of way to have project-like stuff I don't want to deal with thoses. I used to do raw python containers + requirements.txt but the DX was absolutely not enjoyable. I'm just used to it now
- carderne 7mo agoIf anyone from Astral sees this: at this level of effort, how do you deal with the enormous dependence on Github itself? You maintain social connections with upstream, and with PyPA... what if Github is compromised/buggy and changes the effect of some setting you depend on?
- bognition 7mo ago> what if Github is compromised/buggy What if? GitHub has is extremely buggy! I'm getting increasingly frustrated with the paper cuts that have become endemic across the entire platform. For example its not uncommon for one of our workflows to fail when cloning a branches of the repo they are running in.
- carderne 7mo agoI deliberately didn't mention this because I think most of the pain with Github over the last year is probably caused to some degree by their scale, which seems like an unrelated issue. (But maybe not.)
- woodruffw 7mo agoWe talk to GitHub as well! You're right that they are an enormous and critical dependency, and we pay close attention to the changes they make to their platform.
- tao_oat 7mo agoThis is a really great overview; what a useful resource for other open-source projects.
- lrvick 7mo agoThe only binaries of uv in the world you can get that were full source bootstrapped from signed package commits to signed reviews to multi-signed deterministic artifacts are the ones from my teammates and I at stagex. All keys on geodistributed smartcards held by maintainers tied to a web of trust going back 25 years with over 5000 keys. https://stagex.tools/packages/core/uv/ https://stagex.tools/packages/core/uv/ Though thankful for clients that let individual maintainers work on stagex part time once in a while, we have had one donation ever for $50 as a project. (thanks) Why is it a bunch of mostly unpaid volunteer hackers are putting more effort into supply chain security than OpenAI. I am annoyed.
- duskdozer 7mo ago>Why is it a bunch of mostly unpaid volunteer hackers are putting more effort into supply chain security than OpenAI. Unpaid volunteer hackers provide their work for free under licenses designed for the purpose of allowing companies like OpenAI to use their work without paying or contributing in any form. OpenAI wants to make the most money. Why would they spend any time or money on something they can get for free?
- ra 7mo agoNot sure if you're fully over the context that openAI bought Astral - who "own" uv.
- hootz 7mo agoYep. Permissive licenses, "open source", it's all just free work for the worst corporations you can think.
- philipallstar 7mo agoIt's free work for anyone.
- tclancy 7mo agoNever let the left hand know what the right hand is doing. I suppose it works both ways here, but the specific end user is not why people make code available, it’s in the hope of improving things, even just the tiniest bit.
- Zopieux 7mo agoThe entire paragraph about version pinning using hashes (and using a map lookup for in-workflow binary deps) reminds me that software engineers are forever doomed to reinvent worse versions of nixpkgs and flakes. I don't even love Nix, it's full of pitfalls and weirdnesses, but it provides so much by-default immutability and reproducibility that I sometimes forget how others need to rediscover this stuff from first principles every time a supply chain attack makes the news.
- nDRDY 7mo ago>worse versions of nixpkgs and flakes You mean statically-compiled binaries and hash pinning? Those have been around a bit longer than Nix :-)
- HumanOstrich 7mo agoNix is a nightmare and so it usually gets paired with Rust for people who have a complexity fetish.
- 12_throw_away 7mo agoI don't have much experience with GitHub's CI offering. But if this is an accurate description of the steps you need to take to use it securely ... then I don't think it can, in fact, ever be used securely. Even if you trust Microsoft's cloud engineering on the backend, this is a system that does not appear to follow even the most basic principles of privilege and isolation? I'm not sure why you would even try to build "supply-chain security" on top of this.
- wofo 7mo agoOut of curiosity, is there a build setup you have seen in the past that you think could be a good replacement for this complex GitHub CI setup? Asking for a friend ;) Update: now I've finished reading the article, my impression is that complexity is mostly inherent to this problem space. I'd be glad to be proven wrong, though!
- everforward 7mo agoI think any of the webhook-based providers are better, because you can isolate your secrets. PRs go to a PR webhook that runs in an environment that just doesn’t have access to any secrets. Releases go to the release webhook, which should output nothing and ideally should be a separate machine/VM with firewall rules and DNS blocks that prevent traffic to anywhere not strictly required. Things are a lot harder to secure with modern dynamic infrastructure, though. Makes me feel old, but things were simpler when you could say service X has IP Y and add firewall rules around it. Nowadays that service probably has 15 IP addresses that change once a week.
- WhyNotHugo 7mo agoThe complexity comes from how the whole system is designed. There’s no single repository or curated packages as is typical in any distribution: instead actions pull other actions, and they’re basically very complex wrapper around scripts which downloads binaries from all over the place. For lots of very simple actions, instead of installing a distribution package and running a single command, a whole “action” is used which creates and entire layer of abstraction over that command. It’s all massive complexity on top of huge abstractions, none of which were designed with security in mind: it was just gradually bolted on top over the years.
- s_ting765 7mo agoPinning github actions by commit SHA does not solve the supply chain problem if the pinned action itself is pulling in other dependencies which themselves could be compromised. An action can pull in a docker image as a dependency for example. It is effectively security theatre. The real fix is owning the code that runs in your CI pipelines. Or fork the action itself and maintain it as part of your infrastructure.
- codethief 7mo agoShouldn't you always read & double-check the 3rd-party GitHub actions you use, anyway? (Forking or copying their code alone doesn't solve the issue you mention any more than pinning a SHA does.)
- s_ting765 7mo agoDouble checking Github actions does not mitigate threats from supply chain vulnerabilities. Forking an action moves the trust from a random developer to yourself. You still have to make sure the action is pulling in dependencies from trusted sources which can also be yourself depending on how far you want to go.
- zanie 7mo agoWe do address this in the article! It's defense in depth, not theater. We audit all of our actions, check if they pull in mutable dependencies, contribute upstream fixes, and migrate off using any action when we can. (I work at Astral)
- pojzon 7mo agoDo you fork them and have a team maintaining forks ? If not you cant be sure of anything. Its just a security theater.
- MeetingsBrowser 7mo ago> It is effectively security theatre. I disagree. Security is always a trade-off. Owning, auditing, and maintaining your entire supply chain stack is more secure than pinning hashes, but it is not practical for most projects. Pinning your hashes is more secure than not pinning, and is close to free. At the end of the day, the line of trust is drawn somewhere (do you audit the actions provided by GitHub?). It is not possible to write and release software without trusting some third party at some stage. The important part is recognizing where your "points of trust" are, and making a conscious decision about what is worth doing yourself.
- anentropic 7mo agoSuper useful info... but I feel so tired after reading it
- jeremie_strand 7mo ago[dead]
- volume_tech 7mo ago[dead]
- philbitt 7mo ago[dead]
- tuo-lei 7mo ago[dead]
- rajptech 7mo ago[dead]
- kdeldycke 7mo agoI maintain `repomatic`, a Python CLI + reusable workflows. It bakes most of the practices from this post into a drop-in setup for Python projects (uv-based, but works for others too). The goal is to make the secure default the easy default for maintainers who just want to ship packages. Also addresses a lot of GitHub Actions own shortcomings. But thanks to the article I added a new check for the fork PR workflow approval policy. More at: https://github.com/kdeldycke/repomatic https://github.com/kdeldycke/repomatic
- a_t48 7mo agoI'm in the process of standing up a new container registry, going to be studying this closely.
- gurkiu 7mo ago[dead]