Overview
CaseBender’s supply-chain workflows combine dependency controls, image scanning, SBOM generation, digest-based signing, and provenance. Vulnerability gates run before publication; signing and attestation coverage depends on the registry channel and release workflow described below.Pipeline Workflows
GitHub workflow badge images are not publicly readable for this private repository and return
404 Not Found when embedded without an authorized GitHub session. Authorized reviewers can use the links above; public assurance should rely on release-specific signatures, SBOMs, provenance metadata, and provided reports.main, requires an existing release
tag, reuses that tag’s signed candidate digests, and cannot create a new release
from arbitrary branch contents.
Dependency Management
Resolution Control
The lockfile records exact resolved dependency versions, while some package manifests retain compatible version ranges:save-exact=truein.npmrcmakes newly added dependencies exact by defaultstrict-peer-dependencies=falseis currently required for documented React 19 peer-range incompatibilities; CI still reports peer warningspnpm install --frozen-lockfilein all Dockerfiles ensures builds use exactly the versions in the lockfile- Node.js version pinned via
.nvmrcand.node-version(Node.js 20.x) - pnpm version pinned in Dockerfiles to prevent tool-level supply chain attacks
Automated Dependency Updates
Dependabot monitors for updates across three ecosystems:
Dependabot PRs are:
- Automatically labeled with
dependenciesandsecurity - Blocked from merging if they introduce HIGH or CRITICAL vulnerabilities
- Reviewed by the security team before merge
Dependency Review
When GitHub Code Security is licensed andENABLE_CODE_SCANNING is enabled, pull-request dependency deltas are checked for:
- New dependencies with known vulnerabilities (HIGH/CRITICAL blocked)
- Dependencies with forbidden licenses (copyleft licenses blocked)
- Dependencies with no license (flagged for review)
- Pre-release dependencies (documented and tracked)
pnpm audit, and license-policy job remain active.
Approved Component Registry
CaseBender maintains a documented registry of approved third-party components organized by risk tier:Container Security
Build Hardening
Every CaseBender container image follows security best practices:- Multi-stage builds: Build dependencies (compilers, dev tools) are excluded from production images
- Non-root users: Each service runs as a dedicated non-root user inside the container
- Alpine Linux: Minimal base images reduce attack surface
- Pinned tool versions: System packages and global tools are version-pinned
- No embedded secrets: All secrets are injected at runtime
Container Scanning
Every service image built by the pull-request security workflow is scanned locally with Trivy for:- OS vulnerabilities: CVEs in Alpine packages
- Application vulnerabilities: CVEs in Node.js dependencies
- Misconfigurations: Dockerfile best practice violations
- Secrets: Embedded credentials or API keys
Image Signing
CaseBender uses Cosign keyless signing through Sigstore for customer-facing Docker Hub publications. Main builds publish SHA andedge tags. Only the release workflow can promote stable SemVer and latest tags.
Signed Images
Google Artifact Registry is used by the managed Cloud Run deployment workflow. Its signature-verification step is currently report-only during the SEC-019 rollout and must not be represented as a blocking signed-deployment gate.
Verification
Across the signed publication workflows, controls include:- Signature Verification: Cosign verifies the image signature against the Sigstore transparency log
- SBOM and provenance attestations: BuildKit binds generated attestations to the image digest
- Vulnerability Scan: Final Trivy scan for CRITICAL vulnerabilities
SBOM (Software Bill of Materials)
Every release image includes a BuildKit-generated SBOM attestation:- Generated by: Docker BuildKit
- Bound to: The immutable image digest
- Protected by: Registry provenance plus the digest’s Cosign signature
- Release evidence: The customer bundle records all seven signed digests
- Node.js runtime version
- All npm packages with exact versions
- Alpine Linux packages
- System libraries and their versions
SLSA Provenance
Docker BuildKit emits artifact-bound provenance (mode=max) for each published
image. This replaces the former standalone metadata document whose subject was
not bound to an image.
What Provenance Documents
Provenance Security
- Provenance and SBOM attestations are emitted during the image build
- Cosign signs the exact digest after vulnerability scanning
- The release workflow verifies every signature before tag promotion
- The signed customer bundle contains a manifest mapping each service to its digest
Pre-Deployment Verification
The Cloud deployment workflow runs reproducibility and image-verification checks before deployment. Their current enforcement differs:Reproducible Build Verification
This is a required job and checks that the build environment is consistent:- Lockfile integrity (
pnpm-lock.yamlexists and is valid) - Node.js version matches expected version (20.x)
- pnpm version matches expected version (9.15.0)
.npmrcsecurity settings are present (save-exact,audit)- No suspicious postinstall scripts in dependencies
- Version pinning files (
.nvmrc,.node-version) are present
Image Verification
The main and on-premises release workflows enforce image authenticity and safety before their public aliases move:- Hadolint Dockerfile policy
- Trivy CRITICAL/HIGH vulnerability gate
- BuildKit SBOM and provenance attestations
- Cosign digest signing and exact workflow-identity verification
- post-promotion digest verification
Compliance Mapping
Related Documentation
- Security Assurance Program — Control lifecycle, enforcement, and assurance boundaries
- Code Security — SAST, DAST, and vulnerability management
- Security Evidence Guide — Digest traceability, signature verification, and evidence interpretation
- Security Overview — Live pipeline status badges
- Hardening Guide — Deployment security recommendations