Beveiligingsfuncties in één oogopslag
Alles wat fremforge levert, in één tabel die je snel doorloopt. Elke rij linkt naar de eigen pagina met de configuratie, de manier om af te wijken en de documentatie van de onderliggende tool.
fremforge is bewust transparant over de opensourcetools onder elke maatregel: klanten die onder BSI C5, ISO 27001, BaFin of door ENISA gereguleerde toetsing vallen, hebben het audittraject op toolniveau nodig, en we hebben liever dat je in onze broncode kunt grep’en dan dat je een black box moet terugontleden. Het onderscheid zit in de integratie (hooks, RBAC, auditketen, opslag in de EU, geen Microsoft, geen AWS), niet in de scanner.
Maatregelen bij het pushen van code
| Maatregel | Wat het doet | Tool | Per tenant in te stellen |
|---|---|---|---|
| Push-bescherming | Secretscan vóór ontvangst (pre-receive); weigert commits met inloggegevens voordat ze in de git-geschiedenis komen | Gitleaks v8 (120+ patronen) | Afwijkingsregels + omzeilen per patroon |
| Branchbescherming | Regels per branch: verplichte reviewers, statuscontroles, verplichte ondertekende commits, blokkeren van force-pushes | Forgejo native | Ja (per branch) |
| Tweefactorauthenticatie | TOTP voor elk gebruikersaccount; afdwingen van WebAuthn is beschikbaar op organisatieniveau (gebruikers registreren WebAuthn zelf op de beveiligingspagina van hun Forgejo-gebruikersinstellingen). Per organisatie af te dwingen | Forgejo native + eigen hooks voor afdwinging | Ja (afdwingen voor de hele organisatie, per gebruiker opt-in) |
| OIDC-MFA-verificatie | Controleer cryptografisch dat je IdP bij elke aanmelding MFA heeft bevestigd, via de OIDC-claim amr (RFC 8176). Vervangt het oude, door de operator bevestigde selectievakje “trust IdP MFA”: het token zegt ["pwd","mfa"], anders is het geen MFA | Eigen middleware voor claimcontrole | Beleid voor vereiste amr per tenant |
| SSO-break-glass | Is je IdP niet beschikbaar, verkeerd geconfigureerd of is de SSO-koppeling kapot, dan kunnen aangewezen eigenaren van de organisatie de toegang herstellen via een apart beheerde route met noodinloggegevens. Vastgelegd in de auditlog | Eigen ontwikkeling (door fremforge geschreven) | Aangewezen eigenaren per tenant |
| Sleutelloos commits ondertekenen (sigstore / gitsign) | Ondertekenen gebonden aan OIDC: je IdP-identiteit (Entra, Okta, Google Workspace, Authentik) ondertekent de commit via een Fulcio-certificaat van 10 minuten. Forgejo toont Verified by sigstore: <email> via <IdP>. Root-CA in DEW KMS van T Cloud Public (HSM volgens FIPS 140-2 Level 3, Duitsland). Fulcio op sign.frem.sh, TSA op tsa.frem.sh. Bewust geen Rekor / transparantielog: alleen tijdstempels verankerd door de TSA, zodat handtekeningen in geen enkele log van derden terechtkomen | Zelf gehoste Fulcio v1.8.5 + TSA op T Cloud Public eu-de, aan klantzijde gitsign | Organisatiebeheer → Toegestane OIDC-uitgevers + strengheidsniveau |
| Commits ondertekenen met een SSH-sleutel | Onderteken commits met dezelfde SSH-sleutel die Forgejo voor pushen gebruikt. Het label “Verified” verschijnt native in de webinterface. Werkt naast sleutelloos ondertekenen; de beheerder van de organisatie stelt de strengheid in | OpenSSH + allowedSignersFile van Forgejo | Per gebruiker in te schakelen |
| Commits ondertekenen met GPG | De standaardroute git commit.gpgsign. Upload de publieke sleutel in je gebruikersinstellingen; Forgejo verifieert en toont het label “Verified” | GnuPG + Forgejo native | Per gebruiker in te schakelen |
Scannen op codekwaliteit en kwetsbaarheden
Deze scanners draaien centraal op de eigen scanners van fremforge, bij elke pull request en op de standaardbranch. Er is geen workflowbestand om in je repository’s te installeren. De resultaten staan onder Beveiliging › Bevindingen.
| Maatregel | Wat het doet | Tool | In te stellen |
|---|---|---|---|
| SAST | Statische analyse bij elke PR en op de standaardbranch, centraal uitgevoerd op de eigen scanners van fremforge: er is geen workflowbestand in je repo om te installeren of te onderhouden. Vindt injectie, XSS, hardgecodeerde secrets en gevaarlijke API’s in C, C++, C#, Go, Java, JavaScript en TypeScript, Kotlin, PHP, Python, Ruby, Rust, Scala, Swift en Bash | OpenGrep met GitLab sast-rules, de C/C++-regels van 0xdea en eigen regels van fremforge | Blokkeerniveau; je eigen OpenGrep-regels, die elk eerst op een eigen voorbeeld worden gecontroleerd |
| Secretscanning | gitleaks bij elke pull request (de controle fremforge/secret-scan) en een wekelijkse doorzoeking van de volledige geschiedenis van elke repository; push-bescherming blokkeert secrets al bij het pushen | Gitleaks | Controle op pull requests aan of uit |
| IaC-scanning | Controles op verkeerde configuratie met trivy config (Dockerfile, Compose, Kubernetes, Helm, Terraform en meer) bij elke PR, als de controle fremforge/iac-scan met een eigen tabblad voor bevindingen, plus de eigen Rego-controles van je organisatie; blokkeert alleen op wat een PR toevoegt; bevindingen in het compliancerapport gegroepeerd per CIS-benchmark en NIS2-gebied | Trivy | Modus en drempel onder Beveiliging › Beleid › Scanners |
| Scannen van afhankelijkheden (OSV) | Scan van afhankelijkheden op CVE’s/GHSA’s bij elke PR, centraal uitgevoerd op de eigen scanners van fremforge. Toont oplosbare CVE’s met de voorgestelde upgrade | osv-scanner | Ernstdrempel |
| Bereikbaarheid | Markeert elke bevinding in afhankelijkheden en images als bereikbaar, niet bereikbaar of onbekend, met het bewijs (bestand en regel, of de getroffen functie), en sorteert lijsten, Aanbevelingen en het overzicht daarop. Go: govulncheck op de binaries in je images. JavaScript en TypeScript: Jelly, op importniveau tenzij de advisory functies noemt. Python, Java en Kotlin: op importniveau, ook via andere pakketten, nooit unreachable. Niets wordt verborgen of genegeerd; wat een merge blokkeert, verandert niet, tenzij je daarvoor kiest | govulncheck, Jelly, importlezers van fremforge | Optionele SLA-vermenigvuldiger (1-4) voor niet-bereikbare bevindingen; optioneel “pull requests niet blokkeren op niet-bereikbare bevindingen” |
| Bekend misbruikt | Markeert bevindingen waarvan de CVE als misbruikt staat vermeld in de EU Vulnerability Database van ENISA of de KEV-catalogus van CISA: een label en een filter, gesorteerd vóór EPSS, nooit een verlengde SLA, AutoFix als eerste. Beide lijsten worden dagelijks ververst | Mirrors van ENISA EUVD + CISA KEV | - |
| Beveiligingsfixes | Eén klik opent één pull request die een kwetsbare afhankelijkheid ophoogt naar de laagste versie die elke open advisory oplost (de ecosystemen op Ondersteunde ecosystemen), of de FROM-basis van een image ophoogt; Alles in deze repository herstellen per repository. Nooit automatisch samengevoegd. Optionele AI-fixes voor een korte lijst SAST-regels gebruiken alleen je eigen modelprovider en staan standaard uit | Gehoste Renovate; je eigen AI-provider voor SAST-fixes | Limieten per repo en per organisatie; AI-fixes standaard uit |
| Fixes op basis van regels | Fix-PR openen bij een secretbevinding verplaatst het inloggegeven naar een omgevingsvariabele (Go, Python, JavaScript, TypeScript); bij zes IaC-controles zet het de eigenschap op de veilige waarde. Een vaste regel, geen AI: er verlaat niets fremforge. Eerst op syntaxis gecontroleerd en opnieuw gescand, nooit automatisch samengevoegd | gitleaks en Trivy, de scanners die de bevinding meldden | Limieten per repo en per organisatie |
| Scannen van containerimages | De centrale scanner van fremforge draait Trivy (geen installatiestap): trivy fs en trivy config bij elke PR, trivy image op elk image in je registry en elk image dat via de dependency proxy wordt opgehaald. Bevindingen staan onder Beveiliging › Bevindingen › Containerimages, gekoppeld aan het image en de commit. Een blokkeeractie voor images (none, warn, block_pull) geldt voor bevindingen op of boven de imagedrempel, standaard high | Trivy | Blokkeeractie, drempel en ignorebestanden |
| Licentiescanning | Licentiedetectie met Trivy bij elke PR, centraal uitgevoerd op de eigen scanners van fremforge. Deelt de licentie van elke afhankelijkheid in een van 7 ernstcategorieën van het SPDX-beleid in (permissief → wederkerig → beperkt → verboden); blokkeert de merge bij bevindingen op of boven de ingestelde drempel. Te zien onder Beveiliging › Bevindingen › Licenties | Trivy | Blokkeerniveau + SPDX-allowlist + negeren per bevinding |
| OpenSSF Scorecard | Wekelijkse score voor goede praktijken per repo. Geen workflow per repo: draait wekelijks op geïsoleerde platforminfrastructuur met een alleen-lezen bot per tenant met alleen-lezen toegang tot de repo; ongewijzigde repo’s worden overgeslagen, en alleen de score-JSON wordt bewaard. Toont tekortkomingen (branchbescherming, afdwingen van MFA, vastgepinde afhankelijkheden, dekking van code review) als kolom op de pagina Repositories | scorecard | Wekelijkse cadans + overslaan bij ongewijzigde HEAD |
| Kwaadaardige pakketten | OSV-advisories MAL-* vergeleken met de SBOM van de standaardbranch van elke repository en met de taalpakketten in elk gepubliceerd containerimage, na elke push en dagelijks. Altijd critical; pulls van images met een open bevinding worden geweigerd | osv-scanner + Trivy | Negeren met reden en einddatum |
| Pakketbeleid | Eén beleid per organisatie bepaalt welke pakketten uit de registry mogen worden gedownload: kwetsbaarheidsdrempels (ernst, CVSS, EPSS, fix beschikbaar), SPDX-licentielijsten, allow- en denylists met versiebereiken, en een minimumleeftijd. Uitzonderingen moeten door een tweede persoon worden goedgekeurd. Afdwingen weigert met 403, Schaduw (de standaard) legt vast; een bestand met bekende malware wordt in elke modus geweigerd. Containerimages: alleen schaduw | Syft + osv-scanner | Modus, regels, afwijkingen per type, uitzonderingen |
| Malwarescan bij uploads | ClamAV over Git-LFS-objecten, webbijlagen en pakketuploads. De dependency proxy scant opgehaalde pakketten en imagelagen met ClamAV als je organisatie dat inschakelt (standaard uit) | ClamAV met signaturen van SaneSecurity, YARA-Forge Core en Linux Malware Detect | Afwijken bij signaturen met bekende fout-positieven |
| Beveiligingspoort voor workflows | Een controle vóór ontvangst ontleedt elke gewijzigde workflow-YAML en weigert pushes die het volgende introduceren: docker://-verwijzingen naar registry’s die niet op de allowlist staan, gevaarlijke injectiepatronen met pull_request_target + script, niet-vastgepinde uses:-verwijzingen naar organisaties die niet worden gespiegeld | Eigen regels (door fremforge geschreven) | Afwijkende allowlist voor docker-URI’s per tenant |
| IP-allowlist | Eén lijst per organisatie met toegestane CIDR-bereiken voor elk HTTPS-oppervlak: webbeheer, fremforge-API, webinterface van de repository, REST API van Forgejo, Git over HTTPS, LFS en package registries. Git over SSH valt erbuiten. Voorvertoning die alleen audit doet, en een break-glass van 24 uur voor eigenaren | Eigen regels (door fremforge geschreven) | CIDR-lijst per tenant + schakelaar voor runners |
Herkomst in de supply chain
| Maatregel | Wat het doet | Tool | In te stellen |
|---|---|---|---|
| SBOM’s | SBOM’s in CycloneDX 1.6 en SPDX 2.3, centraal gegenereerd bij elke PR (beide formaten worden bij het inlezen geaccepteerd). Een release publiceren koppelt de SBOM die al voor die commit bestaat aan de release, zonder opnieuw te scannen, dus een release-SBOM heeft geen build nodig en verschijnt direct. Op te vragen onder Beveiliging › Componenten › SBOM’s | Syft | Bewaartermijn + release-refs |
| Ondertekende publicatieattestatie | Een DSSE-envelop met in-toto-/SLSA-herkomst, aan serverzijde door fremforge gegenereerd bij de Forgejo-webhooks release.published / package: geen workflowbestand in je repo’s. fremforge berekent de hash van elk bestand en ondertekent met een Ed25519-sleutel van het platform (keyid fremforge-slsa-builder-v1, builder https://frem.sh/runner-controller/v1), naast het bestand geüpload als <asset>.intoto.jsonl, plus een tweede, sleutelloze handtekening tegen de zelf gehoste Fulcio + RFC3161-TSA van fremforge als <asset>.sigstore.json. Geen publieke Sigstore, geen Rekor, geen transparantielog. Verifieer lokaal met de gepubliceerde trust root; zie SLSA-herkomst. Bewust niet als SLSA-niveau beschreven: het bevestigt wat er is GEPUBLICEERD, niet hoe het is gebouwd; de herleiding en wat ontbreekt staan in SLSA-herkomst | Eigen ondertekenaar aan serverzijde (Node stdlib crypto, Ed25519 DSSE) + zelf gehoste Sigstore | — |
| Images ondertekenen en verifiëren met cosign | De centrale pull-request-controle fremforge/cosign-verify verifieert de handtekeningen van op digest vastgepinde images, afkomstig van de eigen workflows van je organisatie via de Sigstore van fremforge of van de publieke Sigstore, en meldt wanneer controleren niet lukte. De controle is informatief. Het handtekeningbeleid voor images kan bij het pullen ook ondertekende images eisen, met de identiteiten die je vertrouwt. De CI van de klant ondertekent met haar eigen OIDC-identiteit: geen langlevende ondertekeningssleutels | cosign + zelf gehoste Fulcio | Handtekeningbeleid (schaduw of afdwingen) |
| Workflows vastpinnen | Een dagelijkse scan toont elke uses: in .forgejo/workflows/, .gitea/workflows/ en .github/workflows/ die naar een tag of branch wijst in plaats van naar een commit-SHA van 40 tekens, en elk docker://-stapimage waarnaar met een tag in plaats van een digest wordt verwezen; met één klik open je een pull request die de actions vastpint | Eigen ontwikkeling (door fremforge geschreven) | — |
| Mirror voor actions | uses: actions/checkout@v4 verwijst naar frem.sh/actions/checkout: een native Forgejo-pull-mirror van upstream, elke 8 uur gesynchroniseerd. Geen ophalen van github.com tijdens de build op het kritieke pad van de klant. Gespiegelde organisaties zijn onder meer actions, docker, pnpm, aws-actions, azure, google-github-actions, peter-evans, softprops, sonarsource, step-security, dorny | Native pull-mirror van Forgejo (actions alleen uit de EU opgehaald) | (Beheerd door de operator; transparant voor klanten) |
| Compatibiliteit met de Marketplace | De 20 meestgebruikte actions uit de GitHub Marketplace zijn gecontroleerd en werken ongewijzigd op fremforge: GITHUB_TOKEN, GITHUB_SHA, GITHUB_REF, GITHUB_API_URL enzovoort worden allemaal identiek gevuld | Forgejo Actions-runtime | — |
| Updates van afhankelijkheden | Versie-updates door Renovate voor elke aangemelde organisatie, elke nacht, plus Nu uitvoeren. Vindt verouderde afhankelijkheden, actionversies en basisimages van containers. Repository’s kunnen zich afmelden | Renovate + eigen orkestratie | Afmelden per repo |
Isolatie tijdens uitvoering (gehoste CI-runners)
| Maatregel | Wat het doet | Tool | In te stellen |
|---|---|---|---|
| Sandbox van de gehoste runners | Eén commit = één eigen VM = één kernel. Het platform start per commit een nieuwe, kortlevende ECS-VM, registreert forgejo-runner --ephemeral zodat elke registratie door één taak wordt verbruikt, en vernietigt de VM zodra de jobs van die commit klaar zijn. Twee klanten, en twee commits, delen nooit een kernel; jobs van dezelfde commit kunnen de VM delen, dus behandel een pipeline als één vertrouwensdomein. Elke VM heeft een eigen ENI + Security Group (netwerkisolatie) en geen IAM-agency (geen toegang tot de platform-API van binnenuit). Een vangnet buiten de normale route ruimt verweesde VM’s op waarvan de runner zich nooit registreerde of nooit klaar kwam. Hetzelfde model als de gehoste runners van GitHub en GitLab | T Cloud Public ECS + ENI per VM + forgejo-runner (act_runner) | VM-flavor (plafond voor CPU/RAM), limiet voor gelijktijdigheid per tenant |
| Limiet voor gelijktijdige jobs per tenant | Gegarandeerd 2 gelijktijdige jobs per gebruiker (minimaal 10, maximaal 60), en tot 60 als er capaciteit vrij is (gehost bij GitHub: Free 20, Pro 40, Team 60). Hoger op aanvraag | Afdwinging op platformniveau | Overschrijving per tenant |
| Pool van runnerminuten | seat_cap × 1000 min/month. Tenants in een proefperiode hebben een vaste pool van 500 min; zie Facturatie. Tenants met ingeschakelde overschrijding blijven draaien; bij anderen wordt het toewijzen geweigerd | Controle vóór toewijzing tegen gemeten gebruik | Overschrijving van de limiet per tenant |
| Egressproxy | Klantworkflows bereiken het publieke internet via de egressproxy voor runners (weigert alleen SSRF, laat CGNAT toe: net als de gehoste runners van GitHub) | Eigen proxy (door fremforge geschreven, op basis van Hono) | — |
| Looptijd van een job | Standaard 60 min per job, harde bovengrens van 360 min. Een aparte opruimer verwijdert verweesde VM’s, met een absolute grens van 6 u 10 min | Opruimer buiten de normale route | timeout-minutes per stap |
Secrets en toegangsbeheer
| Maatregel | Wat het doet | Tool | In te stellen |
|---|---|---|---|
| Deploysecrets | Versleutelde secrets per omgeving. In rust AES-256-GCM met een MASTER_ENCRYPTION_KEY in DEW KMS. Alleen ontsleuteld binnen de runner-VM die ze nodig heeft. Sleutelrotatie ondersteunt een venster met twee sleutels (huidige + vorige) voor rotatie zonder onderbreking | Eigen ontwikkeling (Node crypto) + afbakening per omgeving + DEW KMS | Per omgeving / per repo / per organisatie |
| RBAC en afbakening per tenant | De native RBAC van Forgejo + de tenantlaag van fremforge; alle endpoints van de platform-API dwingen de tenant_id uit de JWT af, geen gegevenslekken tussen tenants. Organisatiebeheer → Leden | Forgejo + middleware van de fremforge-API | Granulariteit per team |
| OIDC single sign-on | De voorkeursroute voor een IdP. Koppel Okta, Entra, ADFS, Google Workspace, Authentik, Keycloak, Auth0 (elke OpenID Connect-provider) voor inkomende federatie. Domeinverificatie, just-in-time aanmaken van gebruikers, groepen koppelen aan teams. In te stellen onder Organisatiebeheer → SSO → Auth-bronnen | Native OIDC-auth-bron van Forgejo | IdP-configuratie per tenant |
| SAML 2.0 single sign-on | Nog niet beschikbaar. Koppel Entra ID of ADFS in plaats daarvan via OIDC | — | — |
| Gebruikers aanmaken met SCIM 2.0 | Push gebruikers vanuit je IdP naar je fremforge-organisatie via SCIM 2.0. Authenticatie met een bearer-token per tenant, een rotatievenster met twee tokens, idempotente CRUD op Forgejo-gebruikers. Werkt met elke IdP die SCIM ondersteunt | Eigen API-endpoints onder /<slug>/scim/v2/* | SCIM-token per tenant |
| SSH-CA | SSH-toegang tot git gebruikt een door een CA ondertekend certificaat, geen losse sleutelvingerafdrukken. Certificaat per gebruiker met TTL; in te trekken via de beheerinterface van de organisatie | OpenSSH-CA + certificaatuitgifte beheerd door fremforge | TTL + intrekken per gebruiker |
| Authenticatiebeleid | Bundel schakelaars voor afdwinging per organisatie: sleutels in hardware (alleen WebAuthn, geen TOTP), maximale levensduur van PAT’s (onder de platformstandaard van 90 dagen), ondertekende commits verplicht (niet-ondertekende pushes blokkeren), SSH uitgeschakeld (alleen HTTPS), 2FA verplicht, alleen aanmelden via SSO (lokale Forgejo-gebruikersnaam/-wachtwoord blokkeren). Spiegelt het oppervlak voor enterprisebeleid van GHEC. Elke schakelaar schrijft bij een wijziging een auditgebeurtenis | Gedragen patches op Forgejo + hooks voor afdwinging van fremforge | Beleidsbundel per tenant |
| Allowlist voor e-maildomeinen | Allowlist per organisatie met patronen voor e-mailhostnamen. Is die ingeschakeld, dan kunnen leden alleen adressen in de stijl van @acme.com toevoegen die overeenkomen met de ingestelde patronen. Sluit bij forensisch onderzoek de route “commits claimen als attacker@arbitrary-domain.com” af. Bestaande e-mailadressen worden niet automatisch verwijderd; aanmelden via OIDC is uitgezonderd (de IdP staat ervoor in). Patronen ondersteunen exacte vormen en *.subdomain | Eigen regels + Bunny-edge-intercept op /user/settings/account/email | Patronen per tenant + vlag voor afdwingen |
| Workflowsecrets | Actions-secrets op organisatie- en repositoryniveau, in elke CI-job als omgevingsvariabelen geïnjecteerd. Forgejo slaat ze versleuteld op; het fremforge-beheer stuurt CRUD door met auditgebeurtenissen (de waarde wordt nooit in de fremforge-database of de auditlog opgeslagen). Een secret overschrijven met hetzelfde formulier is de rotatieroute | Native secrets van Forgejo + beheerproxy van fremforge | Per organisatie / per repo / per omgeving |
| Workflow-OIDC voor cloudauthenticatie | Runner-VM’s krijgen per job een nieuwe OIDC-JWT met aud=fremforge. Trust policies in de cloud van de klant gebruiken die om kortlevende inloggegevens in te ruilen (geen langlevende AWS-sleutels, JSON-bestanden van GCP-serviceaccounts of Azure-clientsecrets in workflowsecrets) | Eigen OIDC-issuer, ondertekend met de runner-OIDC-sleutel van fremforge (rotatie elke 180 d; handmatig, automatische rotatie nog niet uitgerold) | — |
| Authenticatie voor agents | Drie patronen aan de kant van de IdP voor niet-menselijke aanroepers: (1) Directe JWT-bearer van de IdP van de klant: gebruik een JWT van een Entra-workload-identity, een Okta-serviceaccount of een Google-serviceaccount rechtstreeks als Authorization: Bearer op elk /api/v1/*-endpoint; (2) RFC 8693-tokenuitwisseling + OBO: POST /_app/api/v1/auth/token-exchange accepteert subject_token en optioneel actor_token; de persoon is de actor in de audit en de agent een detail van de rij (fields.agent), zonder eigen agentidentiteit; (3) RFC 6749 client_credentials: POST /_app/api/v1/oauth/token voor apps zonder IdP. Audiencebinding per tenant (https://frem.sh/<slug>), claimcontroles per bron (tid/hd), een UNIQUE op databaseniveau die voorkomt dat twee tenants dezelfde issuer claimen voor directe bearer | Eigen ontwikkeling (auth_sources + oauth_clients + pijplijn voor tokenuitwisseling met jose) | Opt-in per bron; scopelimiet per client |
DevOps-observeerbaarheid
| Maatregel | Wat het doet | Tool | In te stellen |
|---|---|---|---|
| DORA-dashboard | De vier standaard-DORA-metrieken (Deployment frequency, Lead time for changes, Change-failure rate, MTTR), berekend over een voortschrijdend venster van 30 dagen uit de deploygebeurtenissen die voor je tenant zijn vastgelegd. Ingelezen via de Forgejo-webhook release plus een handmatige POST /_app/api/v1/dora/deployments voor workflows die geen releases taggen. Te zien onder Organisatiebeheer → DORA | Eigen ontwikkeling (door fremforge geschreven, op de tenantdatabase) | Voortschrijdend venster + handmatig inlezen |
| Beveiligingsoverzicht | Beveiliging › Overzicht: open bevindingen per scanner, met links naar elk tabblad, en de checklist voor de inrichting | Eigen aggregator | — |
| Paneel runnergebruik | Aantal runnerminuten per maand + tabel met de duur per job onder Organisatiebeheer → Bouwen en uitrollen → CI-gebruik. Voedt de factuurregels via de tabel metering_events | Eigen ontwikkeling (aggregatie van runner_jobs) | — |
Houding ten opzichte van AI
| Maatregel | Wat het doet | Tool | In te stellen |
|---|---|---|---|
| Eigen AI: toegang voor agents | fremforge is AI-agnostisch. Claude Code / Cursor / Windsurf / Codex CLI / Aider van de klant werken met hetzelfde Git- en REST-oppervlak als mensen (OpenAPI-specificatie, machineleesbaar). Samen met Authenticatie voor agents (directe JWT-bearer van de IdP, RFC 8693-tokenuitwisseling + OBO, RFC 6749 client_credentials) authenticeren agents zich als volwaardige principals, zonder een PAT van een mens te lenen. Geen AI-product dat aan de forge vastzit, geen agentfuncties die een bepaalde leverancier vereisen | Git + REST volgens de standaarden | Beheerd door de klant |
| AI-integraties (BYOK) | Organisatiebeheer → AI-integraties: registreer de sleutel van je eigen AI-leverancier (Anthropic, OpenAI, Mistral en andere). Maakt mogelijk: AI-review van PR’s (stelt reviewcommentaar op de diff op), AI-uitleg bij Renovate (samenvattingen van changelogs in begrijpelijke taal bij PR’s die afhankelijkheden ophogen), en de gateway /_app/api/v1/orgs/<slug>/ai/complete voor LLM-aanroepen vanuit workflows | Eigen gateway (door fremforge geschreven) | Leverancier + sleutel per organisatie |
Compliance en audit
| Maatregel | Wat het doet | Tool | In te stellen |
|---|---|---|---|
| Auditlog | Elke handeling die de status wijzigt (push, rolwijziging, secret aangemaakt, runneroverschrijving, factuurwijziging) wordt vastgelegd met actor + tijdstip + voor/na. Bewaring in twee lagen: een doorzoekbare hete laag (90 / 180 / 365 / 730 dagen, per tenant in te stellen) + een archief met cryptografische keten van 3 jaar in OBS WORM van T Cloud Public | Eigen alleen-toevoegen-opslag (tabel audit_events) | Bewaartermijn per tenant |
| Auditketen | Auditlog met hashketen + lineaire hashketen die elke 2 min in OBS WORM van T Cloud Public wordt verankerd. Een verificatie-cron controleert de integriteit van de keten elk uur + een volledige doorloop elke 30 min. Klanten kunnen verifiëren dat “er achteraf geen gebeurtenis is verwijderd of gewijzigd” | Eigen ontwikkeling (door fremforge geschreven, afgestemd op BSI C5) | — |
| SIEM-streaming | Realtime stroom van auditgebeurtenissen naar een endpoint van de klant (Splunk HEC, Sentinel, ELK, OpenSearch, generieke HTTPS-webhook). Relay in de EU, er verlaten geen gegevens de regio eu-de. De gezondheid van het endpoint per tenant is zichtbaar voor de operator en de tenantbeheerder | Eigen doorstuurder + tabel siem_endpoints | Endpointconfiguratie per klant |
| Gegevensexport (overdraagbaarheid onder de AVG) | Selfservice-export van tenantgegevens: repo’s (als git-bundles), issues, pull requests en releases (NDJSON), pakketinventaris, scanbevindingen, status van het pakketbeleid, ondertekende attestaties, SBOM’s van repository’s en containerimages, auditgebeurtenissen (NDJSON), met een DSSE-ondertekend manifest. Gedownload via een ondertekende OBS-URL die 7 dagen geldig is. Vereist voor overdraagbaarheid volgens art. 20 AVG + offboarding | Eigen exporteur | Op elk moment te starten |
| Levenscyclusbeleid | Automatisering van bewaring en verwijdering per tenant: archiveren van verouderde repo’s, gedrag bij de limiet van runnerminuten, bewaartermijn van de auditlog, respijtperiode bij opschorting van een tenant, SLA voor het wissen van gegevens aan het einde van het contract | Eigen ontwikkeling (tabel tenant_lifecycle) | Beleid per tenant |
| Repo-mirroring (inkomende migraties) | Spiegel repo’s van klanten van GitHub, GitLab, Bitbucket of elke andere Git-host naar fremforge, met authenticatie via inloggegevens + periodieke synchronisatie. Gebruikt tijdens gefaseerde migraties; de mirror kan weg zodra de overstap klaar is | Native pull-mirror van Forgejo + beheerproxy van fremforge | Bron + interval per repo |
| Meldingsvoorkeuren | Routering van gebeurtenissen voor de hele organisatie: welke auditgebeurtenissen mail/webhook/SIEM opleveren, welke rollen bij Critical-bevindingen worden opgeroepen, escalatiecontacten bij factuurgebeurtenissen | Eigen ontwikkeling (tabel notification_preferences) | Routering per tenant |
| Melden van kwetsbaarheden | security.txt gepubliceerd, security@frem.sh met een SLA van 24 u voor ontvangstbevestiging, publieke bedankpagina, beleid zonder rechtszaken bij onderzoek te goeder trouw | — | — |
| Fix-by-SLA | SLA-label per organisatie naast elke open bevinding. Standaarddeadlines (Critical 7 d / High 30 d / Medium 90 d / Low geen), per tenant aan te scherpen. Verankerd in NIST SP 800-40r4 | Eigen ontwikkeling (door fremforge geschreven) | Aanscherping per tenant |
Wat we uitdrukkelijk niet doen
| Wat we niet doen | Waarom |
|---|---|
| Geen Microsoft-voetafdruk (geen GitHub, geen Azure AD, geen Office 365, geen Defender, geen GHAS CodeQL) | Europese soevereiniteit + Schrems II; zie trust |
| Geen Sigstore / Fulcio / Rekor die in de VS wordt gehost in het verificatiepad | Idem. fremforge draait een eigen Fulcio + TSA op T Cloud Public eu-de, met de root-CA in DEW KMS (HSM volgens FIPS 140-2 Level 3, Duitsland). Geen publieke Sigstore, geen Rekor / transparantielog: bewust alleen tijdstempels van de TSA |
| Geen afhankelijkheid van AWS, GCP of een andere door de VS gecontroleerde cloud op het kritieke pad van het platform | Idem |
| Geen lettertypen van derden via een CDN (Google Fonts enz.) | Zelf gehost op www.frem.sh/fonts/ via de Europese edge van Bunny |
| Geen propriëtaire scanners van derden: elke scanner is open source of van fremforge zelf, en elke regelset, advisorydatabase en bron van malwaresignaturen erachter staat met naam en licentie in de stuklijst | Het audittraject van de klant vereist transparantie met toolnamen |
| Geen langlevende inloggegevens van serviceaccounts in klantworkflows | Alleen OIDC voor cloudauthenticatie; langlevende sleutels zijn een optionele, verouderde route |
Transparantie over tools: de volledige stuklijst
Heb je dit nodig voor een RFP, een BSI C5-audit of een interne beveiligingsreview, dan staat de gezaghebbende lijst, met versies, bronnen en de platformcomponenten, op docs.frem.sh/security/bill-of-materials/. De tabel hieronder is een beknopte selectie.
| Laag | Tool | Waar gebruikt | Licentie |
|---|---|---|---|
| Kern van versiebeheer | Forgejo v15 | Repohosting, code review, runnerprotocol van Actions | GPLv3 |
| CI-runnerbinary | forgejo-runner (act_runner) v13.2.0 | Kortlevende ECS-VM per job | MIT |
| Secretscanning | Gitleaks v8 | Pre-receive-hook | MIT |
| SAST | OpenGrep v1.21 | Analyse bij een PR | LGPLv2.1 |
| CVE-scanning van containers | Trivy | CI van de klant + ingebakken in het runner-image | Apache 2.0 |
| Scannen van afhankelijkheden | osv-scanner | Analyse bij een PR | Apache 2.0 |
| SBOM-generatie | Syft | Workflow bij releasetags | Apache 2.0 |
| Images ondertekenen + verifiëren | cosign | Controle bij het pullen, en de informatieve pull-request-controle fremforge/cosign-verify | Apache 2.0 |
| Sleutelloos code ondertekenen: CA | Fulcio v1.8.5 (Helm-chart 2.9.0) | Zelf gehost op T Cloud Public eu-de op sign.frem.sh | Apache 2.0 |
| Sleutelloos code ondertekenen: TSA | Sigstore TSA (timestamp authority) | Zelf gehost op T Cloud Public eu-de op tsa.frem.sh | Apache 2.0 |
| gitsign aan klantzijde | gitsign | Git-client van de klant; commits ondertekenen gebonden aan OIDC | Apache 2.0 |
| Ophogen van afhankelijkheden | Renovate | Gehoste bot, cron elke 15 min, afmelden per repo | AGPLv3 |
| Images bouwen (rootless) | kaniko | Containerbuild in klantworkflows | Apache 2.0 |
| Malwarescanning | ClamAV | Scan vóór ontvangst + LFS-upload | GPLv2 |
| Score voor goede praktijken van OpenSSF | scorecard | Wekelijks per repo | Apache 2.0 |
| CDN + WAF van het platform | Bunny CDN | Edge in de EU, geen Cloudflare/Fastly | (Leverancier: gevestigd in de EU, geen subverwerker in de VS) |
| Cloudplatform | T Cloud Public (Deutsche Telekom) | Rekenkracht, opslag, netwerk, database | (Leverancier: uitsluitend regio eu-de) |
| E-mail (transactioneel) | Lettermint (NL) | Authenticatiemails, facturen, meldingen | (Leverancier: EU) |
| Mailbox | mailbox.org | Operationele mailbox | (Leverancier: EU) |
| Betalingen | Mollie (NL) | Facturatie | (Leverancier: EU) |
| Boekhouding | Dinero (DK) | Uitgifte van facturen | (Leverancier: EU) |
Elke leverancier op deze lijst is contractueel in de EU gevestigd, zonder subverwerker in de VS in het gegevenspad. Zie de trustpagina voor de volledige verwerkersovereenkomst en de keten van subverwerkers.
Roadmap (op basis van vraag)
| Functie | Status | Aanleiding |
|---|---|---|
Eigen KMS voor MASTER_ENCRYPTION_KEY (een door de klant geleverde DEW-CMK in het eigen T Cloud Public-account van de klant) | Ontworpen | Eerste klant tekent |
| SLSA-buildherkomst (vastleggen van de digest van de output tijdens de build, zodat de ondertekende verklaring naar een echte buildrun verwijst: de voorwaarde om enig SLSA-niveau te claimen; aan beide clausules van Build L3 wordt al voldaan) | Afgebakend | Vraag van klanten |
| MCP-ondertekening + verificatie voor de supply chain van AI-agents | Ontworpen | Industriestandaard wordt definitief |