Gå til hovedindhold

Sikkerhedsmeddelelser for dine repositorier

Når nogen finder en svaghed i software, du vedligeholder, retter du den først og fortæller om den bagefter. En sikkerhedsmeddelelse (security advisory) er måden, du fortæller det på: en kort, struktureret beskrivelse af, hvad der er berørt, hvor alvorligt det er, og hvilken version der retter det. Scannere læser meddelelser for at advare alle, der afhænger af din pakke.

fremforge samler en organisations meddelelser under Sikkerhed › Rapporter › Sikkerhedsmeddelelser og i API’et på /_app/api/v1/orgs/{org}/security-advisories.

Udkast i fortrolighed

Ny meddelelse åbner et udkast. Et udkast angiver:

  • det repository, det handler om;
  • en titel på én linje og en beskrivelse: hvad svagheden er, hvem der er berørt, konsekvensen, og hvordan den rettes eller omgås;
  • de berørte pakker, hver med økosystem, pakkenavn, sårbare versioner og den første rettede version;
  • alvorligheden som en CVSS-vektor eller et niveau (kritisk, høj, middel, lav);
  • svaghederne (CWE-id’er), et valgfrit CVE-id og referencer.

Et udkast er kun synligt for:

Titel, beskrivelse, referencer og kommentarer gemmes krypteret. fremforges eget driftsværktøj og AI-agenter ser hverken teksten eller, hvem der skrev den.

De personer, der kan se et udkast, kan drøfte det i fortrolige kommentarer. De forbliver private, også efter at meddelelsen er offentliggjort.

Sårbare versioner

Skriv de sårbare versioner som én eller to betingelser, i samme form som GitHub bruger:

Du skriverBetyder
< 1.2.3alle versioner før 1.2.3
>= 1.0.0, < 1.2.3fra 1.0.0 op til, men ikke med, 1.2.3
<= 2.0.1alle versioner til og med 2.0.1
= 3.1.0kun 3.1.0

> afvises: OSV-formatet har ingen eksklusiv nedre grænse, så brug >=. Med < X er den første rettede version X. Lad Rettet version stå tom, eller brug <= for den sidste berørte version.

Økosystemer: npm, PyPI, Maven (groupId:artifactId), Go (modulstien), crates.io, RubyGems, NuGet, Packagist, Pub, Hex, GitHub Actions (owner/repository), SwiftURL og CRAN.

Alvorlighed

En CVSS 3.1-basisvektor sætter alvorligheden ud fra sin basisscore, som fremforge beregner. En CVSS 4.0-basisvektor tjekkes og gemmes, som den er. Vælg så selv alvorligheden: CVSS 4.0-scoren beregnes ikke.

Offentliggør

Offentliggør meddelelsen kræver en alvorlighed og mindst én berørt pakke.

  • For et offentligt repository (ikke privat, i en organisation med offentlig synlighed) bliver meddelelsen offentlig med det samme: en side på https://frem.sh/_app/advisories/<id> og en OSV-post (se nedenfor). Om repositoriet er offentligt, tjekkes igen ved hver offentlig læsning. Hvis du senere gør repositoriet privat, holder dets meddelelser op med at blive leveret ved næste læsning.
  • For et privat repository forbliver meddelelsen kun synlig inden for din organisation. Den bliver ikke offentlig, hvis du senere åbner repositoriet; offentliggør i så fald en ny.

Udgiv rettelsen, før du offentliggør: meddelelsen fortæller alle, hvor svagheden er.

Udviklingen af rettelsen foregår indtil videre uden for fremforge. En meddelelse indeholder tekst; fremforge har ingen midlertidig privat fork til den. Et privat repository i din organisation ville kunne læses af alle teams med adgang til alle repositorier, hvilket som standard omfatter Members og Viewers, så det tilbydes ikke. Udvikl rettelsen, som dit projekt håndterer upublicerede sikkerhedsrettelser, og offentliggør meddelelsen, når den rettede version er udgivet.

Hver meddelelse har et id på formen FFSA-xxxx-xxxx-xxxx, som fastlægges, når udkastet oprettes.

Repository-administratorer

Et repositorys administratorer håndterer meddelelser og private rapporter for det repository uden at være ejere af organisationen, sådan som GitHub lader repository-administratorer gøre det. De finder de rapporter, der er sendt til de repositorier, de administrerer, under Rapporter til repositories, du administrerer på /_app/security-reports, kan acceptere eller afvise dem og kan læse og kommentere de repositoriers udkast. Om nogen administrerer et repository, spørges frem.sh om ved hver request, så en ændring af rettigheder gælder med det samme. En ejer af organisationen tæller som administrator af alle repositorier i organisationen.

