Skip to main content

Bill of materials

fremforge is deliberately transparent about the tooling underneath every control. Customers under BSI C5, ISO 27001, BaFin, or ENISA-regulated review need the tool-level audit trail, and we’d rather you can grep our source than reverse-engineer a black box.

This page is the authoritative inventory. The shorter table on the security features overview is a quick-reference subset; this one is the full record — versions, pull sources, where each component runs, the supply-chain attestation that ships with it, and the licence.

Supply-chain integrity

Every dependency, container image, and binary in this inventory traverses fremforge’s upstream-contact rule:

  • GitHub-hosted code flows via the Forgejo native pull-mirror at frem.sh/<canonical-org>/<repo> (8-hour sync). Customer workflows resolving uses: actions/checkout@v4 hit frem.sh/actions/checkout — no direct github.com fetch on the customer’s critical path.
  • Container images (docker.io / ghcr.io / quay.io / public.ecr.aws) are cached via an internal EU mirror. Production manifests never reference an upstream registry directly.
  • Release binaries that aren’t shipped as OCI (e.g. opengrep, cosign) are wrapped in tiny cache images served from the same internal EU mirror. Renovate tracks the upstream github-release version and opens a weekly bump PR.

CI checks Dockerfiles and manifests for any reference that would bypass the mirror, so every upstream dependency resolves through the EU-resident cache rather than directly from a public registry.

CI + supply-chain tooling

ToolVersionWhere usedLicensePull source
Forgejov15.xRepo hosting, code review, Actions runner protocol, SSO auth-sourcesGPLv3Internal EU mirror (fremforge build)
forgejo-runner (act_runner)v12.10.2Per-job ephemeral runner on a single-use ECS VMMITInternal EU mirror
Gitleaksv8.xPre-receive secret scanMITInternal EU mirror
OpenGrepv1.21SAST on every PR (FOSS Semgrep successor — relicensed move)LGPLv2.1Internal EU mirror
Trivyv0.70Customer CI image scan + runner-image baked-in CVE checkApache 2.0Internal EU mirror
osv-scannerLatestPR-time dependency CVE/GHSA scanApache 2.0Internal EU mirror
SyftLatestCycloneDX 1.6 (SPDX accepted at ingest, not generated) SBOM on release-tag pushApache 2.0Internal EU mirror
cosignLatestImage signing + verification (customer CI via cosign-verify.yaml)Apache 2.0Internal EU mirror
Fulciov1.8.5 (Helm 2.9.0)Self-hosted code-signing CA at sign.frem.sh. Root CA in T Cloud Public DEW KMS (FIPS 140-2 Level 3 HSM). NOT the public Sigstore Fulcio — fremforge runs its ownApache 2.0Internal EU mirror
Sigstore TSALatestRFC 3161 timestamp authority at tsa.frem.sh. Key in DEW KMS. NOT the public Sigstore TSAApache 2.0Internal EU mirror
gitsignLatestCustomer git client; OIDC-bound commit signing against the local FulcioApache 2.0Customer-side install (brew install sigstore/tap/gitsign)
RenovateLatestHosted dep-bump bot, 15-min cron, per-repo opt-outAGPLv3Internal EU mirror
kanikoLatestRootless container build in customer workflows (alternative to BuildKit when customer can’t run privileged)Apache 2.0Internal EU mirror
ClamAVLatestPre-receive malware scan + LFS upload scanGPLv2Internal EU mirror
SaneSecurity feedsDailyClamAV signature feeds (Foxhole, RogueDB, etc.) — broadens detection beyond the upstream CVD set(Vendor — EU)DNS pull via restricted egress allowlist
scorecardLatestWeekly OpenSSF best-practice run per repoApache 2.0Internal EU mirror
openssl + python3 (stdlib)n/aCustomer-side verification of fremforge-issued SLSA L2 provenance — the DSSE envelopes are signed with a bare Ed25519 key, so verification is a small curl/jq/openssl/python3 recipe (see SLSA provenance), not upstream slsa-verifierDistribution-default tooling

Platform foundation

