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
7 changes: 4 additions & 3 deletions .github/workflows/security-release-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-24.04
timeout-minutes: 120
env:
CANDIDATE_VERSION: 0.38.7
CANDIDATE_VERSION: 0.38.8
DAPPER_IMAGE: pasturestack-host-api-dapper:security-gate
TRIVY_IMAGE: ghcr.io/aquasecurity/trivy:0.73.0@sha256:7cced7cae583819fc7806d4cbc0dbbc7cad18b99f7d3e235192e6da8c091045c
COSIGN_IMAGE: ghcr.io/sigstore/cosign/cosign:v3.1.3@sha256:9e5c2f2edc34351160407ca3416c61855bdf9403c3c5936e0f0be7fc261611b8
Expand All @@ -35,8 +35,9 @@ jobs:
set -euo pipefail
test -z "$(git status --porcelain)"
test "$(git rev-parse HEAD)" = "$GITHUB_SHA"
# Exactly one reviewed maintenance commit after the existing published main.
test "$(git rev-list --count 67d1e58d1999730f106ba76c3ee3cf03bbf495d6..HEAD)" = 1
# Preserve the published history while allowing a reviewed maintenance series.
git merge-base --is-ancestor 67d1e58d1999730f106ba76c3ee3cf03bbf495d6 HEAD
test "$(git rev-list --count 67d1e58d1999730f106ba76c3ee3cf03bbf495d6..HEAD)" -ge 1
test "$(git rev-list --count --merges 67d1e58d1999730f106ba76c3ee3cf03bbf495d6..HEAD)" = 0
private_pattern=$(printf '%s|%s|%s' 'chen''21019' '10\.0\.0\.''125' 'C:\\''Users\\')
if git grep -n -E "$private_pattern" -- .; then
Expand Down
8 changes: 7 additions & 1 deletion Dockerfile.dapper
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ ADD --checksum=sha256:6965aafe69e0a49ef34d2e26f8e83d09d1c6037b7e9ee37f19b292a3c6
ADD --checksum=sha256:51cf418571059831096abd40e0bd5debaa1ae48a6f8d87d9e4e5f7f12aa4db52 https://security.ubuntu.com/ubuntu/pool/main/o/openssl/openssl-provider-legacy_3.5.5-1ubuntu3.7_amd64.deb /tmp/openssl-provider-legacy.deb
ADD --checksum=sha256:0498bc9510149ef06abd6c09b8932e43c5bc71b68634b4b8f84488b2e0a20e82 https://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_7.0.0-38.38_amd64.deb /tmp/linux-libc-dev.deb

