Säkerhetsmeddelanden för dina repon
När någon hittar en svaghet i programvara som du underhåller åtgärdar du den först och berättar om den sedan. Ett säkerhetsmeddelande är hur du berättar det: ett kort, strukturerat besked om vad som påverkas, hur allvarligt och vilken version som åtgärdar det. Skannrar läser säkerhetsmeddelanden för att varna alla som är beroende av ditt paket.
fremforge håller en organisations säkerhetsmeddelanden under Säkerhet ›
Rapporter › Säkerhetsmeddelanden, och i API:t under /_app/api/v1/orgs/{org}/security-advisories.
Utkast i förtroende
Nytt meddelande öppnar ett utkast. Ett utkast anger:
- det repo det gäller;
- en titel på en rad och en beskrivning: vad svagheten är, vem som påverkas, konsekvenserna och hur man åtgärdar eller kringgår den;
- de berörda paketen, vart och ett med sitt ekosystem, paketnamn, sårbara versioner och den första åtgärdade versionen;
- allvarlighetsgraden, som en CVSS-vektor eller en nivå (critical, high, medium, low);
- svagheterna (CWE-id:n), ett valfritt CVE-id och referenser.
Ett utkast är bara synligt för:
- organisationens ägare. Dess granskare ser bara att det finns, dess repo, status och datum, aldrig innehållet;
- administratörerna för det repo det gäller (se Repo-administratörer);
- de personer som de bjuder in till det (se Medarbetare).
Titel, beskrivning, referenser och kommentarer lagras krypterade. fremforges egna driftverktyg och AI-agenter ser varken texten eller vem som skrev den.
De som kan se ett utkast kan diskutera det i konfidentiella kommentarer. De förblir privata, även efter att säkerhetsmeddelandet har publicerats.
Sårbara versioner
Skriv de sårbara versionerna som ett eller två villkor, i samma form som GitHub använder:
| Du skriver | Betyder |
|---|---|
< 1.2.3 | varje version före 1.2.3 |
>= 1.0.0, < 1.2.3 | från 1.0.0 upp till, men inte inklusive, 1.2.3 |
<= 2.0.1 | varje version till och med 2.0.1 |
= 3.1.0 | bara 3.1.0 |
> avvisas: OSV-formatet har ingen exklusiv nedre gräns, så använd >=.
Med < X är den första åtgärdade versionen X. Lämna Åtgärdad version tom,
eller använd <= för den sista berörda versionen.
Ekosystem: npm, PyPI, Maven (groupId:artifactId), Go (modulsökvägen),
crates.io, RubyGems, NuGet, Packagist, Pub, Hex, GitHub Actions
(owner/repository), SwiftURL och CRAN.
Allvarlighetsgrad
En basvektor för CVSS 3.1 sätter allvarlighetsgraden utifrån sin baspoäng, som fremforge räknar ut. En basvektor för CVSS 4.0 kontrolleras och sparas som den är angiven. Välj då allvarlighetsgraden själv: poängen för CVSS 4.0 räknas inte ut.
Publicera
Publicera meddelandet kräver en allvarlighetsgrad och minst ett berört paket.
- För ett publikt repo (inte privat, i en organisation vars synlighet
är publik) blir säkerhetsmeddelandet publikt direkt: en sida på
https://frem.sh/_app/advisories/<id>och en OSV-post (se nedan). Om repot är publikt kontrolleras på nytt vid varje publik läsning. Om du gör repot privat senare slutar dess säkerhetsmeddelanden att levereras vid nästa läsning. - För ett privat repo förblir säkerhetsmeddelandet bara synligt inom din organisation. Det blir inte publikt om du öppnar repot senare; publicera då ett nytt.
Släpp fixen innan du publicerar: säkerhetsmeddelandet berättar för alla var svagheten finns.
Fixen utvecklas tills vidare utanför fremforge. Ett säkerhetsmeddelande innehåller text; fremforge har ingen tillfällig privat fork för det. Ett privat repo i din organisation skulle kunna läsas av varje team med åtkomst till alla repon, vilket som standard omfattar Members och Viewers, så det erbjuds inte. Utveckla fixen på det sätt som ditt projekt hanterar opublicerade säkerhetsfixar, och publicera säkerhetsmeddelandet när den åtgärdade versionen har släppts.
Varje säkerhetsmeddelande har ett id på formen FFSA-xxxx-xxxx-xxxx, som bestäms när
utkastet skapas.
Repo-administratörer
Ett repos administratörer hanterar säkerhetsmeddelanden och privata rapporter för
det repot utan att vara ägare av organisationen, på samma sätt som GitHub
låter repo-administratörer göra det. De hittar rapporterna som skickats till
de repon de administrerar under Rapporter till repon du administrerar
på /_app/security-reports, kan godkänna
eller avvisa dem, och läsa och kommentera de reponas utkast. Om
någon administrerar ett repo frågas frem.sh vid varje anrop, så en
ändring av behörigheter gäller direkt. En organisationsägare räknas som
administratör för varje repo i organisationen.
Medarbetare
Bjud in personer till ett utkast eller ett publicerat säkerhetsmeddelande med deras
frem.sh-inloggning, till exempel en extern forskare eller en underhållare från ett annat
projekt. De behöver inte vara medlemmar i din organisation. En inbjuden person läser
säkerhetsmeddelandet och dess konfidentiella kommentarer, och lägger till kommentarer, från sin
egen sida på /_app/security-reports. Hen kan
inte ändra eller publicera det. Om du tar bort personen upphör åtkomsten direkt. Upp till 20
personer kan bjudas in till ett säkerhetsmeddelande.
Privat sårbarhetsrapportering
Med privat sårbarhetsrapportering påslagen kan vem som helst som är inloggad på frem.sh och kan läsa ett repo rapportera en svaghet i det till dig i förtroende, även personer utanför din organisation. Utan den måste den som hittar svagheten gissa en e-postadress eller öppna en publik issue.
Den är avstängd tills du slår på den. Ägare anger en standard för hela organisationen under Säkerhet › Rapporter › Säkerhetsmeddelanden › Inställningar, och kan slå på eller av den för enskilda repon där; en inställning för ett repo går före standarden.
Vad en rapportör skickar
Rapportformuläret finns på
https://frem.sh/_app/security-reports/new?repo=<org>/<repository>. Länka till det
från ditt repos SECURITY.md. En rapport har en titel, en beskrivning,
de berörda versionerna, hur svagheten hittades och ett valfritt proof of
concept. Den lagras krypterad, och bara organisationens ägare,
repots administratörer och rapportören ser den. Dess text finns aldrig i
ett e-postmeddelande eller i granskningsloggen; granskningsloggen anger rapporter med id.
För att hålla kanalen användbar begränsar fremforge rapporterna:
- 3 per person till ett repo, och 10 per person totalt, inom 24 timmar;
- inga från ett konto som är yngre än 24 timmar;
- 5 i minuten från en och samma IP-adress.
Ett anrop som skulle bryta mot en gräns avvisas och inget lagras.
Att avgöra en rapport
Organisationens ägare får ett e-postmeddelande när en rapport kommer in och hittar den
under Säkerhet › Rapporter › Säkerhetsmeddelanden › Privata rapporter. Repots
administratörer hittar den på sin egen sida på
/_app/security-reports.
- Godkänn rapporten gör ett utkast till säkerhetsmeddelande av rapporten, bjuder in rapportören som medarbetare och ber hen att godkänna ett omnämnande som reporter.
- Godkänn inte stänger rapporten med en orsak: ingen sårbarhet, dubblett, utanför omfånget, spam eller annat.
Oavsett vilket får rapportören besked via e-post. En rapportör kan dra tillbaka en rapport tills den är avgjord. En avvisad rapport raderas 2 år efter att den avvisades. Godkända rapporter och deras säkerhetsmeddelanden stannar hos din organisation.
Beroendeskanning
Ett publicerat säkerhetsmeddelande matchas mot din organisations förteckning över
beroenden varje dag och direkt efter att du publicerat det: ett repo som är beroende
av en berörd version får ett fynd under Säkerhet › Fynd ›
Beroenden, med säkerhetsmeddelandets FFSA-id, som vilken annan sårbarhet som helst.
Om du drar tillbaka säkerhetsmeddelandet tas de fynd bort som det gav upphov till.
För andra organisationer matchas ett säkerhetsmeddelande bara när det finns i fremforges plattformsflöde. Det kräver, och kontrolleras på nytt varje dag:
- att repot är publikt; och
- att din organisation bevisligen äger varje berört paket: ett paket från
din organisation i frem.sh-paketregistret, eller en Go-modul
under
frem.sh/<your organisation>/; eller annars att fremforge har granskat säkerhetsmeddelandet och godkänt det.
Ägarskapet kommer från frem.sh:s egna register, aldrig från paketnamnet: ett
npm-scope eller en modulsökväg som bara liknar din organisations namn
räknas inte. Om du förlorar paketet eller gör repot privat lämnar
säkerhetsmeddelandet plattformsflödet vid nästa dagliga körning. Plattformsflödet
levereras på /_app/api/v1/advisories?scope=platform, och fremforge lägger in det
i de OSV-databaser som dess skannrar läser.
Dra tillbaka, stänga, radera
- Ett publicerat säkerhetsmeddelande dras tillbaka, det raderas aldrig. Det stannar i
flödet med
withdrawnsatt, så att skannrar får veta att det inte längre gäller. - Ett utkast som du inte publicerar kan stängas (och öppnas igen) eller raderas tillsammans med sina kommentarer.
Omnämnanden
Nämn de personer som hittade, rapporterade eller åtgärdade svagheten, med deras frem.sh-inloggning
och en OSV-typ för omnämnande.
Ett omnämnande visas publikt och exporteras först när den omnämnda personen har
godkänt det, på sin egen sida på
/_app/security-reports. Att nämna
dig själv kräver inget godkännande.
Export: OSV och CSAF
Varje säkerhetsmeddelande, även utkast, kan laddas ned som:
- OSV 1.6: formatet som beroendeskannrar läser (osv-scanner, Trivy och fremforges egen beroendeskanning);
- CSAF 2.0: ett
csaf_security_advisory-dokument, det maskinläsbara format för säkerhetsmeddelanden som vägledningen under EU:s Cyber Resilience Act och BSI förväntar sig av tillverkare. Ett utkast är TLP AMBER med statusdraft, ett publicerat säkerhetsmeddelande TLP WHITE med statusfinal.
Varje nedladdning registreras i granskningsloggen
(security.advisory.exported), eftersom exporten av ett utkast beskriver en svaghet
som ännu inte är åtgärdad.
Det publika OSV-flödet
Publicerade säkerhetsmeddelanden för publika repon levereras utan autentisering, äldsta ändring först, högst 100 per sida:
# 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-xxxxVarje post följer OSV-schemat, med
CVE-id:t (om det finns) som alias och database_specific.source satt till
fremforge. Om repot är publikt kontrolleras vid varje anrop, så
ett säkerhetsmeddelande för ett repo som gjorts privat levereras inte vid nästa läsning. De
publika läsningarna är begränsade till 60 anrop i minuten per klientadress
(429 över det).
Begära ett CVE-id
fremforge är inte en CVE Numbering Authority och begär inte CVE-id:n
åt dig. Under Begär ett CVE-id ger ett säkerhetsmeddelande dig sitt innehåll som text
för MITRE:s formulär för CVE-begäran, eller för den CNA som
täcker ditt projekt om det finns en. Skicka den själv och ange sedan det CVE-id du
får i säkerhetsmeddelandet. API:t har samma text på
/orgs/{org}/security-advisories/{id}/cve-request.
EU:s Cyber Resilience Act
CRA förväntar sig att en tillverkare hanterar sårbarheter i sina produkter: åtgärdar dem och publicerar information om de åtgärdade. Säkerhetsmeddelanden med CSAF-export stöder det. De gör dig inte regelefterlevande på egen hand, och fremforge rapporterar ingenting till ENISA eller ett nationellt CSIRT åt dig. Rapporteringen enligt artikel 14 i CRA ligger kvar hos dig.
Ännu inte tillgängligt
- En tillfällig privat fork att utveckla fixen i: erbjuds inte, se Publicera.
API
| Metod och sökväg | Scope | Gör |
|---|---|---|
GET /orgs/{org}/security-advisories | findings:read / advisories:read | listar (?state=, ?repo=) |
POST /orgs/{org}/security-advisories | policy:write | skapar ett utkast |
GET, PUT, DELETE /orgs/{org}/security-advisories/{id} | findings:read eller advisories:read / policy:write | läser, ersätter, raderar ett utkast eller ett stängt meddelande |
POST .../{id}/publish, /close, /reopen, /withdraw | policy:write | ändrar dess status |
GET .../{id}/osv, /csaf, /cve-request | findings:read eller advisories:read | export |
POST .../{id}/credits, DELETE .../{id}/credits/{credit} | policy:write | omnämnanden |
GET, POST .../{id}/comments | advisories:read / policy:write | konfidentiella kommentarer |
findings:read läser bara publicerade säkerhetsmeddelanden för publika repon,
och bara godkända omnämnanden. Utkast, stängda säkerhetsmeddelanden, säkerhetsmeddelanden för privata
repon och kommentarerna till alla säkerhetsmeddelanden kräver advisories:read, som
findings:read inte omfattar och som tokens skapade för CI-jobb inte
har som standard. Ett omnämnande anger en frem.sh-användare: en okänd inloggning avvisas.
De fullständiga schemana finns i API-referensen.