feat: bind Cloud Hypervisor artifacts to attested release manifests - #7891
Conversation
Verify release-pinned GitHub provenance before trusting microVM artifact hashes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
| Metric | Base | PR | Delta |
|---|---|---|---|
| Lines | 93.86% | 93.77% | 📉 -0.09% |
| Statements | 92.67% | 92.58% | 📉 -0.09% |
| Functions | 93.24% | 93.21% | 📉 -0.03% |
| Branches | 86.14% | 86.02% | 📉 -0.12% |
📁 Per-file Coverage Changes (4 files)
| File | Lines (Before → After) | Statements (Before → After) |
|---|---|---|
src/cloud-hypervisor/runtime-validation.ts |
100.0% → 95.8% (-4.17%) | 100.0% → 95.8% (-4.17%) |
src/cloud-hypervisor/preflight.ts |
96.2% → 94.4% (-1.76%) | 95.7% → 93.5% (-2.20%) |
src/cloud-hypervisor-runtime-backend.ts |
96.3% → 96.3% (+0.01%) | 93.5% → 93.5% (+0.02%) |
src/log-directory-setup.ts |
96.2% → 100.0% (+3.78%) | 96.3% → 100.0% (+3.71%) |
✨ New Files (1 files)
src/cloud-hypervisor/artifact-manifest.ts: 79.4% lines
Coverage comparison generated by scripts/ci/compare-coverage.ts
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
User-owned manifests and artifacts can be replaced between verification and consumption, enabling provenance-bypassing TOCTOU races.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review tier: Balanced
Findings: 2
New issues introduced by this change (2)
| Severity | Finding |
|---|---|
src/cloud-hypervisor/preflight.ts — Reopening the manifest by path after gh exits creates a TOCTOU bypass. assertTrustedRegularFile… |
|
src/cloud-hypervisor-runtime-backend.ts — This propagates verified digests but keeps all original caller-controlled paths. Preflight permits… |
What changed in this PR
Adds Sigstore-attested release manifests as the trust root for Cloud Hypervisor preview artifacts.
Changes:
- Adds manifest configuration, validation, parsing, and digest propagation.
- Retains legacy hashes behind a dual development opt-in.
- Builds, attests, publishes, tests, and documents release manifests.
| File | Description |
|---|---|
src/types/runtime-options.ts |
Extends runtime artifact options. |
src/config-mapper.ts |
Maps manifest configuration to CLI options. |
src/config-file.ts |
Adds manifest configuration fields. |
src/commands/build-config.ts |
Builds manifest-aware runtime configuration. |
src/cloud-hypervisor/runtime-validation.ts |
Enforces release or development trust modes. |
src/cloud-hypervisor/runtime-validation.test.ts |
Tests trust-mode validation. |
src/cloud-hypervisor/preflight.ts |
Verifies attestations and artifact digests. |
src/cloud-hypervisor/preflight.test.ts |
Tests attestation preflight behavior. |
src/cloud-hypervisor/config.test.ts |
Tests configuration mapping. |
src/cloud-hypervisor/artifact-manifest.ts |
Defines and validates manifests. |
src/cloud-hypervisor/artifact-manifest.test.ts |
Tests manifest validation. |
src/cloud-hypervisor-runtime-backend.ts |
Propagates verified digests to the manager. |
src/cloud-hypervisor-runtime-backend.test.ts |
Tests digest propagation. |
src/cli-options.ts |
Adds manifest and bypass flags. |
src/awf-config-schema.json |
Extends the generated schema. |
scripts/ci/cloud-hypervisor-live-smoke.sh |
Enables the CI development bypass. |
scripts/ci/cloud-hypervisor-ci-scripts.test.ts |
Tests manifest CI integration. |
README.md |
Updates the preview feature summary. |
guest/cloud-hypervisor/verify-test-artifacts.sh |
Verifies generated manifest entries. |
guest/cloud-hypervisor/build-test-artifacts.sh |
Generates the release manifest. |
docs/cloud-hypervisor-foundation.md |
Documents trust and migration behavior. |
docs/awf-config.schema.json |
Updates the public configuration schema. |
docs/awf-config-spec.md |
Documents manifest configuration. |
.github/workflows/release.yml |
Attests and publishes the manifest bundle. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…-manifest # Conflicts: # src/cloud-hypervisor/runtime-validation.test.ts
|
✅ Copilot review passed with no inline comments. @lpcox Add the |
Prevent manifest and runtime artifact replacement between provenance verification and consumption. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 38ffbe47-fa3c-4a37-b677-dec7d83ecc50
|
| Metric | Base | PR | Delta |
|---|---|---|---|
| Lines | 93.82% | 93.72% | 📉 -0.10% |
| Statements | 92.60% | 92.51% | 📉 -0.09% |
| Functions | 93.23% | 93.20% | 📉 -0.03% |
| Branches | 85.97% | 85.86% | 📉 -0.11% |
📁 Per-file Coverage Changes (4 files)
| File | Lines (Before → After) | Statements (Before → After) |
|---|---|---|
src/cloud-hypervisor/runtime-validation.ts |
100.0% → 96.1% (-3.93%) | 100.0% → 96.1% (-3.93%) |
src/cloud-hypervisor/preflight.ts |
96.2% → 94.4% (-1.76%) | 95.7% → 93.5% (-2.20%) |
src/cloud-hypervisor-runtime-backend.ts |
96.3% → 96.3% (+0.01%) | 93.5% → 93.5% (+0.02%) |
src/log-directory-setup.ts |
96.2% → 100.0% (+3.78%) | 96.3% → 100.0% (+3.71%) |
✨ New Files (1 files)
src/cloud-hypervisor/artifact-manifest.ts: 79.4% lines
Coverage comparison generated by scripts/ci/compare-coverage.ts
|
❌ Smoke Copilot BYOK reports failed. BYOK mode investigation needed...
|
|
✅ Build Test Suite completed successfully!
|
|
📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤
|
|
✅ Smoke Copilot BYOK AOAI (api-key) completed. Copilot AOAI BYOK (api-key) mode operational. 🔓
|
|
❌ Smoke Claude failed
|
|
Chroot tests passed! Smoke Chroot - All security and functionality tests succeeded.
|
|
❌ Smoke Gemini reports failed. Facets need polishing...
|
|
📡 Smoke OTel Tracing completed. All tracing scenarios validated. ✅
|
|
✅ Contribution Check completed successfully! Contribution review complete: PR #7891 appears to follow CONTRIBUTING.md. The change includes tests for the new manifest/attestation flow, updates relevant documentation and schema/help text, and places new code/configuration in the expected directories.
|
|
✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟 Warning Firewall blocked 2 domainsThe following domains were blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "msfeed25.pkgs.visualstudio.com"
- "registry.npmjs.org"See Network Configuration for more information.
|
|
✅ Smoke Copilot BYOK AOAI (Entra) completed. Copilot AOAI BYOK (Entra) mode operational. 🔓
|
|
📰 DEVELOPING STORY: Smoke Docker Sbx reports failed. Our correspondents are investigating the incident...
|
|
🚀 Security Guard has started processing this pull request |
|
🔌 Smoke Services — All services reachable! ✅
|
|
🛡️ Smoke Copilot Network Isolation confirmed the egress allowlist is enforced. ✅ Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "example.com"See Network Configuration for more information.
|
|
EGRESS_RESULT allow=pass deny=pass ✅ Allowed domain (github.com) reachable: Overall status: PASS cc @lpcox Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "example.com"See Network Configuration for more information.
|
|
fix: filter workflow commands from microVM output
|
|
Smoke Test Results:
Overall: FAIL —
|
|
|
Smoke Test: Copilot Engine
Overall: PASS cc @lpcox
|
🏗️ Build Test Suite Results
Overall: 8/8 ecosystems passed — ✅ PASS All 18 test projects across Bun, C++, Deno, .NET, Go, Java, Node.js, and Rust built/installed and passed their tests successfully. All repositories cloned without issue. Notes:
|
|
Smoke Test: API Proxy OTEL Tracing — all scenarios pass
No errors or unexpected failures found. Graceful degradation confirmed (module loads and functions without throwing when OTEL is unconfigured).
|
Chroot Version Comparison Results
Overall: FAILED — Node.js version differs between host and chroot environments.
|
Warning Firewall blocked 2 domainsThe following domains were blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "msfeed25.pkgs.visualstudio.com"
- "registry.npmjs.org"See Network Configuration for more information.
|

Summary
github/gh-aw-firewalland the exact release workflow before parsing the manifest or trusting any contained hashThreat model
This closes the substitution gap where a caller could provide a malicious artifact together with its matching SHA-256 value. Trust now starts at GitHub OIDC/Sigstore provenance for the protected release workflow. Preflight fails closed on an invalid signer, self-hosted signer, malformed or stale manifest, renamed artifact, unsafe ownership/permissions, or digest mismatch.
The boundary still trusts host root, the locally resolved root-owned
ghexecutable, GitHub's attestation/Sigstore trust chain, and the protected release workflow itself. The local bundle avoids GitHub API lookup;ghmay need network access to initialize or refresh Sigstore trust-root material unless it is already cached or provisioned.Migration
Release users replace the five
--cloud-hypervisor-*-sha256trust arguments with:The tag must match the AWF binary version. Same-run development CI can use
--cloud-hypervisor-development-allow-unattested-artifactsonly together withAWF_CLOUD_HYPERVISOR_DEVELOPMENT_ALLOW_UNATTESTED_ARTIFACTS=1and all five legacy digests.Validation
npm test -- --runInBand(330 suites, 5,283 tests)npm run type-check -- --pretty falsenpm run buildgit diff --check