LayerTool / vendorWhere usedLicense / posture
Container registryT Cloud Public SWRAll fremforge images. Single source for runtime pulls; mirror for every upstream registryVendor (Deutsche Telekom, eu-de)
KubernetesT Cloud Public CCE Turbo (Cloud Native Network 2.0)Platform workloads (Forgejo, control-plane monolith, jobs). Per-pod ENI + Security Group via Yangtse CNI. CI runners do not run here — see the ECS row belowVendor (Deutsche Telekom, eu-de)
Hosted CI runner computeT Cloud Public ECS (single-use VM per job)One ephemeral ECS VM per commit/PR; dedicated kernel (hypervisor-isolated), reaped after the job; per-VM VPC Security Group (no ingress, VM-to-VM denied, egress via SSRF-guarded runner proxy)Vendor (Deutsche Telekom, eu-de)
Object storage (operator)T Cloud Public OBSAudit-chain WORM anchor, SBOM archive, data-export, OpenTofu stateVendor (Deutsche Telekom, eu-de)
Relational DBT Cloud Public RDS (PostgreSQL 15)api state, tenant + finding tables, audit chainVendor (Deutsche Telekom, eu-de)
In-memory cacheT Cloud Public DCS RedisRate-limit counters, token-exchange seen-IP, session cacheVendor (Deutsche Telekom, eu-de)
Key managementT Cloud Public DEWMASTER_ENCRYPTION_KEY, Fulcio root CA, TSA signing keyVendor (FIPS 140-2 Level 3 HSM, Germany)
Function-as-a-serviceT Cloud Public FunctionGraphScheduled cron + reaper workloadsVendor (Deutsche Telekom, eu-de)
Log + metric tierT Cloud Public LTS + CESApplication logs, keyword alarms, SLO metricsVendor (Deutsche Telekom, eu-de)
Edge / CDNBunny CDNTLS termination, EU-edge caching, edge rules, rate-limit floorVendor (Slovenia HQ, EU-resident, no US sub-processor)
Transactional emailLettermintAuth emails, billing notices, alertsVendor (NL, GDPR-resident)
Operational mailboxmailbox.orgInbound *@frem.sh admin mailVendor (Germany)
Payment processingMollieCard + SEPA Direct DebitVendor (NL, GDPR-resident)
BookkeepingDineroInvoice issuance + accountingVendor (DK, GDPR-resident)
External uptime probeupdown.ioOff-net availability probes (api, Forgejo, Kuma, marketing, Authentik)Vendor (FR)

Every vendor on this list is contractually EU-resident with no US sub-processor in the data path. Full DPA + sub-processor chain on the trust page. The canonical machine-readable supplier inventory lives in fremverk/governance/suppliers.yaml — that file is the source-of-truth Annex B for the customer-facing DPA.

What we deliberately don’t use

Anti-vendor / anti-toolWhy
github.com (direct)EU sovereignty + Schrems II + the upstream-contact rule. Mirrored exclusively.
GitHub Advanced Security (CodeQL etc.)Proprietary detection rules you can’t audit. We use OpenGrep + Trivy + osv-scanner — all OSS, all auditable.
Microsoft 365, Entra, DefenderSame. fremforge product has zero Microsoft footprint. (fremverk corporate IT is a separate identity world.)
Public Sigstore Fulcio/Rekor (sigstore.dev)US-hosted; verification path would round-trip outside the EU. We run our own Fulcio + TSA in eu-de with the root CA in DEW KMS. No Rekor / transparency log by design — TSA-anchored timestamping is the integrity primitive instead.
AWS, GCP, AzureUS-cloud-controlled. T Cloud Public is operated by Deutsche Telekom on a Huawei-derived stack; the OpenTofu provider is the maintained-for-OTC fork (opentelekomcloud/opentelekomcloud, never huaweicloud/huaweicloud).
Cloudflare, Fastly, AkamaiEdge with US-cloud control. Bunny CDN is EU-HQ and contractually EU-resident.
Google Fonts, jsDelivr, unpkg CDN-loaded assetsThird-party CDN exposes traffic patterns to US-resident edges. All fonts/JS/CSS self-hosted at www.frem.sh/fonts/ via Bunny EU.
Long-lived service-account credentials in customer workflowsOIDC token federation (workflow OIDC) + agent-native auth replace them. Long-lived keys are an opt-in deprecated path with a deprecation banner.

How to consume this BoM in your own audit pack

For an RFP response or vendor-questionnaire: link this page directly. The URL is stable: https://docs.frem.sh/security/bill-of-materials/.

For BSI C5 or ISO 27001 evidence: ask security@frem.sh for the dated PDF snapshot. We can also produce a CycloneDX-format SBOM of the platform itself (not just per-release) on request — useful for transitive-CVE matching.

For continuous verification: every release of every fremforge component publishes a Syft-generated CycloneDX SBOM, and the customer-side SLSA-L2 provenance pins the digest of every attested asset. The provenance is an Ed25519-signed DSSE / in-toto envelope (<asset>.intoto.jsonl); verify it against fremforge’s published trust root with the curl/jq/openssl/python3 recipe in SLSA provenance.

Drift: this BoM is hand-maintained today. Ping security@frem.sh if you need a current snapshot before an audit.

Related