Attestree
Attested winget for Windows fleets — signed provenance at ingest
Private Repository
Problem
Most Windows shops install packages straight from the public source and discover problems only after a scanner runs against an endpoint days later. By then the artifact is already running across the fleet, SBOMs are an afterthought, attestations are missing, and the supply-chain story is "we trust Microsoft's CDN." Tanium, Defender for Cloud, Snyk, and their peers scan deployed binaries after the fact. Nobody inspects the catalog and distribution layer before deploy.
Approach
Attestree inverts the order: winget install, but with a receipt. Every package is attested at ingest, not after install. The installer's signature and publisher continuity are checked, the package is detonated in a sandbox, a CycloneDX SBOM is generated from what the install actually did, and policy-as-code decides. Admitted artifacts carry a signed in-toto statement with SLSA v1 provenance that an auditor verifies with a public key. Endpoints are then fenced to the operator's own attested winget feed and receive packages through groups and rings, with the agent re-verifying the exact approved hash at install.
Architecture
The system has two surfaces. A control plane with an endpoint agent runs the ingest gate, attestation, and deployment. The public front door is the marketing site plus an open-core community edition.
Ingest Gate
Each package passes through fetch, installer-signature and publisher-certificate checks, sandboxed detonation, an observed CycloneDX 1.6 SBOM, and a policy-as-code decision. The result is signed as an in-toto statement (ECDSA P-256). winget is live, and Chocolatey is managed under the same control plane. MSI/MST transforms, driver rings, and further package managers are on the roadmap.
Fenced Feed, Groups × Rings
Endpoints install from the operator's own spec-compliant winget REST source, pinned to the
approved SHA-256; a normal winget install never reaches the public repository.
PC Groups decide what a device runs; rings (canary → pilot → broad → all) decide
which version. Rollback goes to any prior version. A failing rollout produces a
rollback proposal for the operator to confirm rather than acting on its own.
Unattended Updates with a Halt Queue
An opt-in pipeline ingests, detonates, and promotes new winget versions ring by ring. It halts for review when a publisher's signing certificate changes or an installer arrives unsigned, which is exactly the signal a hijacked release produces.
Control Plane Stack
- .NET: Native AOT installer shim and a self-updating endpoint agent rolled out through the same rings
- Docker + PostgreSQL: server image with a Postgres sidecar; per-tenant scope as a first-class invariant
- Open formats: in-toto, SLSA v1, CycloneDX 1.6 (Syft), with Sigstore supported but not required
- Fleet CVE index: self-hosted, matching observed inventory against cvelistV5 and CISA KEV, with an offline bundle for air-gapped hosts
Key Technical Decisions
Attest at ingest, not scan after install
The structural wedge: Attestree owns the catalog/distribution layer and verifies before
deploy. Without pre-deploy attestation, "we inventory it" is just a fancier
winget list.
An observed SBOM, not a declared one
The SBOM is generated from what the installer actually did in the sandbox, not taken from the publisher's manifest. An ingest-time SBOM is an observation, and that is what makes it worth signing.
Three enforcement points
For a Windows fleet the endpoint is the load-bearing enforcement point, so policy is not a single pipeline check. The ingest gate blocks before the catalog, reconciliation catches drift against declared state, and the agent re-verifies signature, hash, and policy at install.
Humans confirm the destructive step
Automation proposes and people approve. Rollback proposals are confirm-gated and off by default, and the update pipeline halts into a review queue instead of guessing when a publisher's signing identity changes.
Open-core with an enforced license boundary
The installer shim and its IPC contract are Apache-2.0; the platform is closed-source. The license boundary is enforced mechanically in the build, so closed-source code cannot be relicensed by accident. The free community edition runs self-hosted on Docker Compose with no cloud dependency, ships as Sigstore-cosign signed images, and includes roles, TOTP two-factor, and operational runbooks.
Public Site
The marketing site at attestree.com is a separate, fully public surface: a static Astro
build with Tailwind + MDX, deployed to Cloudflare Pages with a preview deploy per PR. The
waitlist runs as a same-origin Cloudflare Pages Function backed by D1 in an EU jurisdiction
with hardened Turnstile verification. Site copy is re-synced against every platform
release, with an explicit shipped-vs-roadmap split, and unbacked claims are removed rather
than hedged. The build-security baseline covers SHA-pinned actions, least-privilege tokens,
a committed lockfile, Dependabot, an npm audit CI gate, and
security.txt.