Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions .github/workflows/security-release-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-24.04
timeout-minutes: 60
env:
VERSION_OVERRIDE: v0.23.14
VERSION_OVERRIDE: v0.23.16
SOURCE_DATE_EPOCH: "0"
TRIVY_IMAGE: aquasec/trivy:0.74.0@sha256:62b1e65e8869bc4b4c6aa4fa2b21595256c7c2f6018a9d9ad61caf87187c1969
BUILDER_IMAGE: pasturestack-websocket-proxy-dapper:ubuntu26
Expand All @@ -22,23 +22,31 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Prepare evidence directory
run: mkdir -p evidence
run: |
mkdir -p evidence
test -z "$(git status --porcelain --untracked-files=no)"
git rev-parse HEAD >evidence/source-revision.txt
git rev-parse HEAD^{tree} >evidence/source-tree.txt

- name: Build, test with the race detector, validate, and package
id: build
run: |
set -o pipefail
make ci 2>&1 | tee evidence/build-test.log
cp bin/websocket-proxy evidence/websocket-proxy-linux-amd64
cp dist/artifacts/websocket-proxy-0.23.14-linux-amd64.tar.xz evidence/first-build.tar.xz
cp dist/artifacts/websocket-proxy-0.23.16-linux-amd64.tar.xz evidence/first-build.tar.xz
docker run --rm --entrypoint /bin/bash \
-v "$PWD/evidence:/evidence:ro" "$BUILDER_IMAGE" \
-lc 'go version -m /evidence/websocket-proxy-linux-amd64' >evidence/product.buildinfo
test "$(awk 'NR==1 {print $2}' evidence/product.buildinfo)" = go1.27.3

- name: Verify a byte-identical second package
id: reproduce
run: |
set -o pipefail
rm -rf bin dist
make package 2>&1 | tee evidence/reproducible-build.log
cp dist/artifacts/websocket-proxy-0.23.14-linux-amd64.tar.xz evidence/second-build.tar.xz
cp dist/artifacts/websocket-proxy-0.23.16-linux-amd64.tar.xz evidence/second-build.tar.xz
cmp evidence/first-build.tar.xz evidence/second-build.tar.xz
sha256sum evidence/first-build.tar.xz evidence/second-build.tar.xz \
| tee evidence/package-sha256.txt
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile.dapper
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ COPY ubuntu-apt.lock /licenses/ubuntu-apt.lock
ADD --checksum=sha256:6077d27c6b6f8b23590cb01ff877ed8c804a67a5442cc32b5a33da10d2bd0e90 https://archive.ubuntu.com/ubuntu/pool/main/c/ca-certificates/ca-certificates_20260601~26.04.1_all.deb /tmp/ca-certificates.deb

ARG DAPPER_HOST_ARCH=amd64
ARG GO_VERSION=1.27.2
ARG GO_SHA256_amd64=ecbadb99091a3f46e31f5f934b068b1864eafa7995211b39eaddf76996045fe5
ARG GO_SHA256_arm=e25a174051d8675f87ac720aedcd25bf89ac652c4b82f26aa47919524725ed95
ARG GO_VERSION=1.27.3
ARG GO_SHA256_amd64=65efbc80fdc1fa2cd2631cad5b481777a68e8725f34e89f50fc6ac714e379b40
ARG GO_SHA256_arm=d6f4e11dd7157030d7ac11c51c8f73201a2db932d593c3106b1da11cc32bfdf8
ARG DOCKER_VERSION=29.7.2
ARG DOCKER_SHA256_amd64=803d433f226db4776e1768fd319fc6c6e4935a456acf84fcc0080818b854bc8f
ARG DOCKER_SHA256_arm=e9d0ba1b419d0c7a83ecec33c4c1ca8ac1e4f36b41c7254d5a816f766f106a59
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ PastureStack is an independent community effort to preserve, audit, and moderniz

## Capabilities

