Summary
I would like to contribute a security-hardening PR that makes Chainweb binary releases independently verifiable from source commit to published artifact.
Current trust gap
The build workflow uploads a compiled archive to S3. The release workflow later downloads and extracts that archive, but currently does not verify a trusted provenance attestation before extraction.
The release workflow also permits release_sha to differ from the workflow's own github.sha. Simply adding an attestation to the final repackaged archive could therefore identify the packaging workflow commit rather than the source commit that built the binary.
This is not a claim that the current releases have been compromised. The objective is to provide cryptographic source-to-binary verification for miners, exchanges and node operators.
Proposed first PR
Scope the first PR to the Ubuntu binary release path in chainweb-node:
- Build the distributable archive from an exact full source commit.
- Generate GitHub/Sigstore build provenance using
actions/attest.
- Verify repository, workflow, source commit and trusted ref before the archive is extracted or released.
- Publish
SHA256SUMS with the release.
- Pin release-critical GitHub Actions and reusable workflows to full commit SHAs.
- Validate release inputs and avoid direct workflow-input interpolation in shell commands.
- Ensure fork and pull-request builds cannot publish packages or access release credentials.
- Document the operator verification command.
Suggested release design
The strongest design would build, package, attest and publish the same bytes from a protected version tag.
A smaller alternative would retain the manual release workflow but require:
release_sha == github.sha;
- verification of the attested build archive before extraction;
- deterministic repackaging;
- a second attestation for the final release archive.
Out of scope for the first PR
- DockerHub release changes
- SBOM generation
- Reproducible GHC compilation
- Consensus or protocol changes
These can be separate follow-up PRs.
Questions for maintainers
- Would you prefer a protected-tag build-and-release workflow or a hardened version of the current manual workflow?
- Is it acceptable to remove arbitrary
release_sha, or require it to equal github.sha?
- Should the release publish the exact attested build archive without repackaging?
I can submit the implementation as a draft PR after confirming the preferred approach.
Summary
I would like to contribute a security-hardening PR that makes Chainweb binary releases independently verifiable from source commit to published artifact.
Current trust gap
The build workflow uploads a compiled archive to S3. The release workflow later downloads and extracts that archive, but currently does not verify a trusted provenance attestation before extraction.
The release workflow also permits
release_shato differ from the workflow's owngithub.sha. Simply adding an attestation to the final repackaged archive could therefore identify the packaging workflow commit rather than the source commit that built the binary.This is not a claim that the current releases have been compromised. The objective is to provide cryptographic source-to-binary verification for miners, exchanges and node operators.
Proposed first PR
Scope the first PR to the Ubuntu binary release path in
chainweb-node:actions/attest.SHA256SUMSwith the release.Suggested release design
The strongest design would build, package, attest and publish the same bytes from a protected version tag.
A smaller alternative would retain the manual release workflow but require:
release_sha == github.sha;Out of scope for the first PR
These can be separate follow-up PRs.
Questions for maintainers
release_sha, or require it to equalgithub.sha?I can submit the implementation as a draft PR after confirming the preferred approach.