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:
- organisationens ejere. Dens revisorer ser kun, at det findes, dets repository, tilstand og datoer, aldrig indholdet;
- administratorerne af det repository, det handler om (se Repository-administratorer);
- de personer, de inviterer til det (se Samarbejdspartnere).
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 skriver | Betyder |
|---|---|
< 1.2.3 | alle versioner før 1.2.3 |
>= 1.0.0, < 1.2.3 | fra 1.0.0 op til, men ikke med, 1.2.3 |
<= 2.0.1 | alle versioner til og med 2.0.1 |
= 3.1.0 | kun 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
withdrawnsat, 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 statusdraft, en offentliggjort meddelelse TLP WHITE med statusfinal.
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-xxxxHver 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 sti | Scope | Gør |
|---|---|---|
GET /orgs/{org}/security-advisories | findings:read / advisories:read | liste (?state=, ?repo=) |
POST /orgs/{org}/security-advisories | policy:write | opret et udkast |
GET, PUT, DELETE /orgs/{org}/security-advisories/{id} | findings:read eller advisories:read / policy:write | læs, erstat, slet et udkast eller en lukket meddelelse |
POST .../{id}/publish, /close, /reopen, /withdraw | policy:write | skift dens tilstand |
GET .../{id}/osv, /csaf, /cve-request | findings:read eller advisories:read | eksport |
POST .../{id}/credits, DELETE .../{id}/credits/{credit} | policy:write | krediteringer |
GET, POST .../{id}/comments | advisories:read / policy:write | fortrolige 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.