Samarbejdspartnere

Invitér personer til et udkast eller en offentliggjort meddelelse med deres frem.sh-login, for eksempel en ekstern forsker eller en vedligeholder fra et andet projekt. De behøver ikke være medlemmer af din organisation. En inviteret person læser meddelelsen og dens fortrolige kommentarer og tilføjer kommentarer fra sin egen side på /_app/security-reports. Vedkommende kan ikke ændre eller offentliggøre den. Når du fjerner en person, ophører adgangen med det samme. Op til 20 personer kan inviteres til én meddelelse.

Privat rapportering af sårbarheder

Med privat rapportering af sårbarheder slået til kan alle, der er logget ind på frem.sh og kan læse et repository, rapportere en svaghed i det privat til dig, også personer uden for din organisation. Uden den må en finder gætte en e-mailadresse eller oprette et offentligt issue.

Den er slået fra, indtil du slår den til. Ejere sætter en standard for hele organisationen under Sikkerhed › Rapporter › Sikkerhedsmeddelelser › Indstillinger og kan slå den til eller fra for enkelte repositorier samme sted; en indstilling på et repository tilsidesætter standarden.

Hvad en rapportør sender

Rapportformularen ligger på https://frem.sh/_app/security-reports/new?repo=<org>/<repository>. Link til den fra dit repositorys SECURITY.md. En rapport har en titel, en beskrivelse, de berørte versioner, hvordan svagheden blev fundet og et valgfrit proof of concept. Den gemmes krypteret, og kun organisationens ejere, repositoriets administratorer og rapportøren ser den. Teksten står aldrig i en e-mail eller i revisionsloggen; revisionsloggen navngiver rapporter med id.

For at holde kanalen brugbar begrænser fremforge rapporter:

  • 3 pr. person til ét repository og 10 pr. person i alt inden for 24 timer;
  • ingen fra en konto, der er mindre end 24 timer gammel;
  • 5 i minuttet fra én IP-adresse.

En request, der ville bryde en grænse, afvises, og intet gemmes.

Afgørelse af en rapport

Organisationens ejere får en e-mail, når en rapport kommer ind, og finder den under Sikkerhed › Rapporter › Sikkerhedsmeddelelser › Private rapporter. Repositoriets administratorer finder den på deres egen side på /_app/security-reports.

  • Accepter laver et udkast til en meddelelse ud fra rapporten, inviterer rapportøren til det som samarbejdspartner og beder vedkommende acceptere en reporter-kreditering.
  • Acceptér ikke lukker rapporten med en begrundelse: ikke en sårbarhed, dublet, uden for scope, spam eller andet.

Uanset hvad får rapportøren besked på e-mail. En rapportør kan trække en rapport tilbage, indtil den er afgjort. En afvist rapport slettes 2 år efter, at den blev afvist. Accepterede rapporter og deres meddelelser bliver i din organisation.

Scanning af afhængigheder

En offentliggjort meddelelse matches mod din organisations oversigt over afhængigheder hver dag og lige efter, at du offentliggør den: et repository, der afhænger af en berørt version, får et fund under Sikkerhed › Fund › Afhængigheder med meddelelsens FFSA-id, ligesom enhver anden sårbarhed. Trækkes meddelelsen tilbage, fjernes de fund, den gav anledning til.

For andre organisationer matches en meddelelse kun, når den er i fremforges platform-feed. Det kræver, tjekket igen hver dag:

  • at repositoriet er offentligt; og
  • at din organisation beviseligt ejer alle berørte pakker: en pakke fra din organisation i frem.sh-pakkeregistryet eller et Go-modul under frem.sh/<your organisation>/; ellers at fremforge har gennemgået meddelelsen og godkendt den.

Ejerskab afgøres ud fra frem.sh’ egne registreringer, aldrig ud fra pakkenavnet: et npm-scope eller en modulsti, der blot ligner din organisations navn, tæller ikke. Hvis du mister pakken eller gør repositoriet privat, forlader meddelelsen platform-feedet ved næste daglige kørsel. Platform-feedet leveres på /_app/api/v1/advisories?scope=platform, og fremforge lægger det ind i de OSV-databaser, dens scannere læser.

