Open Source Security at Astral
Open Source Security at Astral
Author: Astral (makers of Ruff, uv, ty) Date: 2026 (approximate) Source: https://astral.sh/blog/open-source-security-at-astral
CI/CD Security
GitHub Actions has poor security defaults. Compromises affecting Ultralytics, tj-actions, and Nx exploited well-known weaknesses like pwn requests.
Key Protections
- Forbid
pull_request_targetandworkflow_runtriggers organization-wide - Pin all actions to specific commit hashes, not mutable tags
- Use zizmor (static analysis) and pinact (automatic pinning)
- Start workflows with
permissions: {}, broaden job-by-job - Use deployment environments and environment-specific secrets instead of org/repo-level secrets
Hash-pinning alone isn't sufficient โ it ensures action immutability but not that the immutable code avoids mutable operations like downloading latest binary versions. Work with upstreams to embed cryptographic hashes for downloads.
Repository and Organizational Security
- Limited admin accounts; most members read/write only
- Strong 2FA (TOTP or stronger), plan to enforce WebAuthn
- Org-wide branch protection: no force-push to main, require PRs
- Forbidden branch patterns (advisory-, internal-) prevent premature security disclosure
- Release tags immutable once created, can't be created until release deployments succeed
- All protections at org level โ repo admins can't disable
GitHub Apps over Dangerous Triggers
astral-sh-bot (GitHub App) replaces pull_request_target for tasks like commenting on external PRs. Apps receive webhook data with more control and less implicit state. Still vulnerable to SQLi, prompt injection โ treat development with rigor.
Apps don't make it safe to run untrusted code; they make unexpected execution harder.
Release Security
- Trusted Publishing (OIDC) for PyPI, crates.io, NPM โ eliminates long-lived registry credentials
- Sigstore attestations on binaries and Docker images
- Immutable releases (GitHub feature) โ prevents post-release modification (Trivy attack vector)
- No build caching during releases (cache poisoning prevention)
- Dedicated deployment environments for release processes
- Multi-person approval for release environment activation
- Standalone installer checksums (uv)
- Future: codesigning with developer certificates on macOS/Windows
Dependency Security
- Dependabot + Renovate for automated updates
- Dependency cooldowns: delay updates after new releases (compromised versions most dangerous right after release)
- Social connections with upstream maintainers, contribute security fixes
- Relationships with Python Packaging Authority and Python Security Response Team
- Conservative dependency addition, eliminate where practical
- Avoid binary blob dependencies
- OSS Fund for financial support of upstream projects