Gå til hovedindhold

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:

  1. En gang om ugen sætter fremforge hver aktiv tenant i kø til en scanning. Tenants med en kørsel i gang springes over.
  2. En scanning drives af en skrivebeskyttet bot pr. tenant, der kan læse dine repoer, men ikke skrive til dem.
  3. 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.
  4. Hvert ændret repo kloner scanningen overfladisk (shallow clone) til en midlertidig arbejdsmappe på isoleret platformsinfrastruktur, kører binæren scorecard --local mod den lokale checkout og gemmer den resulterende score-JSON (herunder den nye HEAD-reference).
  5. 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 --local mod 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å