ADD --checksum=sha256:5b6326f1932cfd7be57130561dc78192f09ed9f58bfbe6606ed0c50510c3b6cd https://archive.ubuntu.com/ubuntu/pool/main/c/ca-certificates/ca-certificates_20260816ubuntu0.26.04.1_all.deb /opt/pasturestack-ca-certificates.deb
RUN set -eux; \
. /licenses/ubuntu-apt.lock; \
find /etc/apt -type f \( -name '*.list' -o -name '*.sources' \) -exec sed -i \
Expand All @@ -45,7 +46,7 @@ RUN set -eux; \
apt-get --snapshot "${UBUNTU_APT_SNAPSHOT}" install -y --no-install-recommends \
bash="${UBUNTU_APT_BASH_VERSION}" \
busybox-static="${UBUNTU_APT_BUSYBOX_STATIC_VERSION}" \
ca-certificates="${UBUNTU_APT_CA_CERTIFICATES_VERSION}" \
ca-certificates="${UBUNTU_APT_CA_CERTIFICATES_BOOTSTRAP_VERSION}" \
containerd="${UBUNTU_APT_CONTAINERD_VERSION}" \
curl="${UBUNTU_APT_CURL_VERSION}" \
docker.io="${UBUNTU_APT_DOCKER_IO_VERSION}" \
Expand Down Expand Up @@ -81,6 +82,11 @@ RUN set -eux; \
test "$(dpkg-query -W -f='${Version}' "$package")" = "$expected"; \
rm -f "/tmp/${package}.deb"; \
done; \
dpkg -i /opt/pasturestack-ca-certificates.deb && \
update-ca-certificates --fresh && \
test "$(dpkg-query -W -f='${Version}' ca-certificates)" = '20260816ubuntu0.26.04.1' && \
test ! -e /usr/share/ca-certificates/mozilla/emSign_ECC_Root_CA_-_G3.crt && \
rm -f /opt/pasturestack-ca-certificates.deb && \
{ \
printf 'snapshot\t%s\n' "${UBUNTU_APT_SNAPSHOT}"; \
dpkg-query -W -f='${binary:Package}\t${Version}\n' | LC_ALL=C sort; \
Expand Down
6 changes: 5 additions & 1 deletion 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.38.7`, built with Go 1.27.3. Use a published release only after its source, reproducibility, vulnerability, and packaged-binary checks pass; a source version is not publication evidence. Target-bound API Key tickets require matching Engine introspection at handshake and during logs, exec, and statistics streams. Revocation or expiry closes the stream; it does not stop its container or kill an already started exec process. Legacy and full-without-expiry tokens retain their authentication contract.
The source package version is `0.38.8`, built with Go 1.27.3. Use a published release only after its source, reproducibility, vulnerability, and packaged-binary checks pass; a source version is not publication evidence. Target-bound API Key tickets require matching Engine introspection at handshake and during logs, exec, and statistics streams. Revocation or expiry closes the stream; it does not stop its container or kill an already started exec process. Legacy and full-without-expiry tokens retain their authentication contract.

The authenticated backend connection declares the exact `key-audit-v1,key-delegation-v1` capabilities. A compatible Proxy requires that declaration for every verified API Key stream, including full keys, so an older embedded backend cannot bypass terminal audit. Ordinary non-Key streams retain their existing backend compatibility.

Expand Down Expand Up @@ -41,3 +41,7 @@ See [COMPATIBILITY.md](COMPATIBILITY.md), [SECURITY.md](SECURITY.md), and [ORIGI
## License and attribution

The inherited project remains licensed under [Apache License 2.0](LICENSE). Copyright and attribution for inherited work and vendored dependencies remain with their respective authors and contributors. PastureStack contributors claim authorship only for their own changes.

## October 2026 security maintenance

Maintained Go builds select the patched Go 1.27.3 compiler without raising the existing Go language requirement. Ubuntu build/runtime stages apply the checksum-pinned `ca-certificates 20260816ubuntu0.26.04.1` security package after their frozen APT baseline; the final trust store and installed version are verified. Release artifacts must pass the repository's existing checks before publication.
4 changes: 3 additions & 1 deletion package/ubuntu-apt.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ UBUNTU_APT_SNAPSHOT='20260808T000000Z'

UBUNTU_APT_BASH_VERSION='5.3-2ubuntu1'
UBUNTU_APT_BUSYBOX_STATIC_VERSION='1:1.37.0-7ubuntu1'
UBUNTU_APT_CA_CERTIFICATES_VERSION='20260601~26.04.1'
# Frozen APT baseline; the checksum-pinned security overlay below is the final installed CA.
UBUNTU_APT_CA_CERTIFICATES_BOOTSTRAP_VERSION='20260601~26.04.1'
UBUNTU_APT_CA_CERTIFICATES_VERSION='20260816ubuntu0.26.04.1'
UBUNTU_APT_CONTAINERD_VERSION='2.2.2-0ubuntu1.1'
UBUNTU_APT_CURL_VERSION='8.18.0-1ubuntu2.3'
UBUNTU_APT_DOCKER_IO_VERSION='29.1.3-0ubuntu4.1'
Expand Down
2 changes: 1 addition & 1 deletion scripts/build
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ if [ -f ./build/bootstrap.envs ];then
. ./build/bootstrap.envs
fi

BUILD_VERSION=${VERSION_OVERRIDE:-0.38.7}
BUILD_VERSION=${VERSION_OVERRIDE:-0.38.8}
BUILD_VERSION=${BUILD_VERSION#v}
if [[ ! "$BUILD_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo 'VERSION_OVERRIDE must use MAJOR.MINOR.PATCH with no suffix' >&2
Expand Down
2 changes: 1 addition & 1 deletion scripts/package
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ cd "$(dirname "$0")/.."
ARCH=${ARCH:?"ARCH not set"}
SUFFIX=""
[ "${ARCH}" != "amd64" ] && SUFFIX="_${ARCH}"
RELEASE_VERSION=${VERSION_OVERRIDE:-v0.38.7}
RELEASE_VERSION=${VERSION_OVERRIDE:-v0.38.8}
RELEASE_VERSION=${RELEASE_VERSION#v}
CONTENT=${PASTURESTACK_PACKAGE_ID:-$(git rev-parse --short=32 HEAD)}
SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH:-$(git show -s --format=%ct HEAD)}
Expand Down
Loading