Skip to content

Enterprise Security Readiness

This page is the single source of truth for evaluating Caracal’s security posture and supply-chain trust. It is written for enterprise security, procurement, and platform teams who need to verify that the project follows security and operational best practices before adopting it.

Each control carries a status:

  • Implemented — enforced in code, CI, or the release pipeline today.
  • Documented — a stated policy or expectation the project operates under.
  • Planned — intended, not yet in place.
  • Not claimed — deliberately not asserted, because it is not independently verified.

Nothing here asserts a compliance status that cannot be proven. Where a control depends on organization settings that are not visible in the repository, it is marked Documented, not Implemented.

Caracal is a pre-execution authority layer for agents and workloads. Its Security Token Service (STS) issues scoped, signed mandates; the Gateway enforces protected-resource access; the Coordinator tracks agent and delegation state; and the Audit service preserves tamper-evident evidence. The Community Edition is licensed under Apache 2.0 and is designed to be self-hosted.

The data Caracal handles, where encryption occurs, how keys and tokens are isolated, and how trust boundaries work are covered in Review the Threat Model. Start there before a deeper review.

AreaControlStatus
Static analysisCodeQL (security-extended) for Go, Python, TypeScriptImplemented
Dependency vulnerabilitiesOSV-Scanner sweep across npm, Go, PythonImplemented
Dependency vulnerabilitiesPer-pull-request dependency review before mergeImplemented
License complianceCopyleft license deny-list on introduced dependenciesImplemented
Dependency updatesDependabot for actions, npm, Go, pip, DockerImplemented
Container CVEsTrivy scan of published images (Critical/High)Implemented
Container hardeningDistroless, non-root, pinned base digestsImplemented
Release signingSigstore keyless build provenance attestationsImplemented
SBOMSBOM and provenance attached to every imageImplemented
Reproducible buildsArchives rebuilt and byte-compared in CIImplemented
Release verificationPost-release attestation and provenance checksImplemented
Supply-chain postureOpenSSF Scorecard, results in code scanningImplemented
Vulnerability disclosurePrivate reporting policy and processImplemented
Threat modelAssets, boundaries, encryption, key isolationDocumented
Incident responseDefined response processDocumented
Branch protectionProtected main, required reviewDocumented
Maintainer MFAMFA required for maintainers and committersDocumented
FIPS validationFIPS-validated cryptographic modulesNot claimed

Releases are signed with GitHub Artifact Attestations, built on the Sigstore keyless model. Signatures are produced in the release workflow using short-lived keys issued to the workflow’s OpenID Connect identity, so no long-lived signing key is stored on any distribution server. The trust root is Sigstore’s transparency log: verification confirms that an artifact was built by the Garudex-Labs/caracal release workflow.

  • CLI and Console archives are checksummed in SHA256SUMS and carry build-provenance attestations.
  • npm packages publish with provenance.
  • Container images carry both provenance and SBOM attestations.

Verification steps for archives, images, and packages are in Verify a Release. The bundled installers run gh attestation verify automatically.

Every container image is built with SBOM and provenance generation enabled in the release pipeline. The SBOM is attached to the image as an attestation in the registry and can be inspected with the registry tooling:

Terminal window
docker buildx imagetools inspect ghcr.io/garudex-labs/caracal-<service>:<tag> \
--format '{{ json .SBOM }}'

For a source-level dependency inventory across all ecosystems, the weekly OSV-Scanner workflow enumerates and checks the npm, Go, and Python dependency graphs from their lockfiles.

  • Reporting. Vulnerabilities are reported privately through GitHub Security Advisories or email, never as public issues. The full policy, required report format, and response timeline are in Report a Vulnerability.
  • Detection. CodeQL (security-extended) runs on pull requests and on a schedule. OSV-Scanner runs weekly across every dependency ecosystem and reports into GitHub code scanning. Trivy scans published container images weekly for Critical and High CVEs.
  • Triage. Findings surface in the repository’s code scanning view as a single consolidated feed, so maintainers and evaluators review one source instead of disparate scan logs.
  • Response. Confirmed incidents follow the documented incident response process, and fixes ship through the standard signed release pipeline.
  • Automated gate. A scheduled dependency review runs every two days over the changes merged to main in that window and fails on newly introduced High-or-higher vulnerabilities and on a copyleft license deny-list. It is skipped automatically when no commits landed in the window.
  • Updates. Dependabot opens grouped weekly update pull requests for GitHub Actions, npm, Go modules, pip, and Docker base images. Updates pass the same CI, dependency review, and code review as any other change.
  • Pinning. GitHub Actions are pinned to commit SHAs, container base images are pinned to digests, and language dependencies are resolved from committed lockfiles (pnpm-lock.yaml, go.sum, Python *.lock). Reviewer guidance for dependency changes is in the repository contributing guide.

