OpenSSF Scorecard
OpenSSF Scorecard er et branchestandardsæt af automatiske tjek af sikkerhedsniveauet i et open source-repo. fremforge kører det mod alle repoer i din organisation hver uge og viser resultatet som en kolonne på /<org>/_admin/repos-overview.
Tjekkene
Scorecards tjek dækker build-sikkerhed, håndtering af sårbarheder og projektets modenhed. De vigtigste:
- Branch-Protection: er standardbranchen beskyttet med påkrævede reviews og statustjek?
- Code-Review: hvor stor en andel af de seneste merges havde et kodereview?
- Pinned-Dependencies: er CI-afhængigheder fastlåst til bestemte versioner eller SHA’er?
- Token-Permissions: bruger CI tokens med mindst mulige rettigheder?
- Signed-Releases: er release-artefakter signeret kryptografisk?
- SAST: kører projektet en statisk analyse i CI?
- Vulnerabilities: indeholder afhængighedstræet kendte CVE’er?
- Maintained: har repoet nylige commits eller aktivitet i issues?
Hvert tjek giver en score fra 0 til 10. Den samlede score er det vægtede gennemsnit. En perfekt 10 er sjælden; “god” ligger i intervallet 7 til 9.
Sådan kører fremforge det
Scorecard er ikke et CI-workflow pr. repo. Det kører ugentligt på isoleret platformsinfrastruktur: der lander ingen workflowfil i dine repoer, og du bruger ingen runner-minutter på det. Sådan foregår det:
- En gang om ugen sætter fremforge hver aktiv tenant i kø til en scanning. Tenants med en kørsel i gang springes over.
- En scanning drives af en skrivebeskyttet bot pr. tenant, der kan læse dine repoer, men ikke skrive til dem.
- Scanningen lister tenantens repoer og sammenligner hvert repos aktuelle HEAD på standardbranchen med det HEAD, der blev registreret ved sidste scanning. Repoer, hvis HEAD ikke har flyttet sig, springes over: scoren kan ikke have ændret sig, så der er intet at beregne igen.
- Hvert ændret repo kloner scanningen overfladisk (shallow clone) til en midlertidig arbejdsmappe på isoleret platformsinfrastruktur, kører binæren
scorecard --localmod den lokale checkout og gemmer den resulterende score-JSON (herunder den nye HEAD-reference). - Kørsler, der er gået i stå, fordi en worker er gået ned, sættes tilbage til fejlet, så tenanten sættes i kø igen ved næste ugentlige kørsel.
fremforge gemmer resultatet pr. (tenant, repo) og viser den samlede score som en kolonne på siden Repos (/<org>/_admin/repos-overview). Klik på en række for at se detaljerne pr. tjek.
Indlæsnings-API’et /scorecard/results findes stadig til push fra eksterne kilder eller workflows, men det er ikke længere standardvejen: det er den ugentlige scanning på platformen ovenfor.
Sådan læser du scoren
Scoren er et pejlemærke, ikke en compliance-port. Et repo med scoren 6,5, der er et vedligeholdt bibliotek med branch-beskyttelse og SAST, er i langt bedre form end et repo med scoren 8, der bare tilfældigvis scorer godt på kosmetiske tjek.
Vi anbefaler ikke at koble “Scorecard-score < X” til en regel, der blokerer merges. Det rigtige sted for den port er:
- Branch-Protection fejler → ret det på
/<org>/_admin/security/policies/repository-rules#org-baseline(allerede et separat signal). - SAST fejler → tjek
/<org>/_admin/code-security(allerede et separat signal).
Brug Scorecard til at se på forskellen mellem lignende repoer: hvis acme/api scorer 8,5 og acme/web scorer 6,5, hvor ligger forskellen så, og er den tilsigtet?
Hvor scanningen kører: om dataplacering
Selve scorecard-binæren er open source (Apache-2.0). Scanningen kører på isoleret fremforge-platformsinfrastruktur bag et netværkshegn (T Cloud Public, eu-de), ikke i dine CI-runners. Den drives af en skrivebeskyttet bot pr. tenant, der kan læse dine repoer, men ikke skrive til dem.
Hvad det betyder for dine data:
- Klonen er midlertidig. Scanningen kloner hvert ændret repo overfladisk til en midlertidig arbejdsmappe, kører
scorecard --localmod den lokale checkout og sletter arbejdsmappen, når kørslen er færdig. Kildekoden gemmes aldrig i varigt lager og forlader aldrig platformen til det offentlige internet: botten henter fra din tenants egen Forgejo over det interne netværk, og scorecard-binæren kører--local(ingen udgående kald til API’er i GitHub-stil for de tjek, vi kører). - Kun JSON med tjekresultaterne gemmes. Det, vi gemmer pr.
(tenant, repo), er scorerne pr. tjek plus den scannede HEAD-reference: ingen kildekode, intet filindhold, ingen uddrag af commits. - Det bliver i
eu-de. Både kloningen og scanningen sker på den platform, der ligger i EU, i tråd med fremforges linje om ingen amerikanske underdatabehandlere.
Det er en ændring i forhold til den tidligere model, hvor scorecard kørte som et workflow i dine egne CI-runners. Scanningen kører nu på fremforges infrastruktur; egenskaberne ovenfor med dataplacering og en skrivebeskyttet bot er den måde, vi holder den grænse stram på.
Se også
- Branch-beskyttelse: styrer scoren for Branch-Protection.
- SBOM’er: styrer scorerne for Dependencies og Vulnerabilities.