diff --git a/README.md b/README.md index 61695aba2c..7d63f4b2ab 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ upstream history, authorship, licenses, and notices. ## Current release -Server `v1.6.519` packages Web Console `1.6.181` -and Orchestration Engine `v0.183.335`. API Keys support full, custom and closed +Server `v1.6.520` packages Web Console `1.6.181` +and Orchestration Engine `v0.183.336`. API Keys support full, custom and closed policies, optional expiry, and key-scoped durable audit records. Their permissions remain bounded by the owner's current role and environment access. Delegated terminal/log access requires the verified Host API audit capability and the @@ -35,7 +35,7 @@ Audit export closes its own menu before locking the request, allowing consecutiv JSON, CSV and XLSX downloads without leaving a disabled menu open. Key scope choices use the viewer's authorized environment list. Environment, stack and resource selectors close before dependent loading or verification. -See the [release note](docs/releases/server-1.6.519.md) for exact +See the [release note](docs/releases/server-1.6.520.md) for exact component identities and verification boundaries. A version or packaged feature does not establish that every resource/role/hardware combination has been tested. @@ -49,7 +49,9 @@ is always the Key owner's current account/environment RBAC; a Key never grants an additional role. Existing legacy Keys are not automatically narrowed on upgrade. New Key secrets are shown once at creation and are not returned by later lists or details. Per-Key audit separates authorization, the HTTP response and any later -job/stream completion. Environment-Key audit rechecks live Engine access in +job/stream completion. A successful WebSocket upgrade is recorded as a successful +HTTP `101` handshake, not as proof of the stream's later completion. +Environment-Key audit rechecks live Engine access in Engine-verified project contexts; a caller-supplied project header is not a grant. Open a Key's audit from its action menu; the close control follows the audit filters, results and details, below the audit block. @@ -68,7 +70,7 @@ docker run -d --name pasturestack-server --restart unless-stopped -p 8080:8080 \ -v pasturestack-cattle:/var/lib/cattle \ -v pasturestack-mysql:/var/lib/mysql \ -v pasturestack-mysqllog:/var/log/mysql \ - ghcr.io/pasturestack/server:v1.6.519 + ghcr.io/pasturestack/server:v1.6.520 ``` For HTTPS termination at a reverse proxy, set the exact public origin: @@ -76,7 +78,7 @@ For HTTPS termination at a reverse proxy, set the exact public origin: ```yaml services: pasturestack-server: - image: ghcr.io/pasturestack/server:v1.6.519 + image: ghcr.io/pasturestack/server:v1.6.520 restart: unless-stopped ports: - "8080:8080" diff --git a/docs/releases/server-1.6.520.md b/docs/releases/server-1.6.520.md new file mode 100644 index 0000000000..f6aad7d3a0 --- /dev/null +++ b/docs/releases/server-1.6.520.md @@ -0,0 +1,33 @@ +# Server v1.6.520 + +Packages Orchestration Engine `v0.183.336` and the unchanged Web Console +`1.6.181`. This patch fixes audit classification for successful WebSocket +upgrades. An HTTP `101` response now records `SUCCEEDED` for the response phase; +it does not claim that the stream or a later operation completed successfully. +Explicit `DENY`, preview suppression, failed/cancelled operations, and ordinary +HTTP failure classifications remain intact. The change neither grants access +nor weakens revocation, expiry, MFA or the Key owner's live permissions. + +## Verification scope + +The Engine's focused audit suite covers 30 tests, including HTTP `101`, `100`, +`200`, `202`, denied requests, previews, and explicit operation outcomes. +The defect was reproduced through a real Key-authenticated subscription: the +connection opened and received server pings, then the server closed it after +the Key was revoked, while the successful handshake had been mislabelled as a +failure. Publication and deployment evidence must confirm the corrected audit +classification on the packaged image; source tests alone are not that evidence. + +This patch does not change the console, authentication service, proxy, catalog, +node packages, database schema, or deployment settings. Existing pagination and +membership-revocation evidence remains scoped to the resources and roles it +actually covered; it is not a claim of whole-matrix acceptance. + +## Upgrade and rollback + +Use `ghcr.io/pasturestack/server:v1.6.520` after its immutable release is +published. Preserve the existing environment variables, volumes, network, +restart policy and security options. No database migration is introduced. +The compatible prior release `v1.6.519` is the rollback target; rolling back +restores the known HTTP `101` audit-classification defect. Do not roll back to +a policy-unaware release: follow the [API Key recovery guidance](../upgrades/api-key-policy-rollback.md). diff --git a/server/Dockerfile.web-compose-release b/server/Dockerfile.web-compose-release index 3774e1486d..1b280bae0e 100644 --- a/server/Dockerfile.web-compose-release +++ b/server/Dockerfile.web-compose-release @@ -79,9 +79,9 @@ ARG WEBHOOK_AUTOMATION_SERVICE_VERSION=0.10.4 ARG WEBHOOK_AUTOMATION_SERVICE_ARCHIVE_SHA256=49c4579829a04e758045fae02a5a9fca12bb0ba3af0d5e979cf9eb97f23a88a9 ARG WEBHOOK_AUTOMATION_SERVICE_BINARY_SHA256=98c7faea665b7eb95206b8c73a6f47d644c5d2d0eae53f274f6a15faf5205744 ARG ORCHESTRATION_ENGINE_RELEASE_BASE_URL=https://github.com/PastureStack/orchestration-engine/releases/download -ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.335 +ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.336 ARG ORCHESTRATION_ENGINE_ARTIFACT=cattle.jar -ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=98a665f59bced8f7c084e786280100e0571390b04eeffad140e633b463d8a204 +ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=bd0dabf0bd87a859b97941657ae18e8dd551e390697494348c101782a508f136 ARG COMPOSE_EXECUTOR_RELEASE_BASE_URL=https://github.com/PastureStack/compose-cli/releases/download ARG COMPOSE_EXECUTOR_VERSION=0.14.37 ARG COMPOSE_EXECUTOR_ARCHIVE_SHA256=5ff465601930218f531885a384f231d969033e4cef794ce33d16bfe24e5c1c81 @@ -565,9 +565,9 @@ FROM ${BASE_IMAGE} ARG SOURCE_DATE_EPOCH ARG PASTURESTACK_SERVER_REVISION -ARG SERVER_RELEASE_TAG=v1.6.519 -ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.335 -ARG ORCHESTRATION_ENGINE_VERSION=0.183.335 +ARG SERVER_RELEASE_TAG=v1.6.520 +ARG ORCHESTRATION_ENGINE_RELEASE_TAG=v0.183.336 +ARG ORCHESTRATION_ENGINE_VERSION=0.183.336 ARG ENGINE_READONLY_SCHEMA_SHA256=7f274219e8dd9c6d750a408a6edec1448b564f4b16ba2204c425c5b45cec2233 ARG ENGINE_RESTRICTED_SCHEMA_SHA256=f854ba99260f29e324ab7446a8592996946038920ac9bcf17689d98d1ebc5e51 ARG HOST_API_VERSION=0.38.5 @@ -606,8 +606,8 @@ ARG WEBHOOK_AUTOMATION_SERVICE_VERSION=0.10.4 ARG WEBHOOK_AUTOMATION_SERVICE_COMMIT=400118b893843d2a7d7c65cc70c3449d76c4a8d8 ARG WEBHOOK_AUTOMATION_SERVICE_ARCHIVE_SHA256=49c4579829a04e758045fae02a5a9fca12bb0ba3af0d5e979cf9eb97f23a88a9 ARG WEBHOOK_AUTOMATION_SERVICE_BINARY_SHA256=98c7faea665b7eb95206b8c73a6f47d644c5d2d0eae53f274f6a15faf5205744 -ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=98a665f59bced8f7c084e786280100e0571390b04eeffad140e633b463d8a204 -ARG ORCHESTRATION_ENGINE_COMMIT=8fd5e7d3021507647064da1ae9c9c3a6eeb4c725 +ARG ORCHESTRATION_ENGINE_ARTIFACT_SHA256=bd0dabf0bd87a859b97941657ae18e8dd551e390697494348c101782a508f136 +ARG ORCHESTRATION_ENGINE_COMMIT=1c7d4537becfd578d568582564b72e7c4d0b1e93 ARG HOST_PROVISIONER_VERSION=0.39.8 ARG HOST_PROVISIONER_COMMIT=385e5b536c108f17fdfcdec84c01750a5be5ab1c ARG HOST_PROVISIONER_ARCHIVE_SHA256=d775f36a613b1a486a5e60d6ad61fdbd1ebb4bd22422cbb6dcb70fdd7c4abf0c diff --git a/server/build-api-explorer-patch-image.sh b/server/build-api-explorer-patch-image.sh index 84b690d98d..a03edf4190 100755 --- a/server/build-api-explorer-patch-image.sh +++ b/server/build-api-explorer-patch-image.sh @@ -14,14 +14,14 @@ if [[ -n "$(git status --porcelain --untracked-files=normal)" ]]; then fi revision=${PASTURESTACK_SERVER_REVISION:-$(git rev-parse HEAD)} -server_release_tag=${SERVER_RELEASE_TAG:-v1.6.519} +server_release_tag=${SERVER_RELEASE_TAG:-v1.6.520} source_date_epoch=${SOURCE_DATE_EPOCH:-$(git show -s --format=%ct HEAD)} base_image=${BASE_IMAGE:-ghcr.io/pasturestack/server:v1.6.460@sha256:c855af8aea232dacc5bb6df68e2271d482c68b53c43ab0c108ec19118f5ab403} orchestration_engine_release_base_url=${ORCHESTRATION_ENGINE_RELEASE_BASE_URL:-https://github.com/PastureStack/orchestration-engine/releases/download} -orchestration_engine_release_tag=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.335} +orchestration_engine_release_tag=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.336} orchestration_engine_artifact=${ORCHESTRATION_ENGINE_ARTIFACT:-cattle.jar} -orchestration_engine_artifact_sha256=${ORCHESTRATION_ENGINE_ARTIFACT_SHA256:-98a665f59bced8f7c084e786280100e0571390b04eeffad140e633b463d8a204} -orchestration_engine_commit=${ORCHESTRATION_ENGINE_COMMIT:-8fd5e7d3021507647064da1ae9c9c3a6eeb4c725} +orchestration_engine_artifact_sha256=${ORCHESTRATION_ENGINE_ARTIFACT_SHA256:-bd0dabf0bd87a859b97941657ae18e8dd551e390697494348c101782a508f136} +orchestration_engine_commit=${ORCHESTRATION_ENGINE_COMMIT:-1c7d4537becfd578d568582564b72e7c4d0b1e93} orchestration_engine_version=${orchestration_engine_release_tag#v} engine_readonly_schema_sha256=${ENGINE_READONLY_SCHEMA_SHA256:-7f274219e8dd9c6d750a408a6edec1448b564f4b16ba2204c425c5b45cec2233} engine_restricted_schema_sha256=${ENGINE_RESTRICTED_SCHEMA_SHA256:-f854ba99260f29e324ab7446a8592996946038920ac9bcf17689d98d1ebc5e51} @@ -101,7 +101,7 @@ usage_telemetry_agent_archive_sha256=${USAGE_TELEMETRY_AGENT_ARCHIVE_SHA256:-5ce usage_telemetry_agent_binary_sha256=${USAGE_TELEMETRY_AGENT_BINARY_SHA256:-e62a21270142181315293d7e11482288ffe8fc4d91cc8fe07dacc90b461f3709} supported_docker_range='~v1.12.3 || ~v1.13.0 || ~v17.03.0 || ~v17.06.0 || ~v17.09.0 || ~v17.12.0 || ~v18.03.0 || ~v18.06.0 || ~v18.09.0 || ~v19.03.2 || v24.0.9 || >=v29.4.1 <=v29.7.2 || v29.8.0' newest_docker_version=v29.8.0 -image=${IMAGE:-pasturestack-validation/server:v1.6.519} +image=${IMAGE:-pasturestack-validation/server:v1.6.520} build_options=() [[ "$revision" =~ ^[0-9a-f]{40}$ ]] diff --git a/server/build-component-candidate.sh b/server/build-component-candidate.sh index 55cfd1da5b..2b0f7877a7 100755 --- a/server/build-component-candidate.sh +++ b/server/build-component-candidate.sh @@ -14,8 +14,8 @@ for name in "${required[@]}"; do case "$name" in *_COMMIT) [[ ${!name} =~ ^[0-9a-f]{40}$ ]] ;; *) [[ ${!name} =~ ^[0-9a-f]{64}$ ]] ;; esac export "$name" done -export SERVER_RELEASE_TAG=${SERVER_RELEASE_TAG:-v1.6.519} -export ORCHESTRATION_ENGINE_RELEASE_TAG=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.335} +export SERVER_RELEASE_TAG=${SERVER_RELEASE_TAG:-v1.6.520} +export ORCHESTRATION_ENGINE_RELEASE_TAG=${ORCHESTRATION_ENGINE_RELEASE_TAG:-v0.183.336} export ORCHESTRATION_ENGINE_ARTIFACT=cattle.jar export WEB_CONSOLE_RELEASE_TAG=${WEB_CONSOLE_RELEASE_TAG:-1.6.181} export WEB_CONSOLE_ARTIFACT="web-console-${WEB_CONSOLE_RELEASE_TAG}.tar.gz" diff --git a/server/security/openvex.json b/server/security/openvex.json index a23281f82d..e2a75fbba8 100644 --- a/server/security/openvex.json +++ b/server/security/openvex.json @@ -1,6 +1,6 @@ { "@context": "https://openvex.dev/ns/v0.2.0", - "@id": "https://github.com/PastureStack/server/security/openvex/v1.6.519", + "@id": "https://github.com/PastureStack/server/security/openvex/v1.6.520", "author": "PastureStack Security", "timestamp": "2026-10-02T22:05:00Z", "version": 51, diff --git a/server/security/vendor-pending.json b/server/security/vendor-pending.json index 0a5995e857..baaef78ef1 100644 --- a/server/security/vendor-pending.json +++ b/server/security/vendor-pending.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "release": "v1.6.519", + "release": "v1.6.520", "generatedAt": "2026-10-10T00:00:00Z", "policy": { "allowedSeverities": [