Træk tilbage, luk, slet

  • En offentliggjort meddelelse trækkes tilbage, den slettes aldrig. Den bliver i feedet med withdrawn sat, så scannere får at vide, at den ikke længere gælder.
  • Et udkast, du ikke offentliggør, kan lukkes (og genåbnes) eller slettes sammen med sine kommentarer.

Krediteringer

Kreditér de personer, der fandt, rapporterede eller rettede svagheden, med deres frem.sh-login og en OSV-krediteringstype. En kreditering vises offentligt og eksporteres først, når den krediterede person har accepteret den på sin egen side på /_app/security-reports. Det kræver ingen accept at kreditere dig selv.

Eksport: OSV og CSAF

Alle meddelelser, også udkast, kan downloades som:

  • OSV 1.6: det format, scannere af afhængigheder læser (osv-scanner, Trivy og fremforges egen scanning af afhængigheder);
  • CSAF 2.0: et csaf_security_advisory-dokument, det maskinlæsbare meddelelsesformat, som vejledningen under EU’s Cyber Resilience Act og BSI forventer af producenter. Et udkast er TLP AMBER med status draft, en offentliggjort meddelelse TLP WHITE med status final.

Hver download registreres i revisionsloggen (security.advisory.exported), fordi eksporten af et udkast beskriver en svaghed, der endnu ikke er rettet.

Det offentlige OSV-feed

Offentliggjorte meddelelser for offentlige repositorier leveres uden autentificering, ældste ændring først og højst 100 pr. side:

# The first page
curl -s 'https://frem.sh/_app/api/v1/advisories?limit=100'

# The next page: pass the `next` value of the previous answer as `since`
curl -s 'https://frem.sh/_app/api/v1/advisories?since=2026-10-25T00:00:00Z'

# One advisory
curl -s https://frem.sh/_app/api/v1/advisories/FFSA-xxxx-xxxx-xxxx

Hver post følger OSV-skemaet, med CVE-id’et (hvis der er et) som alias og database_specific.source sat til fremforge. Om repositoriet er offentligt, tjekkes ved hver request, så en meddelelse for et repository, der er gjort privat, ikke leveres ved næste læsning. De offentlige læsninger er begrænset til 60 requests i minuttet pr. klientadresse (429 derover).

Anmodning om et CVE-id

fremforge er ikke en CVE Numbering Authority og anmoder ikke om CVE-id’er for dig. Under Anmod om et CVE-id giver en meddelelse dig sit indhold som tekst til MITRE’s CVE-anmodningsformular eller til den CNA, der dækker dit projekt, hvis der er en. Send den selv, og indtast derefter det CVE-id, du modtager, i meddelelsen. API’et har den samme tekst på /orgs/{org}/security-advisories/{id}/cve-request.

EU’s Cyber Resilience Act

CRA forventer, at en producent håndterer sårbarheder i sine produkter: retter dem og offentliggør oplysninger om de rettede. Meddelelser med CSAF-eksport understøtter det. De gør dig ikke compliant i sig selv, og fremforge rapporterer ikke noget til ENISA eller et nationalt CSIRT for dig. Rapportering efter CRA artikel 14 forbliver dit ansvar.

Endnu ikke tilgængeligt

  • En midlertidig privat fork at udvikle rettelsen i: tilbydes ikke, se Offentliggør.

API

Metode og stiScopeGør
GET /orgs/{org}/security-advisoriesfindings:read / advisories:readliste (?state=, ?repo=)
POST /orgs/{org}/security-advisoriespolicy:writeopret et udkast
GET, PUT, DELETE /orgs/{org}/security-advisories/{id}findings:read eller advisories:read / policy:writelæs, erstat, slet et udkast eller en lukket meddelelse
POST .../{id}/publish, /close, /reopen, /withdrawpolicy:writeskift dens tilstand
GET .../{id}/osv, /csaf, /cve-requestfindings:read eller advisories:readeksport
POST .../{id}/credits, DELETE .../{id}/credits/{credit}policy:writekrediteringer
GET, POST .../{id}/commentsadvisories:read / policy:writefortrolige kommentarer

findings:read læser kun offentliggjorte meddelelser for offentlige repositorier, og kun med accepterede krediteringer. Udkast, lukkede meddelelser, meddelelser for private repositorier og alle meddelelsers kommentarer kræver advisories:read, som findings:read ikke omfatter, og som tokens udstedt til CI-jobs ikke har som standard. En kreditering navngiver en frem.sh-bruger: et ukendt login afvises.

De fulde skemaer findes i API-referencen.