From 3a86f77ee6ad25cd161a6eb0dbc24ff2fde32736 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Thu, 12 Nov 2026 05:56:37 -0800 Subject: [PATCH 1/2] chore(release): prepare 0.6.4 versions and changelog Signed-off-by: Kevin Wang --- CHANGELOG.md | 27 ++++- dstack/Cargo.lock | 114 +++++++++--------- dstack/Cargo.toml | 2 +- os/mkosi/mkosi.conf | 2 +- os/mkosi/versions.env | 2 +- .../meta-dstack/conf/distro/dstack.conf | 2 +- 6 files changed, 83 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ae84ca37..71f7cb721 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.6.4] - 2026-11-12 ### Upgrade notes @@ -18,6 +18,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 app epoch. The KMS reads it for `GetAppEnvEncryptPubKey` and `GetSealedEnvPubKey`. `auth-eth` and `dstack-auth` serve it; custom webhook backends must add it. +- **Upgrade KMS before guests.** 0.6.4 guests mint self-issued RA-TLS client + certificates for KMS calls and need a 0.6.4 KMS that accepts them. +- **KMS needs a key handover path to start:** configure the admin listener + with TLS and an admin token, or set `core.onboard.public_key_handover = true` + (see Changed). + +### Security + +- ra-rpc: verify that an attested server proves possession of its TLS private + key. The client previously skipped TLS handshake signatures, so a copied + certificate could pass the later attestation check. `tls_no_check` is + renamed to `tls_skip_ca_verification` (#1522). ### Added @@ -40,6 +52,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 when absent, neither is checked. `GET /` reports the configured `chainId` and `appImplementation`, and each decision is logged with the device ID, measurements and TCB status. +- guest: `key_provider: sev-snp` derives a hardware-bound seed inside an AMD + SEV-SNP guest, so a KMS CVM on an AMD host can recover its disk and stored + root keys after restart without SGX (#1526). ### Changed @@ -106,7 +121,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 operations stay limited to the current epoch. - KMS: retain `GetTempCaCert`, temporary CA files and legacy handover fields so KMS nodes can be upgraded before existing OS images. - - dstack-util, cert-client: guests mint self-issued RA-TLS client certificates for KMS calls instead of fetching the temp CA and minting from it; the KMS authenticates the quote inside the certificate, not its issuer. @@ -116,15 +130,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 The new flow requires an attested KMS that accepts self-issued certificates. - dstack-types: `KeyProvider::Kms` drops `tmp_ca_key` and `tmp_ca_cert`, so `.appkeys.json` no longer carries them. Files written by older images still - parse, but out-of-tree readers that require those fields fail on new files - + parse, but out-of-tree readers that require those fields fail on new files. - KMS: `auth-eth-bun` is renamed to `auth-eth`. The Bun webhook server moves from `dstack/kms/auth-eth-bun` into `dstack/kms/auth-eth`, next to the contracts. New releases are tagged `kms-auth-eth-v*` and published as `ghcr.io/dstack-tee/dstack-kms-auth-eth`; images already published as `ghcr.io/dstack-tee/dstack-kms-auth-eth-bun` remain available. Update image references and source paths in deployments. - - **Breaking:** DstackKms: reverts with custom errors such as `UnknownRootEpoch()` instead of revert strings, to stay under the EIP-170 size limit. This includes `registerApp`, `setAppImplementation` and @@ -175,6 +187,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 attestation on the connection that returns the root keys and checks local policy before using them. Legacy sources requiring temp-CA-issued clients must be upgraded. +- vmm: write `.instance_info` atomically, so a failed write or power loss can no + longer drop the instance ID seed and lose the VM's disk key (#1553). +- KMS, Gateway, Verifier, auth-eth images: set explicit file modes and + normalize timestamps so image digests no longer depend on the clone-time + umask (#1512). ## [0.6.3] - 2026-11-01 diff --git a/dstack/Cargo.lock b/dstack/Cargo.lock index 2c7a9270a..cd034843d 100644 --- a/dstack/Cargo.lock +++ b/dstack/Cargo.lock @@ -820,7 +820,7 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cached-cell" -version = "0.6.3" +version = "0.6.4" dependencies = [ "tokio", ] @@ -839,7 +839,7 @@ dependencies = [ [[package]] name = "cc-eventlog" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "digest 0.10.7", @@ -859,7 +859,7 @@ dependencies = [ [[package]] name = "cert-client" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "dstack-guest-agent-rpc", @@ -881,7 +881,7 @@ dependencies = [ [[package]] name = "certbot" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "bon", @@ -909,7 +909,7 @@ dependencies = [ [[package]] name = "certbot-cli" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "certbot", @@ -1371,7 +1371,7 @@ dependencies = [ [[package]] name = "ct_monitor" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "clap", @@ -1903,7 +1903,7 @@ dependencies = [ [[package]] name = "dstack-api-auth" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "base64 0.22.1", @@ -1918,7 +1918,7 @@ dependencies = [ [[package]] name = "dstack-attest" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "aws-nitro-enclaves-nsm-api", @@ -1967,7 +1967,7 @@ dependencies = [ [[package]] name = "dstack-auth" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "clap", @@ -1981,14 +1981,14 @@ dependencies = [ [[package]] name = "dstack-build-info" -version = "0.6.3" +version = "0.6.4" dependencies = [ "git-version", ] [[package]] name = "dstack-cli" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "clap", @@ -2005,7 +2005,7 @@ dependencies = [ [[package]] name = "dstack-cli-core" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "dstack-types", @@ -2019,7 +2019,7 @@ dependencies = [ [[package]] name = "dstack-gateway" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "arc-swap", @@ -2088,7 +2088,7 @@ dependencies = [ [[package]] name = "dstack-gateway-rpc" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "parity-scale-codec", @@ -2101,7 +2101,7 @@ dependencies = [ [[package]] name = "dstack-guest-agent" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "base64 0.22.1", @@ -2158,7 +2158,7 @@ dependencies = [ [[package]] name = "dstack-guest-agent-rpc" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "hex", @@ -2174,7 +2174,7 @@ dependencies = [ [[package]] name = "dstack-guest-agent-simulator" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "cc-eventlog", @@ -2196,7 +2196,7 @@ dependencies = [ [[package]] name = "dstack-kms" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "cc-eventlog", @@ -2243,7 +2243,7 @@ dependencies = [ [[package]] name = "dstack-kms-rpc" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "fs-err", @@ -2257,7 +2257,7 @@ dependencies = [ [[package]] name = "dstack-mr" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "binrw", @@ -2297,7 +2297,7 @@ dependencies = [ [[package]] name = "dstack-netd-rpc" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "prost 0.13.5", @@ -2309,7 +2309,7 @@ dependencies = [ [[package]] name = "dstack-nvidia-attest-proxy" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "base64 0.22.1", @@ -2337,7 +2337,7 @@ dependencies = [ [[package]] name = "dstack-tee-simulator" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "aws-nitro-enclaves-nsm-api", @@ -2374,7 +2374,7 @@ dependencies = [ [[package]] name = "dstack-types" -version = "0.6.3" +version = "0.6.4" dependencies = [ "ciborium", "hex", @@ -2392,7 +2392,7 @@ dependencies = [ [[package]] name = "dstack-util" -version = "0.6.3" +version = "0.6.4" dependencies = [ "aes-gcm 0.10.3", "anyhow", @@ -2460,7 +2460,7 @@ dependencies = [ [[package]] name = "dstack-verifier" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "cc-eventlog", @@ -2497,7 +2497,7 @@ dependencies = [ [[package]] name = "dstack-vmm" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "base64 0.22.1", @@ -2564,7 +2564,7 @@ dependencies = [ [[package]] name = "dstack-vmm-rpc" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "parity-scale-codec", @@ -2577,7 +2577,7 @@ dependencies = [ [[package]] name = "dstack-volume" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "binrw", @@ -2598,7 +2598,7 @@ dependencies = [ [[package]] name = "dstackup" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "clap", @@ -3343,7 +3343,7 @@ dependencies = [ [[package]] name = "guest-api" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "http-client", @@ -3612,7 +3612,7 @@ dependencies = [ [[package]] name = "host-api" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "http-client", @@ -3677,7 +3677,7 @@ dependencies = [ [[package]] name = "http-client" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "http-body-util", @@ -4097,7 +4097,7 @@ checksum = "d8972d5be69940353d5347a1344cb375d9b457d6809b428b05bb1ca2fb9ce007" [[package]] name = "iohash" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "blake2", @@ -4332,7 +4332,7 @@ dependencies = [ [[package]] name = "key-provider-client" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "dstack-types", @@ -4478,7 +4478,7 @@ checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "load_config" -version = "0.6.3" +version = "0.6.4" dependencies = [ "figment", "rocket", @@ -4488,7 +4488,7 @@ dependencies = [ [[package]] name = "local-key-provider" -version = "0.6.3" +version = "0.6.4" dependencies = [ "blake2", "dcap-qvl", @@ -4550,7 +4550,7 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "lspci" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "insta", @@ -4676,7 +4676,7 @@ dependencies = [ [[package]] name = "mock-attestation" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "axum", @@ -4904,7 +4904,7 @@ dependencies = [ [[package]] name = "nsm-attest" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "aws-nitro-enclaves-nsm-api", @@ -4916,7 +4916,7 @@ dependencies = [ [[package]] name = "nsm-qvl" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "ciborium", @@ -5089,7 +5089,7 @@ dependencies = [ [[package]] name = "nvattest" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "serde", @@ -5582,7 +5582,7 @@ checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "pki-fetch" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "pem 3.0.6", @@ -6044,7 +6044,7 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "ra-rpc" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "bon", @@ -6067,7 +6067,7 @@ dependencies = [ [[package]] name = "ra-tls" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "bon", @@ -6573,7 +6573,7 @@ dependencies = [ [[package]] name = "rocket-vsock-listener" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "derive_more 2.1.1", @@ -7136,7 +7136,7 @@ dependencies = [ [[package]] name = "serde-duration" -version = "0.6.3" +version = "0.6.4" dependencies = [ "serde", "serde_json", @@ -7358,7 +7358,7 @@ dependencies = [ [[package]] name = "sev-snp-attest" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "fs-err", @@ -7371,7 +7371,7 @@ dependencies = [ [[package]] name = "sev-snp-qvl" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "hex", @@ -7547,7 +7547,7 @@ checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "size-parser" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "serde", @@ -7726,7 +7726,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "supervisor" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "bon", @@ -7749,7 +7749,7 @@ dependencies = [ [[package]] name = "supervisor-client" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "clap", @@ -7902,7 +7902,7 @@ dependencies = [ [[package]] name = "tdx-attest" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "cc-eventlog", @@ -8286,7 +8286,7 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tpm-attest" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "dstack-types", @@ -8305,7 +8305,7 @@ dependencies = [ [[package]] name = "tpm-qvl" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "base64 0.22.1", @@ -8328,7 +8328,7 @@ dependencies = [ [[package]] name = "tpm-types" -version = "0.6.3" +version = "0.6.4" dependencies = [ "cc-eventlog", "dstack-types", @@ -8339,7 +8339,7 @@ dependencies = [ [[package]] name = "tpm2" -version = "0.6.3" +version = "0.6.4" dependencies = [ "anyhow", "hex", diff --git a/dstack/Cargo.toml b/dstack/Cargo.toml index cad831b12..10559f2e2 100644 --- a/dstack/Cargo.toml +++ b/dstack/Cargo.toml @@ -5,7 +5,7 @@ # SPDX-License-Identifier: Apache-2.0 [workspace.package] -version = "0.6.3" +version = "0.6.4" authors = ["Kevin Wang ", "Leechael "] edition = "2021" license = "MIT" diff --git a/os/mkosi/mkosi.conf b/os/mkosi/mkosi.conf index fa5e8f81b..487ab9141 100644 --- a/os/mkosi/mkosi.conf +++ b/os/mkosi/mkosi.conf @@ -22,7 +22,7 @@ Format=tar # order, so declaring Output first silently yields "--rootfs.tar". # ImageVersion is checked against DSTACK_VERSION by tests/acceptance.sh. ImageId=dstack -ImageVersion=0.6.3 +ImageVersion=0.6.4 Output=%i-%v-rootfs CompressOutput=no # Must stay empty. The default is [uki, kernel, initrd], and the kernel split diff --git a/os/mkosi/versions.env b/os/mkosi/versions.env index 404b2067e..a3e56f355 100644 --- a/os/mkosi/versions.env +++ b/os/mkosi/versions.env @@ -20,7 +20,7 @@ RUST_STD_TOOLCHAIN_SHA256=5f106805ed86ebf8df287039e53a45cf974391ef4d088c2760776b GO_TOOLCHAIN_VERSION=1.26.10 GO_TOOLCHAIN_SHA256=ccfe7ae822d2c2f41f4fe7c956199967a4dac22d0ee0d2b2bfdb440aab3b20c5 NITRO_TPM_TOOLS_REVISION=d76d6eeebd4169b00a3c3af9858852d48f40e748 -DSTACK_VERSION=0.6.3 +DSTACK_VERSION=0.6.4 DSTACK_CODENAME=trixie OVMF_VARIANT=pre202505 # Must match SRCREV in meta-dstack's dstack-ovmf_git.bb: a generic OVMF diff --git a/os/yocto/layers/meta-dstack/conf/distro/dstack.conf b/os/yocto/layers/meta-dstack/conf/distro/dstack.conf index dad250ab7..ea3da14c9 100644 --- a/os/yocto/layers/meta-dstack/conf/distro/dstack.conf +++ b/os/yocto/layers/meta-dstack/conf/distro/dstack.conf @@ -7,7 +7,7 @@ DISTRO = "dstack" DISTRO_NAME = "dstack" DISTRO_FEATURES:append = " virtualization seccomp systemd usrmerge security dm-verity ipv6" -DISTRO_VERSION = "0.6.3" +DISTRO_VERSION = "0.6.4" DISTROOVERRIDES = "poky:dstack" INITRAMFS_IMAGE = "" From 46a834f24e685af66d30a5f36a566399439e266a Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Thu, 12 Nov 2026 06:01:03 -0800 Subject: [PATCH 2/2] chore(release): list #1522 under Fixed Signed-off-by: Kevin Wang --- CHANGELOG.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71f7cb721..5509616a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,13 +24,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 with TLS and an admin token, or set `core.onboard.public_key_handover = true` (see Changed). -### Security - -- ra-rpc: verify that an attested server proves possession of its TLS private - key. The client previously skipped TLS handshake signatures, so a copied - certificate could pass the later attestation check. `tls_no_check` is - renamed to `tls_skip_ca_verification` (#1522). - ### Added - DstackKms, DstackApp: TEE platform allowlists. `AuthorizationRequest` of @@ -187,6 +180,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 attestation on the connection that returns the root keys and checks local policy before using them. Legacy sources requiring temp-CA-issued clients must be upgraded. +- ra-rpc: check the TLS handshake signature when CA verification is skipped; + `tls_no_check` is renamed to `tls_skip_ca_verification` (#1522). - vmm: write `.instance_info` atomically, so a failed write or power loss can no longer drop the instance ID seed and lose the VM's disk key (#1553). - KMS, Gateway, Verifier, auth-eth images: set explicit file modes and