The source package version is `0.23.15`. Target-bound API Key tickets require exact target, operation, revision, expiry, and ticket digest matches from the trusted Engine. Handshake and periodic live checks fail closed. Persistent console secrets cannot extend an expired or revoked ticket; revocation also clears replay data. Legacy and full-without-expiry token authentication remains unchanged.
The source package version is `0.23.16`, rebuilt with Go 1.27.3 for the crypto/x509 fix CVE-2026-111943. Target-bound API Key tickets require exact target, operation, revision, expiry, and ticket digest matches from the trusted Engine. Handshake and periodic live checks fail closed. Persistent console secrets cannot extend an expired or revoked ticket; revocation also clears replay data. Legacy and full-without-expiry token authentication remains unchanged.

Every verified API Key stream requires an authenticated Host API `0.38.5` connection declaring `key-audit-v1,key-delegation-v1`. Missing capabilities prevent forwarding any execution payload. The Proxy submits only the signed stream ticket and that connection's signed backend ticket to the Engine's fixed audit-only failure endpoint; it returns `BackendAuditCapabilityUnavailable` (503) only after durable acceptance, or `AuditUnavailable` (503) when evidence cannot be accepted. Ordinary non-Key streams do not gain this capability requirement.

Expand Down Expand Up @@ -34,17 +34,17 @@ retention, and total sessions are bounded.

## Build and test

From a Docker-capable Linux host, the checksum-pinned builder uses Go `1.27.2`:
From a Docker-capable Linux host, the checksum-pinned builder uses Go `1.27.3`:

```sh
make test
make build
make package
```

The default producer version is `0.23.15`; `VERSION_OVERRIDE` accepts only numeric semantic versions. Packaging
The default producer version is `0.23.16`; `VERSION_OVERRIDE` accepts only numeric semantic versions. Packaging
rejects brand or maintenance suffixes and produces the deterministic,
versioned `websocket-proxy-0.23.15-linux-amd64.tar.xz` asset. Install it with the matching official Engine and host-api package; scoped stream protection cannot be provided by replacing the proxy alone. Package publication and deployment are explicit operations.
versioned `websocket-proxy-0.23.16-linux-amd64.tar.xz` asset. Install it with the matching official Engine and host-api package; scoped stream protection cannot be provided by replacing the proxy alone. Package publication and deployment are explicit operations.

See [COMPATIBILITY.md](COMPATIBILITY.md), [SECURITY.md](SECURITY.md), and [ORIGIN.md](ORIGIN.md).

Expand Down
6 changes: 4 additions & 2 deletions scripts/validate
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ if [ "${#maintained_go_files[@]}" -gt 0 ]; then
fi

echo Running: version and dependency policy
test "$(VERSION_OVERRIDE=v0.23.15 bash -c 'source scripts/version; printf %s "$VERSION"')" = "0.23.15"
test "$(VERSION_OVERRIDE=v0.23.16 bash -c 'source scripts/version; printf %s "$VERSION"')" = "0.23.16"
if VERSION_OVERRIDE=v0.23.12-maintenance.1 bash -c 'source scripts/version' >/dev/null 2>&1; then
echo "non-numeric version suffix was accepted" >&2
exit 1
Expand Down Expand Up @@ -89,7 +89,9 @@ fi

echo Running: reproducible builder and release-gate policy
grep -Fx 'FROM ubuntu:26.04@sha256:2260313b31c8c011cd2eebe728008efac1b3982be73eb71348ea2648d2c0e09b' Dockerfile.dapper >/dev/null
grep -Fx 'ARG GO_VERSION=1.27.2' Dockerfile.dapper >/dev/null
grep -Fx 'ARG GO_VERSION=1.27.3' Dockerfile.dapper >/dev/null
test "$(go env GOVERSION)" = go1.27.3
test "$(go version bin/websocket-proxy | awk '{print $2}')" = go1.27.3
grep -Fx 'ARG DOCKER_VERSION=29.7.2' Dockerfile.dapper >/dev/null
grep -Fx "UBUNTU_APT_SNAPSHOT='20260808T000000Z'" ubuntu-apt.lock >/dev/null

Expand Down
2 changes: 1 addition & 1 deletion scripts/version
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ if [ -n "${VERSION_OVERRIDE:-}" ]; then
fi
VERSION=${VERSION_OVERRIDE#v}
else
VERSION="0.23.15"
VERSION="0.23.16"
fi
Loading