The following are Documented expectations for the project’s maintainer organization. They depend on GitHub organization and repository settings rather than repository files, so they are stated as policy rather than asserted as independently verifiable from the source tree:

  • Multi-factor authentication is required for every maintainer and anyone with commit access.
  • The default branch main is protected: direct pushes are disallowed and changes land through reviewed pull requests.
  • Contributor pull requests require at least one approving maintainer review and passing CI; authors do not approve or merge their own changes.
  • Release and publish workflows run from protected CI environments with minimal, scoped permissions.

OpenSSF Scorecard runs weekly and publishes its results, giving an external, repeatable signal for branch protection, token permissions, pinned dependencies, and other repository health checks.

All service images are built to run safely with least privilege:

  • Minimal base. Final stages use Google distroless images pinned by digest, with no shell or package manager in the runtime layer.
  • Non-root. Images run as an unprivileged user.
  • Read-only root filesystem. Images are designed to run with a read-only root filesystem; only declared state directories under /var/lib/caracal need to be writable.
  • Dropped capabilities. Images require no added Linux capabilities; deployments should drop all capabilities and set no-new-privileges.
  • Reproducible, multi-stage builds. Build and runtime stages are separated so build tooling never ships in the runtime image.

Recommended Kubernetes securityContext and runtime hardening settings are in Harden Security Posture.

When a base image carries a CVE that upstream has not yet rebuilt to fix, and no newer pinned digest is available, the finding is tracked in a time-boxed .trivyignore.yaml entry with a justification and an expiry date. The suppression expires automatically so the finding resurfaces for re-evaluation once a fixed base image is published, keeping the weekly container scan free of un-actionable noise without losing the audit trail.

How the Project Approaches Supply-Chain Trust

Section titled “How the Project Approaches Supply-Chain Trust”

Caracal aligns with the SLSA build-provenance model and OpenSSF best practices:

  • One clean source of truth per signal: code scanning for vulnerabilities and static analysis, Scorecard for repository health, attestations for build provenance. Scans are scheduled rather than duplicated per push to avoid noise.
  • Build provenance is generated and verifiable for every released artifact.
  • Releases are reproducible: the pipeline rebuilds archives and byte-compares them against the published artifacts before signing.
  • Dependencies are pinned, updated on a fixed cadence, and gated on review.

This section states clearly what is and is not supported for regulated customers.

  • Cryptography in use. Caracal signs mandates and audit evidence and uses HMAC for stream and audit integrity. Cryptographic operations rely on the standard libraries of the Go, Node.js, and Python runtimes used to build and run the services.
  • FIPS status — Not claimed. The project does not claim FIPS 140-2/140-3 validation. The default release artifacts are not built against FIPS-validated cryptographic modules, and no FIPS self-test or certificate is asserted.
  • What regulated customers can do today. Because services are distributed as container images, an operator who requires FIPS-mode cryptography can run them on a FIPS-validated host or base platform and supply a FIPS-validated runtime where their compliance program requires it. This is the operator’s responsibility and is not verified by the project.
  • Encryption boundaries. Transport security (TLS) is terminated and configured by the operator; see Harden Production. Key and secret isolation is described in Rotate Keys and Secrets and the threat model.
  • Planned. A documented, tested FIPS-mode build path is a candidate for a future release and is currently marked Planned, not available.
  1. Review the Threat Model — assets, trust boundaries, encryption, and key and token isolation.
  2. Report a Vulnerability — the vulnerability disclosure policy and response timeline.
  3. The repository’s OpenSSF Scorecard result and code scanning alerts for current, independent security signals.
  4. Verify a Release — confirm you can validate signatures, provenance, and SBOMs for the artifacts you intend to run.
  5. Harden Security Posture — the production hardening checklist, including container securityContext.
  6. The Regulated-Enterprise and FIPS Readiness section if you operate under FIPS or similar mandates.